0001
0002
0003
0004
0005
0006
0007
0008 #include <linux/compiler.h>
0009 #include <linux/kernel.h>
0010 #include <linux/ktime.h>
0011 #include <linux/fs.h>
0012 #include <linux/pagemap.h>
0013 #include <linux/rxrpc.h>
0014 #include <linux/key.h>
0015 #include <linux/workqueue.h>
0016 #include <linux/sched.h>
0017 #include <linux/fscache.h>
0018 #include <linux/backing-dev.h>
0019 #include <linux/uuid.h>
0020 #include <linux/mm_types.h>
0021 #include <linux/dns_resolver.h>
0022 #include <net/net_namespace.h>
0023 #include <net/netns/generic.h>
0024 #include <net/sock.h>
0025 #include <net/af_rxrpc.h>
0026
0027 #include "afs.h"
0028 #include "afs_vl.h"
0029
0030 #define AFS_CELL_MAX_ADDRS 15
0031
0032 struct pagevec;
0033 struct afs_call;
0034 struct afs_vnode;
0035
0036
0037
0038
0039
0040 enum afs_flock_mode {
0041 afs_flock_mode_unset,
0042 afs_flock_mode_local,
0043 afs_flock_mode_openafs,
0044 afs_flock_mode_strict,
0045 afs_flock_mode_write,
0046 };
0047
0048 struct afs_fs_context {
0049 bool force;
0050 bool autocell;
0051 bool dyn_root;
0052 bool no_cell;
0053 enum afs_flock_mode flock_mode;
0054 afs_voltype_t type;
0055 unsigned int volnamesz;
0056 const char *volname;
0057 struct afs_net *net;
0058 struct afs_cell *cell;
0059 struct afs_volume *volume;
0060 struct key *key;
0061 };
0062
0063 enum afs_call_state {
0064 AFS_CALL_CL_REQUESTING,
0065 AFS_CALL_CL_AWAIT_REPLY,
0066 AFS_CALL_CL_PROC_REPLY,
0067 AFS_CALL_SV_AWAIT_OP_ID,
0068 AFS_CALL_SV_AWAIT_REQUEST,
0069 AFS_CALL_SV_REPLYING,
0070 AFS_CALL_SV_AWAIT_ACK,
0071 AFS_CALL_COMPLETE,
0072 };
0073
0074
0075
0076
0077 struct afs_addr_list {
0078 struct rcu_head rcu;
0079 refcount_t usage;
0080 u32 version;
0081 unsigned char max_addrs;
0082 unsigned char nr_addrs;
0083 unsigned char preferred;
0084 unsigned char nr_ipv4;
0085 enum dns_record_source source:8;
0086 enum dns_lookup_status status:8;
0087 unsigned long failed;
0088 unsigned long responded;
0089 struct sockaddr_rxrpc addrs[];
0090 #define AFS_MAX_ADDRESSES ((unsigned int)(sizeof(unsigned long) * 8))
0091 };
0092
0093
0094
0095
0096 struct afs_call {
0097 const struct afs_call_type *type;
0098 struct afs_addr_list *alist;
0099 wait_queue_head_t waitq;
0100 struct work_struct async_work;
0101 struct work_struct work;
0102 struct rxrpc_call *rxcall;
0103 struct key *key;
0104 struct afs_net *net;
0105 struct afs_server *server;
0106 struct afs_vlserver *vlserver;
0107 void *request;
0108 size_t iov_len;
0109 struct iov_iter def_iter;
0110 struct iov_iter *write_iter;
0111 struct iov_iter *iter;
0112 union {
0113 struct kvec kvec[1];
0114 struct bio_vec bvec[1];
0115 };
0116 void *buffer;
0117 union {
0118 long ret0;
0119 struct afs_addr_list *ret_alist;
0120 struct afs_vldb_entry *ret_vldb;
0121 char *ret_str;
0122 };
0123 struct afs_operation *op;
0124 unsigned int server_index;
0125 refcount_t ref;
0126 enum afs_call_state state;
0127 spinlock_t state_lock;
0128 int error;
0129 u32 abort_code;
0130 unsigned int max_lifespan;
0131 unsigned request_size;
0132 unsigned reply_max;
0133 unsigned count2;
0134 unsigned char unmarshall;
0135 unsigned char addr_ix;
0136 bool drop_ref;
0137 bool need_attention;
0138 bool async;
0139 bool upgrade;
0140 bool intr;
0141 bool unmarshalling_error;
0142 u16 service_id;
0143 unsigned int debug_id;
0144 u32 operation_ID;
0145 u32 count;
0146 union {
0147 struct {
0148 __be32 tmp_u;
0149 __be32 tmp;
0150 } __attribute__((packed));
0151 __be64 tmp64;
0152 };
0153 ktime_t issue_time;
0154 };
0155
0156 struct afs_call_type {
0157 const char *name;
0158 unsigned int op;
0159
0160
0161
0162
0163 int (*deliver)(struct afs_call *call);
0164
0165
0166 void (*destructor)(struct afs_call *call);
0167
0168
0169 void (*work)(struct work_struct *work);
0170
0171
0172 void (*done)(struct afs_call *call);
0173 };
0174
0175
0176
0177
0178 struct afs_wb_key {
0179 refcount_t usage;
0180 struct key *key;
0181 struct list_head vnode_link;
0182 };
0183
0184
0185
0186
0187 struct afs_file {
0188 struct key *key;
0189 struct afs_wb_key *wb;
0190 };
0191
0192 static inline struct key *afs_file_key(struct file *file)
0193 {
0194 struct afs_file *af = file->private_data;
0195
0196 return af->key;
0197 }
0198
0199
0200
0201
0202 struct afs_read {
0203 loff_t pos;
0204 loff_t len;
0205 loff_t actual_len;
0206 loff_t file_size;
0207 struct key *key;
0208 struct afs_vnode *vnode;
0209 struct netfs_io_subrequest *subreq;
0210 afs_dataversion_t data_version;
0211 refcount_t usage;
0212 unsigned int call_debug_id;
0213 unsigned int nr_pages;
0214 int error;
0215 void (*done)(struct afs_read *);
0216 void (*cleanup)(struct afs_read *);
0217 struct iov_iter *iter;
0218 struct iov_iter def_iter;
0219 };
0220
0221
0222
0223
0224
0225 struct afs_super_info {
0226 struct net *net_ns;
0227 struct afs_cell *cell;
0228 struct afs_volume *volume;
0229 enum afs_flock_mode flock_mode:8;
0230 bool dyn_root;
0231 };
0232
0233 static inline struct afs_super_info *AFS_FS_S(struct super_block *sb)
0234 {
0235 return sb->s_fs_info;
0236 }
0237
0238 extern struct file_system_type afs_fs_type;
0239
0240
0241
0242
0243 struct afs_sysnames {
0244 #define AFS_NR_SYSNAME 16
0245 char *subs[AFS_NR_SYSNAME];
0246 refcount_t usage;
0247 unsigned short nr;
0248 char blank[1];
0249 };
0250
0251
0252
0253
0254 struct afs_net {
0255 struct net *net;
0256 struct afs_uuid uuid;
0257 bool live;
0258
0259
0260 struct socket *socket;
0261 struct afs_call *spare_incoming_call;
0262 struct work_struct charge_preallocation_work;
0263 struct mutex socket_mutex;
0264 atomic_t nr_outstanding_calls;
0265 atomic_t nr_superblocks;
0266
0267
0268 struct rb_root cells;
0269 struct afs_cell *ws_cell;
0270 struct work_struct cells_manager;
0271 struct timer_list cells_timer;
0272 atomic_t cells_outstanding;
0273 struct rw_semaphore cells_lock;
0274 struct mutex cells_alias_lock;
0275
0276 struct mutex proc_cells_lock;
0277 struct hlist_head proc_cells;
0278
0279
0280
0281
0282
0283 seqlock_t fs_lock;
0284 struct rb_root fs_servers;
0285 struct list_head fs_probe_fast;
0286 struct list_head fs_probe_slow;
0287 struct hlist_head fs_proc;
0288
0289 struct hlist_head fs_addresses4;
0290 struct hlist_head fs_addresses6;
0291 seqlock_t fs_addr_lock;
0292
0293 struct work_struct fs_manager;
0294 struct timer_list fs_timer;
0295
0296 struct work_struct fs_prober;
0297 struct timer_list fs_probe_timer;
0298 atomic_t servers_outstanding;
0299
0300
0301 struct mutex lock_manager_mutex;
0302
0303
0304 struct super_block *dynroot_sb;
0305 struct proc_dir_entry *proc_afs;
0306 struct afs_sysnames *sysnames;
0307 rwlock_t sysnames_lock;
0308
0309
0310 atomic_t n_lookup;
0311 atomic_t n_reval;
0312 atomic_t n_inval;
0313 atomic_t n_relpg;
0314 atomic_t n_read_dir;
0315 atomic_t n_dir_cr;
0316 atomic_t n_dir_rm;
0317 atomic_t n_stores;
0318 atomic_long_t n_store_bytes;
0319 atomic_long_t n_fetch_bytes;
0320 atomic_t n_fetches;
0321 };
0322
0323 extern const char afs_init_sysname[];
0324
0325 enum afs_cell_state {
0326 AFS_CELL_UNSET,
0327 AFS_CELL_ACTIVATING,
0328 AFS_CELL_ACTIVE,
0329 AFS_CELL_DEACTIVATING,
0330 AFS_CELL_INACTIVE,
0331 AFS_CELL_FAILED,
0332 AFS_CELL_REMOVED,
0333 };
0334
0335
0336
0337
0338
0339
0340
0341
0342
0343
0344
0345
0346
0347
0348
0349
0350
0351
0352
0353
0354 struct afs_cell {
0355 union {
0356 struct rcu_head rcu;
0357 struct rb_node net_node;
0358 };
0359 struct afs_net *net;
0360 struct afs_cell *alias_of;
0361 struct afs_volume *root_volume;
0362 struct key *anonymous_key;
0363 struct work_struct manager;
0364 struct hlist_node proc_link;
0365 time64_t dns_expiry;
0366 time64_t last_inactive;
0367 refcount_t ref;
0368 atomic_t active;
0369 unsigned long flags;
0370 #define AFS_CELL_FL_NO_GC 0
0371 #define AFS_CELL_FL_DO_LOOKUP 1
0372 #define AFS_CELL_FL_CHECK_ALIAS 2
0373 enum afs_cell_state state;
0374 short error;
0375 enum dns_record_source dns_source:8;
0376 enum dns_lookup_status dns_status:8;
0377 unsigned int dns_lookup_count;
0378 unsigned int debug_id;
0379
0380
0381 struct rb_root volumes;
0382 struct hlist_head proc_volumes;
0383 seqlock_t volume_lock;
0384
0385
0386 struct rb_root fs_servers;
0387 seqlock_t fs_lock;
0388 struct rw_semaphore fs_open_mmaps_lock;
0389 struct list_head fs_open_mmaps;
0390 atomic_t fs_s_break;
0391
0392
0393 rwlock_t vl_servers_lock;
0394 struct afs_vlserver_list __rcu *vl_servers;
0395
0396 u8 name_len;
0397 char *name;
0398 };
0399
0400
0401
0402
0403 struct afs_vlserver {
0404 struct rcu_head rcu;
0405 struct afs_addr_list __rcu *addresses;
0406 unsigned long flags;
0407 #define AFS_VLSERVER_FL_PROBED 0
0408 #define AFS_VLSERVER_FL_PROBING 1
0409 #define AFS_VLSERVER_FL_IS_YFS 2
0410 #define AFS_VLSERVER_FL_RESPONDING 3
0411 rwlock_t lock;
0412 refcount_t ref;
0413 unsigned int rtt;
0414
0415
0416 wait_queue_head_t probe_wq;
0417 atomic_t probe_outstanding;
0418 spinlock_t probe_lock;
0419 struct {
0420 unsigned int rtt;
0421 u32 abort_code;
0422 short error;
0423 unsigned short flags;
0424 #define AFS_VLSERVER_PROBE_RESPONDED 0x01
0425 #define AFS_VLSERVER_PROBE_IS_YFS 0x02
0426 #define AFS_VLSERVER_PROBE_NOT_YFS 0x04
0427 #define AFS_VLSERVER_PROBE_LOCAL_FAILURE 0x08
0428 } probe;
0429
0430 u16 port;
0431 u16 name_len;
0432 char name[];
0433 };
0434
0435
0436
0437
0438 struct afs_vlserver_entry {
0439 u16 priority;
0440 u16 weight;
0441 enum dns_record_source source:8;
0442 enum dns_lookup_status status:8;
0443 struct afs_vlserver *server;
0444 };
0445
0446 struct afs_vlserver_list {
0447 struct rcu_head rcu;
0448 refcount_t ref;
0449 u8 nr_servers;
0450 u8 index;
0451 u8 preferred;
0452 enum dns_record_source source:8;
0453 enum dns_lookup_status status:8;
0454 rwlock_t lock;
0455 struct afs_vlserver_entry servers[];
0456 };
0457
0458
0459
0460
0461
0462
0463 struct afs_vldb_entry {
0464 afs_volid_t vid[3];
0465
0466 unsigned long flags;
0467 #define AFS_VLDB_HAS_RW 0
0468 #define AFS_VLDB_HAS_RO 1
0469 #define AFS_VLDB_HAS_BAK 2
0470 #define AFS_VLDB_QUERY_VALID 3
0471 #define AFS_VLDB_QUERY_ERROR 4
0472
0473 uuid_t fs_server[AFS_NMAXNSERVERS];
0474 u32 addr_version[AFS_NMAXNSERVERS];
0475 u8 fs_mask[AFS_NMAXNSERVERS];
0476 #define AFS_VOL_VTM_RW 0x01
0477 #define AFS_VOL_VTM_RO 0x02
0478 #define AFS_VOL_VTM_BAK 0x04
0479 short error;
0480 u8 nr_servers;
0481 u8 name_len;
0482 u8 name[AFS_MAXVOLNAME + 1];
0483 };
0484
0485
0486
0487
0488 struct afs_server {
0489 struct rcu_head rcu;
0490 union {
0491 uuid_t uuid;
0492 struct afs_uuid _uuid;
0493 };
0494
0495 struct afs_addr_list __rcu *addresses;
0496 struct afs_cell *cell;
0497 struct rb_node uuid_rb;
0498 struct afs_server __rcu *uuid_next;
0499 struct afs_server *uuid_prev;
0500 struct list_head probe_link;
0501 struct hlist_node addr4_link;
0502 struct hlist_node addr6_link;
0503 struct hlist_node proc_link;
0504 struct work_struct initcb_work;
0505 struct afs_server *gc_next;
0506 time64_t unuse_time;
0507 unsigned long flags;
0508 #define AFS_SERVER_FL_RESPONDING 0
0509 #define AFS_SERVER_FL_UPDATING 1
0510 #define AFS_SERVER_FL_NEEDS_UPDATE 2
0511 #define AFS_SERVER_FL_NOT_READY 4
0512 #define AFS_SERVER_FL_NOT_FOUND 5
0513 #define AFS_SERVER_FL_VL_FAIL 6
0514 #define AFS_SERVER_FL_MAY_HAVE_CB 8
0515 #define AFS_SERVER_FL_IS_YFS 16
0516 #define AFS_SERVER_FL_NO_IBULK 17
0517 #define AFS_SERVER_FL_NO_RM2 18
0518 #define AFS_SERVER_FL_HAS_FS64 19
0519 refcount_t ref;
0520 atomic_t active;
0521 u32 addr_version;
0522 unsigned int rtt;
0523 unsigned int debug_id;
0524
0525
0526 rwlock_t fs_lock;
0527
0528
0529 unsigned cb_s_break;
0530
0531
0532 unsigned long probed_at;
0533 wait_queue_head_t probe_wq;
0534 atomic_t probe_outstanding;
0535 spinlock_t probe_lock;
0536 struct {
0537 unsigned int rtt;
0538 u32 abort_code;
0539 short error;
0540 bool responded:1;
0541 bool is_yfs:1;
0542 bool not_yfs:1;
0543 bool local_failure:1;
0544 } probe;
0545 };
0546
0547
0548
0549
0550 struct afs_server_entry {
0551 struct afs_server *server;
0552 };
0553
0554 struct afs_server_list {
0555 afs_volid_t vids[AFS_MAXTYPES];
0556 refcount_t usage;
0557 unsigned char nr_servers;
0558 unsigned char preferred;
0559 unsigned short vnovol_mask;
0560 unsigned int seq;
0561 rwlock_t lock;
0562 struct afs_server_entry servers[];
0563 };
0564
0565
0566
0567
0568 struct afs_volume {
0569 union {
0570 struct rcu_head rcu;
0571 afs_volid_t vid;
0572 };
0573 refcount_t ref;
0574 time64_t update_at;
0575 struct afs_cell *cell;
0576 struct rb_node cell_node;
0577 struct hlist_node proc_link;
0578 struct super_block __rcu *sb;
0579 unsigned long flags;
0580 #define AFS_VOLUME_NEEDS_UPDATE 0
0581 #define AFS_VOLUME_UPDATING 1
0582 #define AFS_VOLUME_WAIT 2
0583 #define AFS_VOLUME_DELETED 3
0584 #define AFS_VOLUME_OFFLINE 4
0585 #define AFS_VOLUME_BUSY 5
0586 #define AFS_VOLUME_MAYBE_NO_IBULK 6
0587 #ifdef CONFIG_AFS_FSCACHE
0588 struct fscache_volume *cache;
0589 #endif
0590 struct afs_server_list __rcu *servers;
0591 rwlock_t servers_lock;
0592 unsigned int servers_seq;
0593
0594 unsigned cb_v_break;
0595 rwlock_t cb_v_break_lock;
0596
0597 afs_voltype_t type;
0598 char type_force;
0599 u8 name_len;
0600 u8 name[AFS_MAXVOLNAME + 1];
0601 };
0602
0603 enum afs_lock_state {
0604 AFS_VNODE_LOCK_NONE,
0605 AFS_VNODE_LOCK_WAITING_FOR_CB,
0606 AFS_VNODE_LOCK_SETTING,
0607 AFS_VNODE_LOCK_GRANTED,
0608 AFS_VNODE_LOCK_EXTENDING,
0609 AFS_VNODE_LOCK_NEED_UNLOCK,
0610 AFS_VNODE_LOCK_UNLOCKING,
0611 AFS_VNODE_LOCK_DELETED,
0612 };
0613
0614
0615
0616
0617
0618
0619
0620 struct afs_vnode {
0621 struct netfs_inode netfs;
0622 struct afs_volume *volume;
0623 struct afs_fid fid;
0624 struct afs_file_status status;
0625 afs_dataversion_t invalid_before;
0626 struct afs_permits __rcu *permit_cache;
0627 struct mutex io_lock;
0628 struct rw_semaphore validate_lock;
0629 struct rw_semaphore rmdir_lock;
0630 struct key *silly_key;
0631 spinlock_t wb_lock;
0632 spinlock_t lock;
0633 unsigned long flags;
0634 #define AFS_VNODE_CB_PROMISED 0
0635 #define AFS_VNODE_UNSET 1
0636 #define AFS_VNODE_DIR_VALID 2
0637 #define AFS_VNODE_ZAP_DATA 3
0638 #define AFS_VNODE_DELETED 4
0639 #define AFS_VNODE_MOUNTPOINT 5
0640 #define AFS_VNODE_AUTOCELL 6
0641 #define AFS_VNODE_PSEUDODIR 7
0642 #define AFS_VNODE_NEW_CONTENT 8
0643 #define AFS_VNODE_SILLY_DELETED 9
0644 #define AFS_VNODE_MODIFYING 10
0645
0646 struct list_head wb_keys;
0647 struct list_head pending_locks;
0648 struct list_head granted_locks;
0649 struct delayed_work lock_work;
0650 struct key *lock_key;
0651 ktime_t locked_at;
0652 enum afs_lock_state lock_state : 8;
0653 afs_lock_type_t lock_type : 8;
0654
0655
0656 struct work_struct cb_work;
0657 struct list_head cb_mmap_link;
0658 void *cb_server;
0659 atomic_t cb_nr_mmap;
0660 unsigned int cb_fs_s_break;
0661 unsigned int cb_s_break;
0662 unsigned int cb_v_break;
0663 unsigned int cb_break;
0664 seqlock_t cb_lock;
0665
0666 time64_t cb_expires_at;
0667 };
0668
0669 static inline struct fscache_cookie *afs_vnode_cache(struct afs_vnode *vnode)
0670 {
0671 #ifdef CONFIG_AFS_FSCACHE
0672 return netfs_i_cookie(&vnode->netfs);
0673 #else
0674 return NULL;
0675 #endif
0676 }
0677
0678 static inline void afs_vnode_set_cache(struct afs_vnode *vnode,
0679 struct fscache_cookie *cookie)
0680 {
0681 #ifdef CONFIG_AFS_FSCACHE
0682 vnode->netfs.cache = cookie;
0683 #endif
0684 }
0685
0686
0687
0688
0689 struct afs_permit {
0690 struct key *key;
0691 afs_access_t access;
0692 };
0693
0694
0695
0696
0697
0698 struct afs_permits {
0699 struct rcu_head rcu;
0700 struct hlist_node hash_node;
0701 unsigned long h;
0702 refcount_t usage;
0703 unsigned short nr_permits;
0704 bool invalidated;
0705 struct afs_permit permits[];
0706 };
0707
0708
0709
0710
0711 struct afs_error {
0712 short error;
0713 bool responded;
0714 };
0715
0716
0717
0718
0719 struct afs_addr_cursor {
0720 struct afs_addr_list *alist;
0721 unsigned long tried;
0722 signed char index;
0723 bool responded;
0724 unsigned short nr_iterations;
0725 short error;
0726 u32 abort_code;
0727 };
0728
0729
0730
0731
0732 struct afs_vl_cursor {
0733 struct afs_addr_cursor ac;
0734 struct afs_cell *cell;
0735 struct afs_vlserver_list *server_list;
0736 struct afs_vlserver *server;
0737 struct key *key;
0738 unsigned long untried;
0739 short index;
0740 short error;
0741 unsigned short flags;
0742 #define AFS_VL_CURSOR_STOP 0x0001
0743 #define AFS_VL_CURSOR_RETRY 0x0002
0744 #define AFS_VL_CURSOR_RETRIED 0x0004
0745 unsigned short nr_iterations;
0746 };
0747
0748
0749
0750
0751 struct afs_operation_ops {
0752 void (*issue_afs_rpc)(struct afs_operation *op);
0753 void (*issue_yfs_rpc)(struct afs_operation *op);
0754 void (*success)(struct afs_operation *op);
0755 void (*aborted)(struct afs_operation *op);
0756 void (*failed)(struct afs_operation *op);
0757 void (*edit_dir)(struct afs_operation *op);
0758 void (*put)(struct afs_operation *op);
0759 };
0760
0761 struct afs_vnode_param {
0762 struct afs_vnode *vnode;
0763 struct afs_fid fid;
0764 struct afs_status_cb scb;
0765 afs_dataversion_t dv_before;
0766 unsigned int cb_break_before;
0767 u8 dv_delta;
0768 bool put_vnode:1;
0769 bool need_io_lock:1;
0770 bool update_ctime:1;
0771 bool set_size:1;
0772 bool op_unlinked:1;
0773 bool speculative:1;
0774 bool modification:1;
0775 };
0776
0777
0778
0779
0780
0781 struct afs_operation {
0782 struct afs_net *net;
0783 struct key *key;
0784 const struct afs_call_type *type;
0785 const struct afs_operation_ops *ops;
0786
0787
0788 struct afs_volume *volume;
0789 struct afs_vnode_param file[2];
0790 struct afs_vnode_param *more_files;
0791 struct afs_volsync volsync;
0792 struct dentry *dentry;
0793 struct dentry *dentry_2;
0794 struct timespec64 mtime;
0795 struct timespec64 ctime;
0796 short nr_files;
0797 short error;
0798 unsigned int debug_id;
0799
0800 unsigned int cb_v_break;
0801 unsigned int cb_s_break;
0802
0803 union {
0804 struct {
0805 int which;
0806 } fetch_status;
0807 struct {
0808 int reason;
0809 mode_t mode;
0810 const char *symlink;
0811 } create;
0812 struct {
0813 bool need_rehash;
0814 } unlink;
0815 struct {
0816 struct dentry *rehash;
0817 struct dentry *tmp;
0818 bool new_negative;
0819 } rename;
0820 struct {
0821 struct afs_read *req;
0822 } fetch;
0823 struct {
0824 afs_lock_type_t type;
0825 } lock;
0826 struct {
0827 struct iov_iter *write_iter;
0828 loff_t pos;
0829 loff_t size;
0830 loff_t i_size;
0831 bool laundering;
0832 } store;
0833 struct {
0834 struct iattr *attr;
0835 loff_t old_i_size;
0836 } setattr;
0837 struct afs_acl *acl;
0838 struct yfs_acl *yacl;
0839 struct {
0840 struct afs_volume_status vs;
0841 struct kstatfs *buf;
0842 } volstatus;
0843 };
0844
0845
0846 struct afs_addr_cursor ac;
0847 struct afs_server_list *server_list;
0848 struct afs_server *server;
0849 struct afs_call *call;
0850 unsigned long untried;
0851 short index;
0852 unsigned short nr_iterations;
0853
0854 unsigned int flags;
0855 #define AFS_OPERATION_STOP 0x0001
0856 #define AFS_OPERATION_VBUSY 0x0002
0857 #define AFS_OPERATION_VMOVED 0x0004
0858 #define AFS_OPERATION_VNOVOL 0x0008
0859 #define AFS_OPERATION_CUR_ONLY 0x0010
0860 #define AFS_OPERATION_NO_VSLEEP 0x0020
0861 #define AFS_OPERATION_UNINTR 0x0040
0862 #define AFS_OPERATION_DOWNGRADE 0x0080
0863 #define AFS_OPERATION_LOCK_0 0x0100
0864 #define AFS_OPERATION_LOCK_1 0x0200
0865 #define AFS_OPERATION_TRIED_ALL 0x0400
0866 #define AFS_OPERATION_RETRY_SERVER 0x0800
0867 #define AFS_OPERATION_DIR_CONFLICT 0x1000
0868 };
0869
0870
0871
0872
0873 struct afs_vnode_cache_aux {
0874 __be64 data_version;
0875 } __packed;
0876
0877 static inline void afs_set_cache_aux(struct afs_vnode *vnode,
0878 struct afs_vnode_cache_aux *aux)
0879 {
0880 aux->data_version = cpu_to_be64(vnode->status.data_version);
0881 }
0882
0883 static inline void afs_invalidate_cache(struct afs_vnode *vnode, unsigned int flags)
0884 {
0885 struct afs_vnode_cache_aux aux;
0886
0887 afs_set_cache_aux(vnode, &aux);
0888 fscache_invalidate(afs_vnode_cache(vnode), &aux,
0889 i_size_read(&vnode->netfs.inode), flags);
0890 }
0891
0892
0893
0894
0895
0896
0897
0898 #ifdef CONFIG_64BIT
0899 #define __AFS_FOLIO_PRIV_MASK 0x7fffffffUL
0900 #define __AFS_FOLIO_PRIV_SHIFT 32
0901 #define __AFS_FOLIO_PRIV_MMAPPED 0x80000000UL
0902 #else
0903 #define __AFS_FOLIO_PRIV_MASK 0x7fffUL
0904 #define __AFS_FOLIO_PRIV_SHIFT 16
0905 #define __AFS_FOLIO_PRIV_MMAPPED 0x8000UL
0906 #endif
0907
0908 static inline unsigned int afs_folio_dirty_resolution(struct folio *folio)
0909 {
0910 int shift = folio_shift(folio) - (__AFS_FOLIO_PRIV_SHIFT - 1);
0911 return (shift > 0) ? shift : 0;
0912 }
0913
0914 static inline size_t afs_folio_dirty_from(struct folio *folio, unsigned long priv)
0915 {
0916 unsigned long x = priv & __AFS_FOLIO_PRIV_MASK;
0917
0918
0919 return x << afs_folio_dirty_resolution(folio);
0920 }
0921
0922 static inline size_t afs_folio_dirty_to(struct folio *folio, unsigned long priv)
0923 {
0924 unsigned long x = (priv >> __AFS_FOLIO_PRIV_SHIFT) & __AFS_FOLIO_PRIV_MASK;
0925
0926
0927 return (x + 1) << afs_folio_dirty_resolution(folio);
0928 }
0929
0930 static inline unsigned long afs_folio_dirty(struct folio *folio, size_t from, size_t to)
0931 {
0932 unsigned int res = afs_folio_dirty_resolution(folio);
0933 from >>= res;
0934 to = (to - 1) >> res;
0935 return (to << __AFS_FOLIO_PRIV_SHIFT) | from;
0936 }
0937
0938 static inline unsigned long afs_folio_dirty_mmapped(unsigned long priv)
0939 {
0940 return priv | __AFS_FOLIO_PRIV_MMAPPED;
0941 }
0942
0943 static inline bool afs_is_folio_dirty_mmapped(unsigned long priv)
0944 {
0945 return priv & __AFS_FOLIO_PRIV_MMAPPED;
0946 }
0947
0948 #include <trace/events/afs.h>
0949
0950
0951
0952
0953
0954 static inline struct afs_addr_list *afs_get_addrlist(struct afs_addr_list *alist)
0955 {
0956 if (alist)
0957 refcount_inc(&alist->usage);
0958 return alist;
0959 }
0960 extern struct afs_addr_list *afs_alloc_addrlist(unsigned int,
0961 unsigned short,
0962 unsigned short);
0963 extern void afs_put_addrlist(struct afs_addr_list *);
0964 extern struct afs_vlserver_list *afs_parse_text_addrs(struct afs_net *,
0965 const char *, size_t, char,
0966 unsigned short, unsigned short);
0967 extern struct afs_vlserver_list *afs_dns_query(struct afs_cell *, time64_t *);
0968 extern bool afs_iterate_addresses(struct afs_addr_cursor *);
0969 extern int afs_end_cursor(struct afs_addr_cursor *);
0970
0971 extern void afs_merge_fs_addr4(struct afs_addr_list *, __be32, u16);
0972 extern void afs_merge_fs_addr6(struct afs_addr_list *, __be32 *, u16);
0973
0974
0975
0976
0977 #ifdef CONFIG_AFS_FSCACHE
0978 extern struct fscache_netfs afs_cache_netfs;
0979 #endif
0980
0981
0982
0983
0984 extern void afs_invalidate_mmap_work(struct work_struct *);
0985 extern void afs_server_init_callback_work(struct work_struct *work);
0986 extern void afs_init_callback_state(struct afs_server *);
0987 extern void __afs_break_callback(struct afs_vnode *, enum afs_cb_break_reason);
0988 extern void afs_break_callback(struct afs_vnode *, enum afs_cb_break_reason);
0989 extern void afs_break_callbacks(struct afs_server *, size_t, struct afs_callback_break *);
0990
0991 static inline unsigned int afs_calc_vnode_cb_break(struct afs_vnode *vnode)
0992 {
0993 return vnode->cb_break + vnode->cb_v_break;
0994 }
0995
0996 static inline bool afs_cb_is_broken(unsigned int cb_break,
0997 const struct afs_vnode *vnode)
0998 {
0999 return cb_break != (vnode->cb_break + vnode->volume->cb_v_break);
1000 }
1001
1002
1003
1004
1005 extern int afs_cell_init(struct afs_net *, const char *);
1006 extern struct afs_cell *afs_find_cell(struct afs_net *, const char *, unsigned,
1007 enum afs_cell_trace);
1008 extern struct afs_cell *afs_lookup_cell(struct afs_net *, const char *, unsigned,
1009 const char *, bool);
1010 extern struct afs_cell *afs_use_cell(struct afs_cell *, enum afs_cell_trace);
1011 extern void afs_unuse_cell(struct afs_net *, struct afs_cell *, enum afs_cell_trace);
1012 extern struct afs_cell *afs_get_cell(struct afs_cell *, enum afs_cell_trace);
1013 extern void afs_see_cell(struct afs_cell *, enum afs_cell_trace);
1014 extern void afs_put_cell(struct afs_cell *, enum afs_cell_trace);
1015 extern void afs_queue_cell(struct afs_cell *, enum afs_cell_trace);
1016 extern void afs_manage_cells(struct work_struct *);
1017 extern void afs_cells_timer(struct timer_list *);
1018 extern void __net_exit afs_cell_purge(struct afs_net *);
1019
1020
1021
1022
1023 extern bool afs_cm_incoming_call(struct afs_call *);
1024
1025
1026
1027
1028 extern const struct file_operations afs_dir_file_operations;
1029 extern const struct inode_operations afs_dir_inode_operations;
1030 extern const struct address_space_operations afs_dir_aops;
1031 extern const struct dentry_operations afs_fs_dentry_operations;
1032
1033 extern void afs_d_release(struct dentry *);
1034 extern void afs_check_for_remote_deletion(struct afs_operation *);
1035
1036
1037
1038
1039 extern void afs_edit_dir_add(struct afs_vnode *, struct qstr *, struct afs_fid *,
1040 enum afs_edit_dir_reason);
1041 extern void afs_edit_dir_remove(struct afs_vnode *, struct qstr *, enum afs_edit_dir_reason);
1042
1043
1044
1045
1046 extern int afs_sillyrename(struct afs_vnode *, struct afs_vnode *,
1047 struct dentry *, struct key *);
1048 extern int afs_silly_iput(struct dentry *, struct inode *);
1049
1050
1051
1052
1053 extern const struct inode_operations afs_dynroot_inode_operations;
1054 extern const struct dentry_operations afs_dynroot_dentry_operations;
1055
1056 extern struct inode *afs_try_auto_mntpt(struct dentry *, struct inode *);
1057 extern int afs_dynroot_mkdir(struct afs_net *, struct afs_cell *);
1058 extern void afs_dynroot_rmdir(struct afs_net *, struct afs_cell *);
1059 extern int afs_dynroot_populate(struct super_block *);
1060 extern void afs_dynroot_depopulate(struct super_block *);
1061
1062
1063
1064
1065 extern const struct address_space_operations afs_file_aops;
1066 extern const struct address_space_operations afs_symlink_aops;
1067 extern const struct inode_operations afs_file_inode_operations;
1068 extern const struct file_operations afs_file_operations;
1069 extern const struct netfs_request_ops afs_req_ops;
1070
1071 extern int afs_cache_wb_key(struct afs_vnode *, struct afs_file *);
1072 extern void afs_put_wb_key(struct afs_wb_key *);
1073 extern int afs_open(struct inode *, struct file *);
1074 extern int afs_release(struct inode *, struct file *);
1075 extern int afs_fetch_data(struct afs_vnode *, struct afs_read *);
1076 extern struct afs_read *afs_alloc_read(gfp_t);
1077 extern void afs_put_read(struct afs_read *);
1078 extern int afs_write_inode(struct inode *, struct writeback_control *);
1079
1080 static inline struct afs_read *afs_get_read(struct afs_read *req)
1081 {
1082 refcount_inc(&req->usage);
1083 return req;
1084 }
1085
1086
1087
1088
1089 extern struct workqueue_struct *afs_lock_manager;
1090
1091 extern void afs_lock_op_done(struct afs_call *);
1092 extern void afs_lock_work(struct work_struct *);
1093 extern void afs_lock_may_be_available(struct afs_vnode *);
1094 extern int afs_lock(struct file *, int, struct file_lock *);
1095 extern int afs_flock(struct file *, int, struct file_lock *);
1096
1097
1098
1099
1100 extern void afs_fs_fetch_status(struct afs_operation *);
1101 extern void afs_fs_fetch_data(struct afs_operation *);
1102 extern void afs_fs_create_file(struct afs_operation *);
1103 extern void afs_fs_make_dir(struct afs_operation *);
1104 extern void afs_fs_remove_file(struct afs_operation *);
1105 extern void afs_fs_remove_dir(struct afs_operation *);
1106 extern void afs_fs_link(struct afs_operation *);
1107 extern void afs_fs_symlink(struct afs_operation *);
1108 extern void afs_fs_rename(struct afs_operation *);
1109 extern void afs_fs_store_data(struct afs_operation *);
1110 extern void afs_fs_setattr(struct afs_operation *);
1111 extern void afs_fs_get_volume_status(struct afs_operation *);
1112 extern void afs_fs_set_lock(struct afs_operation *);
1113 extern void afs_fs_extend_lock(struct afs_operation *);
1114 extern void afs_fs_release_lock(struct afs_operation *);
1115 extern int afs_fs_give_up_all_callbacks(struct afs_net *, struct afs_server *,
1116 struct afs_addr_cursor *, struct key *);
1117 extern bool afs_fs_get_capabilities(struct afs_net *, struct afs_server *,
1118 struct afs_addr_cursor *, struct key *);
1119 extern void afs_fs_inline_bulk_status(struct afs_operation *);
1120
1121 struct afs_acl {
1122 u32 size;
1123 u8 data[];
1124 };
1125
1126 extern void afs_fs_fetch_acl(struct afs_operation *);
1127 extern void afs_fs_store_acl(struct afs_operation *);
1128
1129
1130
1131
1132 extern struct afs_operation *afs_alloc_operation(struct key *, struct afs_volume *);
1133 extern int afs_put_operation(struct afs_operation *);
1134 extern bool afs_begin_vnode_operation(struct afs_operation *);
1135 extern void afs_wait_for_operation(struct afs_operation *);
1136 extern int afs_do_sync_operation(struct afs_operation *);
1137
1138 static inline void afs_op_nomem(struct afs_operation *op)
1139 {
1140 op->error = -ENOMEM;
1141 }
1142
1143 static inline void afs_op_set_vnode(struct afs_operation *op, unsigned int n,
1144 struct afs_vnode *vnode)
1145 {
1146 op->file[n].vnode = vnode;
1147 op->file[n].need_io_lock = true;
1148 }
1149
1150 static inline void afs_op_set_fid(struct afs_operation *op, unsigned int n,
1151 const struct afs_fid *fid)
1152 {
1153 op->file[n].fid = *fid;
1154 }
1155
1156
1157
1158
1159 extern void afs_fileserver_probe_result(struct afs_call *);
1160 extern void afs_fs_probe_fileserver(struct afs_net *, struct afs_server *, struct key *, bool);
1161 extern int afs_wait_for_fs_probes(struct afs_server_list *, unsigned long);
1162 extern void afs_probe_fileserver(struct afs_net *, struct afs_server *);
1163 extern void afs_fs_probe_dispatcher(struct work_struct *);
1164 extern int afs_wait_for_one_fs_probe(struct afs_server *, bool);
1165 extern void afs_fs_probe_cleanup(struct afs_net *);
1166
1167
1168
1169
1170 extern const struct afs_operation_ops afs_fetch_status_operation;
1171
1172 extern void afs_vnode_commit_status(struct afs_operation *, struct afs_vnode_param *);
1173 extern int afs_fetch_status(struct afs_vnode *, struct key *, bool, afs_access_t *);
1174 extern int afs_ilookup5_test_by_fid(struct inode *, void *);
1175 extern struct inode *afs_iget_pseudo_dir(struct super_block *, bool);
1176 extern struct inode *afs_iget(struct afs_operation *, struct afs_vnode_param *);
1177 extern struct inode *afs_root_iget(struct super_block *, struct key *);
1178 extern bool afs_check_validity(struct afs_vnode *);
1179 extern int afs_validate(struct afs_vnode *, struct key *);
1180 extern int afs_getattr(struct user_namespace *mnt_userns, const struct path *,
1181 struct kstat *, u32, unsigned int);
1182 extern int afs_setattr(struct user_namespace *mnt_userns, struct dentry *, struct iattr *);
1183 extern void afs_evict_inode(struct inode *);
1184 extern int afs_drop_inode(struct inode *);
1185
1186
1187
1188
1189 extern struct workqueue_struct *afs_wq;
1190 extern int afs_net_id;
1191
1192 static inline struct afs_net *afs_net(struct net *net)
1193 {
1194 return net_generic(net, afs_net_id);
1195 }
1196
1197 static inline struct afs_net *afs_sb2net(struct super_block *sb)
1198 {
1199 return afs_net(AFS_FS_S(sb)->net_ns);
1200 }
1201
1202 static inline struct afs_net *afs_d2net(struct dentry *dentry)
1203 {
1204 return afs_sb2net(dentry->d_sb);
1205 }
1206
1207 static inline struct afs_net *afs_i2net(struct inode *inode)
1208 {
1209 return afs_sb2net(inode->i_sb);
1210 }
1211
1212 static inline struct afs_net *afs_v2net(struct afs_vnode *vnode)
1213 {
1214 return afs_i2net(&vnode->netfs.inode);
1215 }
1216
1217 static inline struct afs_net *afs_sock2net(struct sock *sk)
1218 {
1219 return net_generic(sock_net(sk), afs_net_id);
1220 }
1221
1222 static inline void __afs_stat(atomic_t *s)
1223 {
1224 atomic_inc(s);
1225 }
1226
1227 #define afs_stat_v(vnode, n) __afs_stat(&afs_v2net(vnode)->n)
1228
1229
1230
1231
1232 extern int afs_abort_to_error(u32);
1233 extern void afs_prioritise_error(struct afs_error *, int, u32);
1234
1235
1236
1237
1238 extern const struct inode_operations afs_mntpt_inode_operations;
1239 extern const struct inode_operations afs_autocell_inode_operations;
1240 extern const struct file_operations afs_mntpt_file_operations;
1241
1242 extern struct vfsmount *afs_d_automount(struct path *);
1243 extern void afs_mntpt_kill_timer(void);
1244
1245
1246
1247
1248 #ifdef CONFIG_PROC_FS
1249 extern int __net_init afs_proc_init(struct afs_net *);
1250 extern void __net_exit afs_proc_cleanup(struct afs_net *);
1251 extern int afs_proc_cell_setup(struct afs_cell *);
1252 extern void afs_proc_cell_remove(struct afs_cell *);
1253 extern void afs_put_sysnames(struct afs_sysnames *);
1254 #else
1255 static inline int afs_proc_init(struct afs_net *net) { return 0; }
1256 static inline void afs_proc_cleanup(struct afs_net *net) {}
1257 static inline int afs_proc_cell_setup(struct afs_cell *cell) { return 0; }
1258 static inline void afs_proc_cell_remove(struct afs_cell *cell) {}
1259 static inline void afs_put_sysnames(struct afs_sysnames *sysnames) {}
1260 #endif
1261
1262
1263
1264
1265 extern bool afs_select_fileserver(struct afs_operation *);
1266 extern void afs_dump_edestaddrreq(const struct afs_operation *);
1267
1268
1269
1270
1271 extern struct workqueue_struct *afs_async_calls;
1272
1273 extern int __net_init afs_open_socket(struct afs_net *);
1274 extern void __net_exit afs_close_socket(struct afs_net *);
1275 extern void afs_charge_preallocation(struct work_struct *);
1276 extern void afs_put_call(struct afs_call *);
1277 extern void afs_make_call(struct afs_addr_cursor *, struct afs_call *, gfp_t);
1278 extern long afs_wait_for_call_to_complete(struct afs_call *, struct afs_addr_cursor *);
1279 extern struct afs_call *afs_alloc_flat_call(struct afs_net *,
1280 const struct afs_call_type *,
1281 size_t, size_t);
1282 extern void afs_flat_call_destructor(struct afs_call *);
1283 extern void afs_send_empty_reply(struct afs_call *);
1284 extern void afs_send_simple_reply(struct afs_call *, const void *, size_t);
1285 extern int afs_extract_data(struct afs_call *, bool);
1286 extern int afs_protocol_error(struct afs_call *, enum afs_eproto_cause);
1287
1288 static inline void afs_make_op_call(struct afs_operation *op, struct afs_call *call,
1289 gfp_t gfp)
1290 {
1291 op->call = call;
1292 op->type = call->type;
1293 call->op = op;
1294 call->key = op->key;
1295 call->intr = !(op->flags & AFS_OPERATION_UNINTR);
1296 afs_make_call(&op->ac, call, gfp);
1297 }
1298
1299 static inline void afs_extract_begin(struct afs_call *call, void *buf, size_t size)
1300 {
1301 call->iov_len = size;
1302 call->kvec[0].iov_base = buf;
1303 call->kvec[0].iov_len = size;
1304 iov_iter_kvec(&call->def_iter, READ, call->kvec, 1, size);
1305 }
1306
1307 static inline void afs_extract_to_tmp(struct afs_call *call)
1308 {
1309 call->iov_len = sizeof(call->tmp);
1310 afs_extract_begin(call, &call->tmp, sizeof(call->tmp));
1311 }
1312
1313 static inline void afs_extract_to_tmp64(struct afs_call *call)
1314 {
1315 call->iov_len = sizeof(call->tmp64);
1316 afs_extract_begin(call, &call->tmp64, sizeof(call->tmp64));
1317 }
1318
1319 static inline void afs_extract_discard(struct afs_call *call, size_t size)
1320 {
1321 call->iov_len = size;
1322 iov_iter_discard(&call->def_iter, READ, size);
1323 }
1324
1325 static inline void afs_extract_to_buf(struct afs_call *call, size_t size)
1326 {
1327 call->iov_len = size;
1328 afs_extract_begin(call, call->buffer, size);
1329 }
1330
1331 static inline int afs_transfer_reply(struct afs_call *call)
1332 {
1333 return afs_extract_data(call, false);
1334 }
1335
1336 static inline bool afs_check_call_state(struct afs_call *call,
1337 enum afs_call_state state)
1338 {
1339 return READ_ONCE(call->state) == state;
1340 }
1341
1342 static inline bool afs_set_call_state(struct afs_call *call,
1343 enum afs_call_state from,
1344 enum afs_call_state to)
1345 {
1346 bool ok = false;
1347
1348 spin_lock_bh(&call->state_lock);
1349 if (call->state == from) {
1350 call->state = to;
1351 trace_afs_call_state(call, from, to, 0, 0);
1352 ok = true;
1353 }
1354 spin_unlock_bh(&call->state_lock);
1355 return ok;
1356 }
1357
1358 static inline void afs_set_call_complete(struct afs_call *call,
1359 int error, u32 remote_abort)
1360 {
1361 enum afs_call_state state;
1362 bool ok = false;
1363
1364 spin_lock_bh(&call->state_lock);
1365 state = call->state;
1366 if (state != AFS_CALL_COMPLETE) {
1367 call->abort_code = remote_abort;
1368 call->error = error;
1369 call->state = AFS_CALL_COMPLETE;
1370 trace_afs_call_state(call, state, AFS_CALL_COMPLETE,
1371 error, remote_abort);
1372 ok = true;
1373 }
1374 spin_unlock_bh(&call->state_lock);
1375 if (ok) {
1376 trace_afs_call_done(call);
1377
1378
1379
1380
1381
1382 if (call->drop_ref)
1383 afs_put_call(call);
1384 }
1385 }
1386
1387
1388
1389
1390 extern void afs_put_permits(struct afs_permits *);
1391 extern void afs_clear_permits(struct afs_vnode *);
1392 extern void afs_cache_permit(struct afs_vnode *, struct key *, unsigned int,
1393 struct afs_status_cb *);
1394 extern void afs_zap_permits(struct rcu_head *);
1395 extern struct key *afs_request_key(struct afs_cell *);
1396 extern struct key *afs_request_key_rcu(struct afs_cell *);
1397 extern int afs_check_permit(struct afs_vnode *, struct key *, afs_access_t *);
1398 extern int afs_permission(struct user_namespace *, struct inode *, int);
1399 extern void __exit afs_clean_up_permit_cache(void);
1400
1401
1402
1403
1404 extern spinlock_t afs_server_peer_lock;
1405
1406 extern struct afs_server *afs_find_server(struct afs_net *,
1407 const struct sockaddr_rxrpc *);
1408 extern struct afs_server *afs_find_server_by_uuid(struct afs_net *, const uuid_t *);
1409 extern struct afs_server *afs_lookup_server(struct afs_cell *, struct key *, const uuid_t *, u32);
1410 extern struct afs_server *afs_get_server(struct afs_server *, enum afs_server_trace);
1411 extern struct afs_server *afs_use_server(struct afs_server *, enum afs_server_trace);
1412 extern void afs_unuse_server(struct afs_net *, struct afs_server *, enum afs_server_trace);
1413 extern void afs_unuse_server_notime(struct afs_net *, struct afs_server *, enum afs_server_trace);
1414 extern void afs_put_server(struct afs_net *, struct afs_server *, enum afs_server_trace);
1415 extern void afs_manage_servers(struct work_struct *);
1416 extern void afs_servers_timer(struct timer_list *);
1417 extern void afs_fs_probe_timer(struct timer_list *);
1418 extern void __net_exit afs_purge_servers(struct afs_net *);
1419 extern bool afs_check_server_record(struct afs_operation *, struct afs_server *);
1420
1421 static inline void afs_inc_servers_outstanding(struct afs_net *net)
1422 {
1423 atomic_inc(&net->servers_outstanding);
1424 }
1425
1426 static inline void afs_dec_servers_outstanding(struct afs_net *net)
1427 {
1428 if (atomic_dec_and_test(&net->servers_outstanding))
1429 wake_up_var(&net->servers_outstanding);
1430 }
1431
1432 static inline bool afs_is_probing_server(struct afs_server *server)
1433 {
1434 return list_empty(&server->probe_link);
1435 }
1436
1437
1438
1439
1440 static inline struct afs_server_list *afs_get_serverlist(struct afs_server_list *slist)
1441 {
1442 refcount_inc(&slist->usage);
1443 return slist;
1444 }
1445
1446 extern void afs_put_serverlist(struct afs_net *, struct afs_server_list *);
1447 extern struct afs_server_list *afs_alloc_server_list(struct afs_cell *, struct key *,
1448 struct afs_vldb_entry *,
1449 u8);
1450 extern bool afs_annotate_server_list(struct afs_server_list *, struct afs_server_list *);
1451
1452
1453
1454
1455 extern int __init afs_fs_init(void);
1456 extern void afs_fs_exit(void);
1457
1458
1459
1460
1461 extern struct afs_vldb_entry *afs_vl_get_entry_by_name_u(struct afs_vl_cursor *,
1462 const char *, int);
1463 extern struct afs_addr_list *afs_vl_get_addrs_u(struct afs_vl_cursor *, const uuid_t *);
1464 extern struct afs_call *afs_vl_get_capabilities(struct afs_net *, struct afs_addr_cursor *,
1465 struct key *, struct afs_vlserver *, unsigned int);
1466 extern struct afs_addr_list *afs_yfsvl_get_endpoints(struct afs_vl_cursor *, const uuid_t *);
1467 extern char *afs_yfsvl_get_cell_name(struct afs_vl_cursor *);
1468
1469
1470
1471
1472 extern int afs_cell_detect_alias(struct afs_cell *, struct key *);
1473
1474
1475
1476
1477 extern void afs_vlserver_probe_result(struct afs_call *);
1478 extern int afs_send_vl_probes(struct afs_net *, struct key *, struct afs_vlserver_list *);
1479 extern int afs_wait_for_vl_probes(struct afs_vlserver_list *, unsigned long);
1480
1481
1482
1483
1484 extern bool afs_begin_vlserver_operation(struct afs_vl_cursor *,
1485 struct afs_cell *, struct key *);
1486 extern bool afs_select_vlserver(struct afs_vl_cursor *);
1487 extern bool afs_select_current_vlserver(struct afs_vl_cursor *);
1488 extern int afs_end_vlserver_operation(struct afs_vl_cursor *);
1489
1490
1491
1492
1493 static inline struct afs_vlserver *afs_get_vlserver(struct afs_vlserver *vlserver)
1494 {
1495 refcount_inc(&vlserver->ref);
1496 return vlserver;
1497 }
1498
1499 static inline struct afs_vlserver_list *afs_get_vlserverlist(struct afs_vlserver_list *vllist)
1500 {
1501 if (vllist)
1502 refcount_inc(&vllist->ref);
1503 return vllist;
1504 }
1505
1506 extern struct afs_vlserver *afs_alloc_vlserver(const char *, size_t, unsigned short);
1507 extern void afs_put_vlserver(struct afs_net *, struct afs_vlserver *);
1508 extern struct afs_vlserver_list *afs_alloc_vlserver_list(unsigned int);
1509 extern void afs_put_vlserverlist(struct afs_net *, struct afs_vlserver_list *);
1510 extern struct afs_vlserver_list *afs_extract_vlserver_list(struct afs_cell *,
1511 const void *, size_t);
1512
1513
1514
1515
1516 extern struct afs_volume *afs_create_volume(struct afs_fs_context *);
1517 extern int afs_activate_volume(struct afs_volume *);
1518 extern void afs_deactivate_volume(struct afs_volume *);
1519 extern struct afs_volume *afs_get_volume(struct afs_volume *, enum afs_volume_trace);
1520 extern void afs_put_volume(struct afs_net *, struct afs_volume *, enum afs_volume_trace);
1521 extern int afs_check_volume_status(struct afs_volume *, struct afs_operation *);
1522
1523
1524
1525
1526 #ifdef CONFIG_AFS_FSCACHE
1527 bool afs_dirty_folio(struct address_space *, struct folio *);
1528 #else
1529 #define afs_dirty_folio filemap_dirty_folio
1530 #endif
1531 extern int afs_write_begin(struct file *file, struct address_space *mapping,
1532 loff_t pos, unsigned len,
1533 struct page **pagep, void **fsdata);
1534 extern int afs_write_end(struct file *file, struct address_space *mapping,
1535 loff_t pos, unsigned len, unsigned copied,
1536 struct page *page, void *fsdata);
1537 extern int afs_writepage(struct page *, struct writeback_control *);
1538 extern int afs_writepages(struct address_space *, struct writeback_control *);
1539 extern ssize_t afs_file_write(struct kiocb *, struct iov_iter *);
1540 extern int afs_fsync(struct file *, loff_t, loff_t, int);
1541 extern vm_fault_t afs_page_mkwrite(struct vm_fault *vmf);
1542 extern void afs_prune_wb_keys(struct afs_vnode *);
1543 int afs_launder_folio(struct folio *);
1544
1545
1546
1547
1548 extern const struct xattr_handler *afs_xattr_handlers[];
1549
1550
1551
1552
1553 extern void yfs_fs_fetch_data(struct afs_operation *);
1554 extern void yfs_fs_create_file(struct afs_operation *);
1555 extern void yfs_fs_make_dir(struct afs_operation *);
1556 extern void yfs_fs_remove_file2(struct afs_operation *);
1557 extern void yfs_fs_remove_file(struct afs_operation *);
1558 extern void yfs_fs_remove_dir(struct afs_operation *);
1559 extern void yfs_fs_link(struct afs_operation *);
1560 extern void yfs_fs_symlink(struct afs_operation *);
1561 extern void yfs_fs_rename(struct afs_operation *);
1562 extern void yfs_fs_store_data(struct afs_operation *);
1563 extern void yfs_fs_setattr(struct afs_operation *);
1564 extern void yfs_fs_get_volume_status(struct afs_operation *);
1565 extern void yfs_fs_set_lock(struct afs_operation *);
1566 extern void yfs_fs_extend_lock(struct afs_operation *);
1567 extern void yfs_fs_release_lock(struct afs_operation *);
1568 extern void yfs_fs_fetch_status(struct afs_operation *);
1569 extern void yfs_fs_inline_bulk_status(struct afs_operation *);
1570
1571 struct yfs_acl {
1572 struct afs_acl *acl;
1573 struct afs_acl *vol_acl;
1574 u32 inherit_flag;
1575 u32 num_cleaned;
1576 unsigned int flags;
1577 #define YFS_ACL_WANT_ACL 0x01
1578 #define YFS_ACL_WANT_VOL_ACL 0x02
1579 };
1580
1581 extern void yfs_free_opaque_acl(struct yfs_acl *);
1582 extern void yfs_fs_fetch_opaque_acl(struct afs_operation *);
1583 extern void yfs_fs_store_opaque_acl2(struct afs_operation *);
1584
1585
1586
1587
1588 static inline struct afs_vnode *AFS_FS_I(struct inode *inode)
1589 {
1590 return container_of(inode, struct afs_vnode, netfs.inode);
1591 }
1592
1593 static inline struct inode *AFS_VNODE_TO_I(struct afs_vnode *vnode)
1594 {
1595 return &vnode->netfs.inode;
1596 }
1597
1598
1599
1600
1601
1602
1603 static inline void afs_update_dentry_version(struct afs_operation *op,
1604 struct afs_vnode_param *dir_vp,
1605 struct dentry *dentry)
1606 {
1607 if (!op->error)
1608 dentry->d_fsdata =
1609 (void *)(unsigned long)dir_vp->scb.status.data_version;
1610 }
1611
1612
1613
1614
1615
1616 static inline void afs_set_i_size(struct afs_vnode *vnode, u64 size)
1617 {
1618 i_size_write(&vnode->netfs.inode, size);
1619 vnode->netfs.inode.i_blocks = ((size + 1023) >> 10) << 1;
1620 }
1621
1622
1623
1624
1625
1626
1627 static inline void afs_check_dir_conflict(struct afs_operation *op,
1628 struct afs_vnode_param *dvp)
1629 {
1630 if (dvp->dv_before + dvp->dv_delta != dvp->scb.status.data_version)
1631 op->flags |= AFS_OPERATION_DIR_CONFLICT;
1632 }
1633
1634 static inline int afs_io_error(struct afs_call *call, enum afs_io_error where)
1635 {
1636 trace_afs_io_error(call->debug_id, -EIO, where);
1637 return -EIO;
1638 }
1639
1640 static inline int afs_bad(struct afs_vnode *vnode, enum afs_file_error where)
1641 {
1642 trace_afs_file_error(vnode, -EIO, where);
1643 return -EIO;
1644 }
1645
1646
1647
1648
1649
1650 extern unsigned afs_debug;
1651
1652 #define dbgprintk(FMT,...) \
1653 printk("[%-6.6s] "FMT"\n", current->comm ,##__VA_ARGS__)
1654
1655 #define kenter(FMT,...) dbgprintk("==> %s("FMT")",__func__ ,##__VA_ARGS__)
1656 #define kleave(FMT,...) dbgprintk("<== %s()"FMT"",__func__ ,##__VA_ARGS__)
1657 #define kdebug(FMT,...) dbgprintk(" "FMT ,##__VA_ARGS__)
1658
1659
1660 #if defined(__KDEBUG)
1661 #define _enter(FMT,...) kenter(FMT,##__VA_ARGS__)
1662 #define _leave(FMT,...) kleave(FMT,##__VA_ARGS__)
1663 #define _debug(FMT,...) kdebug(FMT,##__VA_ARGS__)
1664
1665 #elif defined(CONFIG_AFS_DEBUG)
1666 #define AFS_DEBUG_KENTER 0x01
1667 #define AFS_DEBUG_KLEAVE 0x02
1668 #define AFS_DEBUG_KDEBUG 0x04
1669
1670 #define _enter(FMT,...) \
1671 do { \
1672 if (unlikely(afs_debug & AFS_DEBUG_KENTER)) \
1673 kenter(FMT,##__VA_ARGS__); \
1674 } while (0)
1675
1676 #define _leave(FMT,...) \
1677 do { \
1678 if (unlikely(afs_debug & AFS_DEBUG_KLEAVE)) \
1679 kleave(FMT,##__VA_ARGS__); \
1680 } while (0)
1681
1682 #define _debug(FMT,...) \
1683 do { \
1684 if (unlikely(afs_debug & AFS_DEBUG_KDEBUG)) \
1685 kdebug(FMT,##__VA_ARGS__); \
1686 } while (0)
1687
1688 #else
1689 #define _enter(FMT,...) no_printk("==> %s("FMT")",__func__ ,##__VA_ARGS__)
1690 #define _leave(FMT,...) no_printk("<== %s()"FMT"",__func__ ,##__VA_ARGS__)
1691 #define _debug(FMT,...) no_printk(" "FMT ,##__VA_ARGS__)
1692 #endif
1693
1694
1695
1696
1697 #if 1
1698
1699 #define ASSERT(X) \
1700 do { \
1701 if (unlikely(!(X))) { \
1702 printk(KERN_ERR "\n"); \
1703 printk(KERN_ERR "AFS: Assertion failed\n"); \
1704 BUG(); \
1705 } \
1706 } while(0)
1707
1708 #define ASSERTCMP(X, OP, Y) \
1709 do { \
1710 if (unlikely(!((X) OP (Y)))) { \
1711 printk(KERN_ERR "\n"); \
1712 printk(KERN_ERR "AFS: Assertion failed\n"); \
1713 printk(KERN_ERR "%lu " #OP " %lu is false\n", \
1714 (unsigned long)(X), (unsigned long)(Y)); \
1715 printk(KERN_ERR "0x%lx " #OP " 0x%lx is false\n", \
1716 (unsigned long)(X), (unsigned long)(Y)); \
1717 BUG(); \
1718 } \
1719 } while(0)
1720
1721 #define ASSERTRANGE(L, OP1, N, OP2, H) \
1722 do { \
1723 if (unlikely(!((L) OP1 (N)) || !((N) OP2 (H)))) { \
1724 printk(KERN_ERR "\n"); \
1725 printk(KERN_ERR "AFS: Assertion failed\n"); \
1726 printk(KERN_ERR "%lu "#OP1" %lu "#OP2" %lu is false\n", \
1727 (unsigned long)(L), (unsigned long)(N), \
1728 (unsigned long)(H)); \
1729 printk(KERN_ERR "0x%lx "#OP1" 0x%lx "#OP2" 0x%lx is false\n", \
1730 (unsigned long)(L), (unsigned long)(N), \
1731 (unsigned long)(H)); \
1732 BUG(); \
1733 } \
1734 } while(0)
1735
1736 #define ASSERTIF(C, X) \
1737 do { \
1738 if (unlikely((C) && !(X))) { \
1739 printk(KERN_ERR "\n"); \
1740 printk(KERN_ERR "AFS: Assertion failed\n"); \
1741 BUG(); \
1742 } \
1743 } while(0)
1744
1745 #define ASSERTIFCMP(C, X, OP, Y) \
1746 do { \
1747 if (unlikely((C) && !((X) OP (Y)))) { \
1748 printk(KERN_ERR "\n"); \
1749 printk(KERN_ERR "AFS: Assertion failed\n"); \
1750 printk(KERN_ERR "%lu " #OP " %lu is false\n", \
1751 (unsigned long)(X), (unsigned long)(Y)); \
1752 printk(KERN_ERR "0x%lx " #OP " 0x%lx is false\n", \
1753 (unsigned long)(X), (unsigned long)(Y)); \
1754 BUG(); \
1755 } \
1756 } while(0)
1757
1758 #else
1759
1760 #define ASSERT(X) \
1761 do { \
1762 } while(0)
1763
1764 #define ASSERTCMP(X, OP, Y) \
1765 do { \
1766 } while(0)
1767
1768 #define ASSERTRANGE(L, OP1, N, OP2, H) \
1769 do { \
1770 } while(0)
1771
1772 #define ASSERTIF(C, X) \
1773 do { \
1774 } while(0)
1775
1776 #define ASSERTIFCMP(C, X, OP, Y) \
1777 do { \
1778 } while(0)
1779
1780 #endif