1
2
3
4
5
6
7
8#include <linux/compiler.h>
9#include <linux/kernel.h>
10#include <linux/ktime.h>
11#include <linux/fs.h>
12#include <linux/pagemap.h>
13#include <linux/rxrpc.h>
14#include <linux/key.h>
15#include <linux/workqueue.h>
16#include <linux/sched.h>
17#include <linux/fscache.h>
18#include <linux/backing-dev.h>
19#include <linux/uuid.h>
20#include <linux/mm_types.h>
21#include <linux/dns_resolver.h>
22#include <net/net_namespace.h>
23#include <net/netns/generic.h>
24#include <net/sock.h>
25#include <net/af_rxrpc.h>
26
27#include "afs.h"
28#include "afs_vl.h"
29
30#define AFS_CELL_MAX_ADDRS 15
31
32struct pagevec;
33struct afs_call;
34struct afs_vnode;
35
36
37
38
39
40enum afs_flock_mode {
41 afs_flock_mode_unset,
42 afs_flock_mode_local,
43 afs_flock_mode_openafs,
44 afs_flock_mode_strict,
45 afs_flock_mode_write,
46};
47
48struct afs_fs_context {
49 bool force;
50 bool autocell;
51 bool dyn_root;
52 bool no_cell;
53 enum afs_flock_mode flock_mode;
54 afs_voltype_t type;
55 unsigned int volnamesz;
56 const char *volname;
57 struct afs_net *net;
58 struct afs_cell *cell;
59 struct afs_volume *volume;
60 struct key *key;
61};
62
63enum afs_call_state {
64 AFS_CALL_CL_REQUESTING,
65 AFS_CALL_CL_AWAIT_REPLY,
66 AFS_CALL_CL_PROC_REPLY,
67 AFS_CALL_SV_AWAIT_OP_ID,
68 AFS_CALL_SV_AWAIT_REQUEST,
69 AFS_CALL_SV_REPLYING,
70 AFS_CALL_SV_AWAIT_ACK,
71 AFS_CALL_COMPLETE,
72};
73
74
75
76
77struct afs_addr_list {
78 struct rcu_head rcu;
79 refcount_t usage;
80 u32 version;
81 unsigned char max_addrs;
82 unsigned char nr_addrs;
83 unsigned char preferred;
84 unsigned char nr_ipv4;
85 enum dns_record_source source:8;
86 enum dns_lookup_status status:8;
87 unsigned long failed;
88 unsigned long responded;
89 struct sockaddr_rxrpc addrs[];
90#define AFS_MAX_ADDRESSES ((unsigned int)(sizeof(unsigned long) * 8))
91};
92
93
94
95
96struct afs_call {
97 const struct afs_call_type *type;
98 struct afs_addr_list *alist;
99 wait_queue_head_t waitq;
100 struct work_struct async_work;
101 struct work_struct work;
102 struct rxrpc_call *rxcall;
103 struct key *key;
104 struct afs_net *net;
105 struct afs_server *server;
106 struct afs_vlserver *vlserver;
107 void *request;
108 size_t iov_len;
109 struct iov_iter def_iter;
110 struct iov_iter *write_iter;
111 struct iov_iter *iter;
112 union {
113 struct kvec kvec[1];
114 struct bio_vec bvec[1];
115 };
116 void *buffer;
117 union {
118 long ret0;
119 struct afs_addr_list *ret_alist;
120 struct afs_vldb_entry *ret_vldb;
121 char *ret_str;
122 };
123 struct afs_operation *op;
124 unsigned int server_index;
125 atomic_t usage;
126 enum afs_call_state state;
127 spinlock_t state_lock;
128 int error;
129 u32 abort_code;
130 unsigned int max_lifespan;
131 unsigned request_size;
132 unsigned reply_max;
133 unsigned count2;
134 unsigned char unmarshall;
135 unsigned char addr_ix;
136 bool drop_ref;
137 bool need_attention;
138 bool async;
139 bool upgrade;
140 bool have_reply_time;
141 bool intr;
142 bool unmarshalling_error;
143 u16 service_id;
144 unsigned int debug_id;
145 u32 operation_ID;
146 u32 count;
147 union {
148 struct {
149 __be32 tmp_u;
150 __be32 tmp;
151 } __attribute__((packed));
152 __be64 tmp64;
153 };
154 ktime_t reply_time;
155};
156
157struct afs_call_type {
158 const char *name;
159 unsigned int op;
160
161
162
163
164 int (*deliver)(struct afs_call *call);
165
166
167 void (*destructor)(struct afs_call *call);
168
169
170 void (*work)(struct work_struct *work);
171
172
173 void (*done)(struct afs_call *call);
174};
175
176
177
178
179struct afs_wb_key {
180 refcount_t usage;
181 struct key *key;
182 struct list_head vnode_link;
183};
184
185
186
187
188struct afs_file {
189 struct key *key;
190 struct afs_wb_key *wb;
191};
192
193static inline struct key *afs_file_key(struct file *file)
194{
195 struct afs_file *af = file->private_data;
196
197 return af->key;
198}
199
200
201
202
203struct afs_read {
204 loff_t pos;
205 loff_t len;
206 loff_t actual_len;
207 loff_t file_size;
208 struct key *key;
209 struct afs_vnode *vnode;
210 struct netfs_read_subrequest *subreq;
211 afs_dataversion_t data_version;
212 refcount_t usage;
213 unsigned int call_debug_id;
214 unsigned int nr_pages;
215 int error;
216 void (*done)(struct afs_read *);
217 void (*cleanup)(struct afs_read *);
218 struct iov_iter *iter;
219 struct iov_iter def_iter;
220};
221
222
223
224
225
226struct afs_super_info {
227 struct net *net_ns;
228 struct afs_cell *cell;
229 struct afs_volume *volume;
230 enum afs_flock_mode flock_mode:8;
231 bool dyn_root;
232};
233
234static inline struct afs_super_info *AFS_FS_S(struct super_block *sb)
235{
236 return sb->s_fs_info;
237}
238
239extern struct file_system_type afs_fs_type;
240
241
242
243
244struct afs_sysnames {
245#define AFS_NR_SYSNAME 16
246 char *subs[AFS_NR_SYSNAME];
247 refcount_t usage;
248 unsigned short nr;
249 char blank[1];
250};
251
252
253
254
255struct afs_net {
256 struct net *net;
257 struct afs_uuid uuid;
258 bool live;
259
260
261 struct socket *socket;
262 struct afs_call *spare_incoming_call;
263 struct work_struct charge_preallocation_work;
264 struct mutex socket_mutex;
265 atomic_t nr_outstanding_calls;
266 atomic_t nr_superblocks;
267
268
269 struct rb_root cells;
270 struct afs_cell *ws_cell;
271 struct work_struct cells_manager;
272 struct timer_list cells_timer;
273 atomic_t cells_outstanding;
274 struct rw_semaphore cells_lock;
275 struct mutex cells_alias_lock;
276
277 struct mutex proc_cells_lock;
278 struct hlist_head proc_cells;
279
280
281
282
283
284 seqlock_t fs_lock;
285 struct rb_root fs_servers;
286 struct list_head fs_probe_fast;
287 struct list_head fs_probe_slow;
288 struct hlist_head fs_proc;
289
290 struct hlist_head fs_addresses4;
291 struct hlist_head fs_addresses6;
292 seqlock_t fs_addr_lock;
293
294 struct work_struct fs_manager;
295 struct timer_list fs_timer;
296
297 struct work_struct fs_prober;
298 struct timer_list fs_probe_timer;
299 atomic_t servers_outstanding;
300
301
302 struct mutex lock_manager_mutex;
303
304
305 struct super_block *dynroot_sb;
306 struct proc_dir_entry *proc_afs;
307 struct afs_sysnames *sysnames;
308 rwlock_t sysnames_lock;
309
310
311 atomic_t n_lookup;
312 atomic_t n_reval;
313 atomic_t n_inval;
314 atomic_t n_relpg;
315 atomic_t n_read_dir;
316 atomic_t n_dir_cr;
317 atomic_t n_dir_rm;
318 atomic_t n_stores;
319 atomic_long_t n_store_bytes;
320 atomic_long_t n_fetch_bytes;
321 atomic_t n_fetches;
322};
323
324extern const char afs_init_sysname[];
325
326enum afs_cell_state {
327 AFS_CELL_UNSET,
328 AFS_CELL_ACTIVATING,
329 AFS_CELL_ACTIVE,
330 AFS_CELL_DEACTIVATING,
331 AFS_CELL_INACTIVE,
332 AFS_CELL_FAILED,
333 AFS_CELL_REMOVED,
334};
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355struct afs_cell {
356 union {
357 struct rcu_head rcu;
358 struct rb_node net_node;
359 };
360 struct afs_net *net;
361 struct afs_cell *alias_of;
362 struct afs_volume *root_volume;
363 struct key *anonymous_key;
364 struct work_struct manager;
365 struct hlist_node proc_link;
366 time64_t dns_expiry;
367 time64_t last_inactive;
368 atomic_t ref;
369 atomic_t active;
370 unsigned long flags;
371#define AFS_CELL_FL_NO_GC 0
372#define AFS_CELL_FL_DO_LOOKUP 1
373#define AFS_CELL_FL_CHECK_ALIAS 2
374 enum afs_cell_state state;
375 short error;
376 enum dns_record_source dns_source:8;
377 enum dns_lookup_status dns_status:8;
378 unsigned int dns_lookup_count;
379 unsigned int debug_id;
380
381
382 struct rb_root volumes;
383 struct hlist_head proc_volumes;
384 seqlock_t volume_lock;
385
386
387 struct rb_root fs_servers;
388 seqlock_t fs_lock;
389 struct rw_semaphore fs_open_mmaps_lock;
390 struct list_head fs_open_mmaps;
391 atomic_t fs_s_break;
392
393
394 rwlock_t vl_servers_lock;
395 struct afs_vlserver_list __rcu *vl_servers;
396
397 u8 name_len;
398 char *name;
399};
400
401
402
403
404struct afs_vlserver {
405 struct rcu_head rcu;
406 struct afs_addr_list __rcu *addresses;
407 unsigned long flags;
408#define AFS_VLSERVER_FL_PROBED 0
409#define AFS_VLSERVER_FL_PROBING 1
410#define AFS_VLSERVER_FL_IS_YFS 2
411#define AFS_VLSERVER_FL_RESPONDING 3
412 rwlock_t lock;
413 atomic_t usage;
414 unsigned int rtt;
415
416
417 wait_queue_head_t probe_wq;
418 atomic_t probe_outstanding;
419 spinlock_t probe_lock;
420 struct {
421 unsigned int rtt;
422 u32 abort_code;
423 short error;
424 unsigned short flags;
425#define AFS_VLSERVER_PROBE_RESPONDED 0x01
426#define AFS_VLSERVER_PROBE_IS_YFS 0x02
427#define AFS_VLSERVER_PROBE_NOT_YFS 0x04
428#define AFS_VLSERVER_PROBE_LOCAL_FAILURE 0x08
429 } probe;
430
431 u16 port;
432 u16 name_len;
433 char name[];
434};
435
436
437
438
439struct afs_vlserver_entry {
440 u16 priority;
441 u16 weight;
442 enum dns_record_source source:8;
443 enum dns_lookup_status status:8;
444 struct afs_vlserver *server;
445};
446
447struct afs_vlserver_list {
448 struct rcu_head rcu;
449 atomic_t usage;
450 u8 nr_servers;
451 u8 index;
452 u8 preferred;
453 enum dns_record_source source:8;
454 enum dns_lookup_status status:8;
455 rwlock_t lock;
456 struct afs_vlserver_entry servers[];
457};
458
459
460
461
462
463
464struct afs_vldb_entry {
465 afs_volid_t vid[3];
466
467 unsigned long flags;
468#define AFS_VLDB_HAS_RW 0
469#define AFS_VLDB_HAS_RO 1
470#define AFS_VLDB_HAS_BAK 2
471#define AFS_VLDB_QUERY_VALID 3
472#define AFS_VLDB_QUERY_ERROR 4
473
474 uuid_t fs_server[AFS_NMAXNSERVERS];
475 u32 addr_version[AFS_NMAXNSERVERS];
476 u8 fs_mask[AFS_NMAXNSERVERS];
477#define AFS_VOL_VTM_RW 0x01
478#define AFS_VOL_VTM_RO 0x02
479#define AFS_VOL_VTM_BAK 0x04
480 short error;
481 u8 nr_servers;
482 u8 name_len;
483 u8 name[AFS_MAXVOLNAME + 1];
484};
485
486
487
488
489struct afs_server {
490 struct rcu_head rcu;
491 union {
492 uuid_t uuid;
493 struct afs_uuid _uuid;
494 };
495
496 struct afs_addr_list __rcu *addresses;
497 struct afs_cell *cell;
498 struct rb_node uuid_rb;
499 struct afs_server __rcu *uuid_next;
500 struct afs_server *uuid_prev;
501 struct list_head probe_link;
502 struct hlist_node addr4_link;
503 struct hlist_node addr6_link;
504 struct hlist_node proc_link;
505 struct work_struct initcb_work;
506 struct afs_server *gc_next;
507 time64_t unuse_time;
508 unsigned long flags;
509#define AFS_SERVER_FL_RESPONDING 0
510#define AFS_SERVER_FL_UPDATING 1
511#define AFS_SERVER_FL_NEEDS_UPDATE 2
512#define AFS_SERVER_FL_NOT_READY 4
513#define AFS_SERVER_FL_NOT_FOUND 5
514#define AFS_SERVER_FL_VL_FAIL 6
515#define AFS_SERVER_FL_MAY_HAVE_CB 8
516#define AFS_SERVER_FL_IS_YFS 16
517#define AFS_SERVER_FL_NO_IBULK 17
518#define AFS_SERVER_FL_NO_RM2 18
519#define AFS_SERVER_FL_HAS_FS64 19
520 atomic_t ref;
521 atomic_t active;
522 u32 addr_version;
523 unsigned int rtt;
524 unsigned int debug_id;
525
526
527 rwlock_t fs_lock;
528
529
530 unsigned cb_s_break;
531
532
533 unsigned long probed_at;
534 wait_queue_head_t probe_wq;
535 atomic_t probe_outstanding;
536 spinlock_t probe_lock;
537 struct {
538 unsigned int rtt;
539 u32 abort_code;
540 short error;
541 bool responded:1;
542 bool is_yfs:1;
543 bool not_yfs:1;
544 bool local_failure:1;
545 } probe;
546};
547
548
549
550
551struct afs_server_entry {
552 struct afs_server *server;
553};
554
555struct afs_server_list {
556 afs_volid_t vids[AFS_MAXTYPES];
557 refcount_t usage;
558 unsigned char nr_servers;
559 unsigned char preferred;
560 unsigned short vnovol_mask;
561 unsigned int seq;
562 rwlock_t lock;
563 struct afs_server_entry servers[];
564};
565
566
567
568
569struct afs_volume {
570 union {
571 struct rcu_head rcu;
572 afs_volid_t vid;
573 };
574 atomic_t usage;
575 time64_t update_at;
576 struct afs_cell *cell;
577 struct rb_node cell_node;
578 struct hlist_node proc_link;
579 struct super_block __rcu *sb;
580 unsigned long flags;
581#define AFS_VOLUME_NEEDS_UPDATE 0
582#define AFS_VOLUME_UPDATING 1
583#define AFS_VOLUME_WAIT 2
584#define AFS_VOLUME_DELETED 3
585#define AFS_VOLUME_OFFLINE 4
586#define AFS_VOLUME_BUSY 5
587#define AFS_VOLUME_MAYBE_NO_IBULK 6
588#ifdef CONFIG_AFS_FSCACHE
589 struct fscache_volume *cache;
590#endif
591 struct afs_server_list __rcu *servers;
592 rwlock_t servers_lock;
593 unsigned int servers_seq;
594
595 unsigned cb_v_break;
596 rwlock_t cb_v_break_lock;
597
598 afs_voltype_t type;
599 char type_force;
600 u8 name_len;
601 u8 name[AFS_MAXVOLNAME + 1];
602};
603
604enum afs_lock_state {
605 AFS_VNODE_LOCK_NONE,
606 AFS_VNODE_LOCK_WAITING_FOR_CB,
607 AFS_VNODE_LOCK_SETTING,
608 AFS_VNODE_LOCK_GRANTED,
609 AFS_VNODE_LOCK_EXTENDING,
610 AFS_VNODE_LOCK_NEED_UNLOCK,
611 AFS_VNODE_LOCK_UNLOCKING,
612 AFS_VNODE_LOCK_DELETED,
613};
614
615
616
617
618
619
620
621struct afs_vnode {
622 struct inode vfs_inode;
623
624 struct afs_volume *volume;
625 struct afs_fid fid;
626 struct afs_file_status status;
627 afs_dataversion_t invalid_before;
628#ifdef CONFIG_AFS_FSCACHE
629 struct fscache_cookie *cache;
630#endif
631 struct afs_permits __rcu *permit_cache;
632 struct mutex io_lock;
633 struct rw_semaphore validate_lock;
634 struct rw_semaphore rmdir_lock;
635 struct key *silly_key;
636 spinlock_t wb_lock;
637 spinlock_t lock;
638 unsigned long flags;
639#define AFS_VNODE_CB_PROMISED 0
640#define AFS_VNODE_UNSET 1
641#define AFS_VNODE_DIR_VALID 2
642#define AFS_VNODE_ZAP_DATA 3
643#define AFS_VNODE_DELETED 4
644#define AFS_VNODE_MOUNTPOINT 5
645#define AFS_VNODE_AUTOCELL 6
646#define AFS_VNODE_PSEUDODIR 7
647#define AFS_VNODE_NEW_CONTENT 8
648#define AFS_VNODE_SILLY_DELETED 9
649#define AFS_VNODE_MODIFYING 10
650
651 struct list_head wb_keys;
652 struct list_head pending_locks;
653 struct list_head granted_locks;
654 struct delayed_work lock_work;
655 struct key *lock_key;
656 ktime_t locked_at;
657 enum afs_lock_state lock_state : 8;
658 afs_lock_type_t lock_type : 8;
659
660
661 struct work_struct cb_work;
662 struct list_head cb_mmap_link;
663 void *cb_server;
664 atomic_t cb_nr_mmap;
665 unsigned int cb_fs_s_break;
666 unsigned int cb_s_break;
667 unsigned int cb_v_break;
668 unsigned int cb_break;
669 seqlock_t cb_lock;
670
671 time64_t cb_expires_at;
672};
673
674static inline struct fscache_cookie *afs_vnode_cache(struct afs_vnode *vnode)
675{
676#ifdef CONFIG_AFS_FSCACHE
677 return vnode->cache;
678#else
679 return NULL;
680#endif
681}
682
683
684
685
686struct afs_permit {
687 struct key *key;
688 afs_access_t access;
689};
690
691
692
693
694
695struct afs_permits {
696 struct rcu_head rcu;
697 struct hlist_node hash_node;
698 unsigned long h;
699 refcount_t usage;
700 unsigned short nr_permits;
701 bool invalidated;
702 struct afs_permit permits[];
703};
704
705
706
707
708struct afs_error {
709 short error;
710 bool responded;
711};
712
713
714
715
716struct afs_addr_cursor {
717 struct afs_addr_list *alist;
718 unsigned long tried;
719 signed char index;
720 bool responded;
721 unsigned short nr_iterations;
722 short error;
723 u32 abort_code;
724};
725
726
727
728
729struct afs_vl_cursor {
730 struct afs_addr_cursor ac;
731 struct afs_cell *cell;
732 struct afs_vlserver_list *server_list;
733 struct afs_vlserver *server;
734 struct key *key;
735 unsigned long untried;
736 short index;
737 short error;
738 unsigned short flags;
739#define AFS_VL_CURSOR_STOP 0x0001
740#define AFS_VL_CURSOR_RETRY 0x0002
741#define AFS_VL_CURSOR_RETRIED 0x0004
742 unsigned short nr_iterations;
743};
744
745
746
747
748struct afs_operation_ops {
749 void (*issue_afs_rpc)(struct afs_operation *op);
750 void (*issue_yfs_rpc)(struct afs_operation *op);
751 void (*success)(struct afs_operation *op);
752 void (*aborted)(struct afs_operation *op);
753 void (*failed)(struct afs_operation *op);
754 void (*edit_dir)(struct afs_operation *op);
755 void (*put)(struct afs_operation *op);
756};
757
758struct afs_vnode_param {
759 struct afs_vnode *vnode;
760 struct afs_fid fid;
761 struct afs_status_cb scb;
762 afs_dataversion_t dv_before;
763 unsigned int cb_break_before;
764 u8 dv_delta;
765 bool put_vnode:1;
766 bool need_io_lock:1;
767 bool update_ctime:1;
768 bool set_size:1;
769 bool op_unlinked:1;
770 bool speculative:1;
771 bool modification:1;
772};
773
774
775
776
777
778struct afs_operation {
779 struct afs_net *net;
780 struct key *key;
781 const struct afs_call_type *type;
782 const struct afs_operation_ops *ops;
783
784
785 struct afs_volume *volume;
786 struct afs_vnode_param file[2];
787 struct afs_vnode_param *more_files;
788 struct afs_volsync volsync;
789 struct dentry *dentry;
790 struct dentry *dentry_2;
791 struct timespec64 mtime;
792 struct timespec64 ctime;
793 short nr_files;
794 short error;
795 unsigned int debug_id;
796
797 unsigned int cb_v_break;
798 unsigned int cb_s_break;
799
800 union {
801 struct {
802 int which;
803 } fetch_status;
804 struct {
805 int reason;
806 mode_t mode;
807 const char *symlink;
808 } create;
809 struct {
810 bool need_rehash;
811 } unlink;
812 struct {
813 struct dentry *rehash;
814 struct dentry *tmp;
815 bool new_negative;
816 } rename;
817 struct {
818 struct afs_read *req;
819 } fetch;
820 struct {
821 afs_lock_type_t type;
822 } lock;
823 struct {
824 struct iov_iter *write_iter;
825 loff_t pos;
826 loff_t size;
827 loff_t i_size;
828 bool laundering;
829 } store;
830 struct {
831 struct iattr *attr;
832 loff_t old_i_size;
833 } setattr;
834 struct afs_acl *acl;
835 struct yfs_acl *yacl;
836 struct {
837 struct afs_volume_status vs;
838 struct kstatfs *buf;
839 } volstatus;
840 };
841
842
843 struct afs_addr_cursor ac;
844 struct afs_server_list *server_list;
845 struct afs_server *server;
846 struct afs_call *call;
847 unsigned long untried;
848 short index;
849 unsigned short nr_iterations;
850
851 unsigned int flags;
852#define AFS_OPERATION_STOP 0x0001
853#define AFS_OPERATION_VBUSY 0x0002
854#define AFS_OPERATION_VMOVED 0x0004
855#define AFS_OPERATION_VNOVOL 0x0008
856#define AFS_OPERATION_CUR_ONLY 0x0010
857#define AFS_OPERATION_NO_VSLEEP 0x0020
858#define AFS_OPERATION_UNINTR 0x0040
859#define AFS_OPERATION_DOWNGRADE 0x0080
860#define AFS_OPERATION_LOCK_0 0x0100
861#define AFS_OPERATION_LOCK_1 0x0200
862#define AFS_OPERATION_TRIED_ALL 0x0400
863#define AFS_OPERATION_RETRY_SERVER 0x0800
864#define AFS_OPERATION_DIR_CONFLICT 0x1000
865};
866
867
868
869
870struct afs_vnode_cache_aux {
871 __be64 data_version;
872} __packed;
873
874static inline void afs_set_cache_aux(struct afs_vnode *vnode,
875 struct afs_vnode_cache_aux *aux)
876{
877 aux->data_version = cpu_to_be64(vnode->status.data_version);
878}
879
880static inline void afs_invalidate_cache(struct afs_vnode *vnode, unsigned int flags)
881{
882 struct afs_vnode_cache_aux aux;
883
884 afs_set_cache_aux(vnode, &aux);
885 fscache_invalidate(afs_vnode_cache(vnode), &aux,
886 i_size_read(&vnode->vfs_inode), flags);
887}
888
889
890
891
892
893
894
895#ifdef CONFIG_64BIT
896#define __AFS_FOLIO_PRIV_MASK 0x7fffffffUL
897#define __AFS_FOLIO_PRIV_SHIFT 32
898#define __AFS_FOLIO_PRIV_MMAPPED 0x80000000UL
899#else
900#define __AFS_FOLIO_PRIV_MASK 0x7fffUL
901#define __AFS_FOLIO_PRIV_SHIFT 16
902#define __AFS_FOLIO_PRIV_MMAPPED 0x8000UL
903#endif
904
905static inline unsigned int afs_folio_dirty_resolution(struct folio *folio)
906{
907 int shift = folio_shift(folio) - (__AFS_FOLIO_PRIV_SHIFT - 1);
908 return (shift > 0) ? shift : 0;
909}
910
911static inline size_t afs_folio_dirty_from(struct folio *folio, unsigned long priv)
912{
913 unsigned long x = priv & __AFS_FOLIO_PRIV_MASK;
914
915
916 return x << afs_folio_dirty_resolution(folio);
917}
918
919static inline size_t afs_folio_dirty_to(struct folio *folio, unsigned long priv)
920{
921 unsigned long x = (priv >> __AFS_FOLIO_PRIV_SHIFT) & __AFS_FOLIO_PRIV_MASK;
922
923
924 return (x + 1) << afs_folio_dirty_resolution(folio);
925}
926
927static inline unsigned long afs_folio_dirty(struct folio *folio, size_t from, size_t to)
928{
929 unsigned int res = afs_folio_dirty_resolution(folio);
930 from >>= res;
931 to = (to - 1) >> res;
932 return (to << __AFS_FOLIO_PRIV_SHIFT) | from;
933}
934
935static inline unsigned long afs_folio_dirty_mmapped(unsigned long priv)
936{
937 return priv | __AFS_FOLIO_PRIV_MMAPPED;
938}
939
940static inline bool afs_is_folio_dirty_mmapped(unsigned long priv)
941{
942 return priv & __AFS_FOLIO_PRIV_MMAPPED;
943}
944
945#include <trace/events/afs.h>
946
947
948
949
950
951static inline struct afs_addr_list *afs_get_addrlist(struct afs_addr_list *alist)
952{
953 if (alist)
954 refcount_inc(&alist->usage);
955 return alist;
956}
957extern struct afs_addr_list *afs_alloc_addrlist(unsigned int,
958 unsigned short,
959 unsigned short);
960extern void afs_put_addrlist(struct afs_addr_list *);
961extern struct afs_vlserver_list *afs_parse_text_addrs(struct afs_net *,
962 const char *, size_t, char,
963 unsigned short, unsigned short);
964extern struct afs_vlserver_list *afs_dns_query(struct afs_cell *, time64_t *);
965extern bool afs_iterate_addresses(struct afs_addr_cursor *);
966extern int afs_end_cursor(struct afs_addr_cursor *);
967
968extern void afs_merge_fs_addr4(struct afs_addr_list *, __be32, u16);
969extern void afs_merge_fs_addr6(struct afs_addr_list *, __be32 *, u16);
970
971
972
973
974#ifdef CONFIG_AFS_FSCACHE
975extern struct fscache_netfs afs_cache_netfs;
976#endif
977
978
979
980
981extern void afs_invalidate_mmap_work(struct work_struct *);
982extern void afs_server_init_callback_work(struct work_struct *work);
983extern void afs_init_callback_state(struct afs_server *);
984extern void __afs_break_callback(struct afs_vnode *, enum afs_cb_break_reason);
985extern void afs_break_callback(struct afs_vnode *, enum afs_cb_break_reason);
986extern void afs_break_callbacks(struct afs_server *, size_t, struct afs_callback_break *);
987
988static inline unsigned int afs_calc_vnode_cb_break(struct afs_vnode *vnode)
989{
990 return vnode->cb_break + vnode->cb_v_break;
991}
992
993static inline bool afs_cb_is_broken(unsigned int cb_break,
994 const struct afs_vnode *vnode)
995{
996 return cb_break != (vnode->cb_break + vnode->volume->cb_v_break);
997}
998
999
1000
1001
1002extern int afs_cell_init(struct afs_net *, const char *);
1003extern struct afs_cell *afs_find_cell(struct afs_net *, const char *, unsigned,
1004 enum afs_cell_trace);
1005extern struct afs_cell *afs_lookup_cell(struct afs_net *, const char *, unsigned,
1006 const char *, bool);
1007extern struct afs_cell *afs_use_cell(struct afs_cell *, enum afs_cell_trace);
1008extern void afs_unuse_cell(struct afs_net *, struct afs_cell *, enum afs_cell_trace);
1009extern struct afs_cell *afs_get_cell(struct afs_cell *, enum afs_cell_trace);
1010extern void afs_see_cell(struct afs_cell *, enum afs_cell_trace);
1011extern void afs_put_cell(struct afs_cell *, enum afs_cell_trace);
1012extern void afs_queue_cell(struct afs_cell *, enum afs_cell_trace);
1013extern void afs_manage_cells(struct work_struct *);
1014extern void afs_cells_timer(struct timer_list *);
1015extern void __net_exit afs_cell_purge(struct afs_net *);
1016
1017
1018
1019
1020extern bool afs_cm_incoming_call(struct afs_call *);
1021
1022
1023
1024
1025extern const struct file_operations afs_dir_file_operations;
1026extern const struct inode_operations afs_dir_inode_operations;
1027extern const struct address_space_operations afs_dir_aops;
1028extern const struct dentry_operations afs_fs_dentry_operations;
1029
1030extern void afs_d_release(struct dentry *);
1031extern void afs_check_for_remote_deletion(struct afs_operation *);
1032
1033
1034
1035
1036extern void afs_edit_dir_add(struct afs_vnode *, struct qstr *, struct afs_fid *,
1037 enum afs_edit_dir_reason);
1038extern void afs_edit_dir_remove(struct afs_vnode *, struct qstr *, enum afs_edit_dir_reason);
1039
1040
1041
1042
1043extern int afs_sillyrename(struct afs_vnode *, struct afs_vnode *,
1044 struct dentry *, struct key *);
1045extern int afs_silly_iput(struct dentry *, struct inode *);
1046
1047
1048
1049
1050extern const struct inode_operations afs_dynroot_inode_operations;
1051extern const struct dentry_operations afs_dynroot_dentry_operations;
1052
1053extern struct inode *afs_try_auto_mntpt(struct dentry *, struct inode *);
1054extern int afs_dynroot_mkdir(struct afs_net *, struct afs_cell *);
1055extern void afs_dynroot_rmdir(struct afs_net *, struct afs_cell *);
1056extern int afs_dynroot_populate(struct super_block *);
1057extern void afs_dynroot_depopulate(struct super_block *);
1058
1059
1060
1061
1062extern const struct address_space_operations afs_file_aops;
1063extern const struct address_space_operations afs_symlink_aops;
1064extern const struct inode_operations afs_file_inode_operations;
1065extern const struct file_operations afs_file_operations;
1066extern const struct netfs_read_request_ops afs_req_ops;
1067
1068extern int afs_cache_wb_key(struct afs_vnode *, struct afs_file *);
1069extern void afs_put_wb_key(struct afs_wb_key *);
1070extern int afs_open(struct inode *, struct file *);
1071extern int afs_release(struct inode *, struct file *);
1072extern int afs_fetch_data(struct afs_vnode *, struct afs_read *);
1073extern struct afs_read *afs_alloc_read(gfp_t);
1074extern void afs_put_read(struct afs_read *);
1075extern int afs_write_inode(struct inode *, struct writeback_control *);
1076
1077static inline struct afs_read *afs_get_read(struct afs_read *req)
1078{
1079 refcount_inc(&req->usage);
1080 return req;
1081}
1082
1083
1084
1085
1086extern struct workqueue_struct *afs_lock_manager;
1087
1088extern void afs_lock_op_done(struct afs_call *);
1089extern void afs_lock_work(struct work_struct *);
1090extern void afs_lock_may_be_available(struct afs_vnode *);
1091extern int afs_lock(struct file *, int, struct file_lock *);
1092extern int afs_flock(struct file *, int, struct file_lock *);
1093
1094
1095
1096
1097extern void afs_fs_fetch_status(struct afs_operation *);
1098extern void afs_fs_fetch_data(struct afs_operation *);
1099extern void afs_fs_create_file(struct afs_operation *);
1100extern void afs_fs_make_dir(struct afs_operation *);
1101extern void afs_fs_remove_file(struct afs_operation *);
1102extern void afs_fs_remove_dir(struct afs_operation *);
1103extern void afs_fs_link(struct afs_operation *);
1104extern void afs_fs_symlink(struct afs_operation *);
1105extern void afs_fs_rename(struct afs_operation *);
1106extern void afs_fs_store_data(struct afs_operation *);
1107extern void afs_fs_setattr(struct afs_operation *);
1108extern void afs_fs_get_volume_status(struct afs_operation *);
1109extern void afs_fs_set_lock(struct afs_operation *);
1110extern void afs_fs_extend_lock(struct afs_operation *);
1111extern void afs_fs_release_lock(struct afs_operation *);
1112extern int afs_fs_give_up_all_callbacks(struct afs_net *, struct afs_server *,
1113 struct afs_addr_cursor *, struct key *);
1114extern bool afs_fs_get_capabilities(struct afs_net *, struct afs_server *,
1115 struct afs_addr_cursor *, struct key *);
1116extern void afs_fs_inline_bulk_status(struct afs_operation *);
1117
1118struct afs_acl {
1119 u32 size;
1120 u8 data[];
1121};
1122
1123extern void afs_fs_fetch_acl(struct afs_operation *);
1124extern void afs_fs_store_acl(struct afs_operation *);
1125
1126
1127
1128
1129extern struct afs_operation *afs_alloc_operation(struct key *, struct afs_volume *);
1130extern int afs_put_operation(struct afs_operation *);
1131extern bool afs_begin_vnode_operation(struct afs_operation *);
1132extern void afs_wait_for_operation(struct afs_operation *);
1133extern int afs_do_sync_operation(struct afs_operation *);
1134
1135static inline void afs_op_nomem(struct afs_operation *op)
1136{
1137 op->error = -ENOMEM;
1138}
1139
1140static inline void afs_op_set_vnode(struct afs_operation *op, unsigned int n,
1141 struct afs_vnode *vnode)
1142{
1143 op->file[n].vnode = vnode;
1144 op->file[n].need_io_lock = true;
1145}
1146
1147static inline void afs_op_set_fid(struct afs_operation *op, unsigned int n,
1148 const struct afs_fid *fid)
1149{
1150 op->file[n].fid = *fid;
1151}
1152
1153
1154
1155
1156extern void afs_fileserver_probe_result(struct afs_call *);
1157extern void afs_fs_probe_fileserver(struct afs_net *, struct afs_server *, struct key *, bool);
1158extern int afs_wait_for_fs_probes(struct afs_server_list *, unsigned long);
1159extern void afs_probe_fileserver(struct afs_net *, struct afs_server *);
1160extern void afs_fs_probe_dispatcher(struct work_struct *);
1161extern int afs_wait_for_one_fs_probe(struct afs_server *, bool);
1162extern void afs_fs_probe_cleanup(struct afs_net *);
1163
1164
1165
1166
1167extern const struct afs_operation_ops afs_fetch_status_operation;
1168
1169extern void afs_vnode_commit_status(struct afs_operation *, struct afs_vnode_param *);
1170extern int afs_fetch_status(struct afs_vnode *, struct key *, bool, afs_access_t *);
1171extern int afs_ilookup5_test_by_fid(struct inode *, void *);
1172extern struct inode *afs_iget_pseudo_dir(struct super_block *, bool);
1173extern struct inode *afs_iget(struct afs_operation *, struct afs_vnode_param *);
1174extern struct inode *afs_root_iget(struct super_block *, struct key *);
1175extern bool afs_check_validity(struct afs_vnode *);
1176extern int afs_validate(struct afs_vnode *, struct key *);
1177extern int afs_getattr(struct user_namespace *mnt_userns, const struct path *,
1178 struct kstat *, u32, unsigned int);
1179extern int afs_setattr(struct user_namespace *mnt_userns, struct dentry *, struct iattr *);
1180extern void afs_evict_inode(struct inode *);
1181extern int afs_drop_inode(struct inode *);
1182
1183
1184
1185
1186extern struct workqueue_struct *afs_wq;
1187extern int afs_net_id;
1188
1189static inline struct afs_net *afs_net(struct net *net)
1190{
1191 return net_generic(net, afs_net_id);
1192}
1193
1194static inline struct afs_net *afs_sb2net(struct super_block *sb)
1195{
1196 return afs_net(AFS_FS_S(sb)->net_ns);
1197}
1198
1199static inline struct afs_net *afs_d2net(struct dentry *dentry)
1200{
1201 return afs_sb2net(dentry->d_sb);
1202}
1203
1204static inline struct afs_net *afs_i2net(struct inode *inode)
1205{
1206 return afs_sb2net(inode->i_sb);
1207}
1208
1209static inline struct afs_net *afs_v2net(struct afs_vnode *vnode)
1210{
1211 return afs_i2net(&vnode->vfs_inode);
1212}
1213
1214static inline struct afs_net *afs_sock2net(struct sock *sk)
1215{
1216 return net_generic(sock_net(sk), afs_net_id);
1217}
1218
1219static inline void __afs_stat(atomic_t *s)
1220{
1221 atomic_inc(s);
1222}
1223
1224#define afs_stat_v(vnode, n) __afs_stat(&afs_v2net(vnode)->n)
1225
1226
1227
1228
1229extern int afs_abort_to_error(u32);
1230extern void afs_prioritise_error(struct afs_error *, int, u32);
1231
1232
1233
1234
1235extern const struct inode_operations afs_mntpt_inode_operations;
1236extern const struct inode_operations afs_autocell_inode_operations;
1237extern const struct file_operations afs_mntpt_file_operations;
1238
1239extern struct vfsmount *afs_d_automount(struct path *);
1240extern void afs_mntpt_kill_timer(void);
1241
1242
1243
1244
1245#ifdef CONFIG_PROC_FS
1246extern int __net_init afs_proc_init(struct afs_net *);
1247extern void __net_exit afs_proc_cleanup(struct afs_net *);
1248extern int afs_proc_cell_setup(struct afs_cell *);
1249extern void afs_proc_cell_remove(struct afs_cell *);
1250extern void afs_put_sysnames(struct afs_sysnames *);
1251#else
1252static inline int afs_proc_init(struct afs_net *net) { return 0; }
1253static inline void afs_proc_cleanup(struct afs_net *net) {}
1254static inline int afs_proc_cell_setup(struct afs_cell *cell) { return 0; }
1255static inline void afs_proc_cell_remove(struct afs_cell *cell) {}
1256static inline void afs_put_sysnames(struct afs_sysnames *sysnames) {}
1257#endif
1258
1259
1260
1261
1262extern bool afs_select_fileserver(struct afs_operation *);
1263extern void afs_dump_edestaddrreq(const struct afs_operation *);
1264
1265
1266
1267
1268extern struct workqueue_struct *afs_async_calls;
1269
1270extern int __net_init afs_open_socket(struct afs_net *);
1271extern void __net_exit afs_close_socket(struct afs_net *);
1272extern void afs_charge_preallocation(struct work_struct *);
1273extern void afs_put_call(struct afs_call *);
1274extern void afs_make_call(struct afs_addr_cursor *, struct afs_call *, gfp_t);
1275extern long afs_wait_for_call_to_complete(struct afs_call *, struct afs_addr_cursor *);
1276extern struct afs_call *afs_alloc_flat_call(struct afs_net *,
1277 const struct afs_call_type *,
1278 size_t, size_t);
1279extern void afs_flat_call_destructor(struct afs_call *);
1280extern void afs_send_empty_reply(struct afs_call *);
1281extern void afs_send_simple_reply(struct afs_call *, const void *, size_t);
1282extern int afs_extract_data(struct afs_call *, bool);
1283extern int afs_protocol_error(struct afs_call *, enum afs_eproto_cause);
1284
1285static inline void afs_make_op_call(struct afs_operation *op, struct afs_call *call,
1286 gfp_t gfp)
1287{
1288 op->call = call;
1289 op->type = call->type;
1290 call->op = op;
1291 call->key = op->key;
1292 call->intr = !(op->flags & AFS_OPERATION_UNINTR);
1293 afs_make_call(&op->ac, call, gfp);
1294}
1295
1296static inline void afs_extract_begin(struct afs_call *call, void *buf, size_t size)
1297{
1298 call->iov_len = size;
1299 call->kvec[0].iov_base = buf;
1300 call->kvec[0].iov_len = size;
1301 iov_iter_kvec(&call->def_iter, READ, call->kvec, 1, size);
1302}
1303
1304static inline void afs_extract_to_tmp(struct afs_call *call)
1305{
1306 call->iov_len = sizeof(call->tmp);
1307 afs_extract_begin(call, &call->tmp, sizeof(call->tmp));
1308}
1309
1310static inline void afs_extract_to_tmp64(struct afs_call *call)
1311{
1312 call->iov_len = sizeof(call->tmp64);
1313 afs_extract_begin(call, &call->tmp64, sizeof(call->tmp64));
1314}
1315
1316static inline void afs_extract_discard(struct afs_call *call, size_t size)
1317{
1318 call->iov_len = size;
1319 iov_iter_discard(&call->def_iter, READ, size);
1320}
1321
1322static inline void afs_extract_to_buf(struct afs_call *call, size_t size)
1323{
1324 call->iov_len = size;
1325 afs_extract_begin(call, call->buffer, size);
1326}
1327
1328static inline int afs_transfer_reply(struct afs_call *call)
1329{
1330 return afs_extract_data(call, false);
1331}
1332
1333static inline bool afs_check_call_state(struct afs_call *call,
1334 enum afs_call_state state)
1335{
1336 return READ_ONCE(call->state) == state;
1337}
1338
1339static inline bool afs_set_call_state(struct afs_call *call,
1340 enum afs_call_state from,
1341 enum afs_call_state to)
1342{
1343 bool ok = false;
1344
1345 spin_lock_bh(&call->state_lock);
1346 if (call->state == from) {
1347 call->state = to;
1348 trace_afs_call_state(call, from, to, 0, 0);
1349 ok = true;
1350 }
1351 spin_unlock_bh(&call->state_lock);
1352 return ok;
1353}
1354
1355static inline void afs_set_call_complete(struct afs_call *call,
1356 int error, u32 remote_abort)
1357{
1358 enum afs_call_state state;
1359 bool ok = false;
1360
1361 spin_lock_bh(&call->state_lock);
1362 state = call->state;
1363 if (state != AFS_CALL_COMPLETE) {
1364 call->abort_code = remote_abort;
1365 call->error = error;
1366 call->state = AFS_CALL_COMPLETE;
1367 trace_afs_call_state(call, state, AFS_CALL_COMPLETE,
1368 error, remote_abort);
1369 ok = true;
1370 }
1371 spin_unlock_bh(&call->state_lock);
1372 if (ok) {
1373 trace_afs_call_done(call);
1374
1375
1376
1377
1378
1379 if (call->drop_ref)
1380 afs_put_call(call);
1381 }
1382}
1383
1384
1385
1386
1387extern void afs_put_permits(struct afs_permits *);
1388extern void afs_clear_permits(struct afs_vnode *);
1389extern void afs_cache_permit(struct afs_vnode *, struct key *, unsigned int,
1390 struct afs_status_cb *);
1391extern void afs_zap_permits(struct rcu_head *);
1392extern struct key *afs_request_key(struct afs_cell *);
1393extern struct key *afs_request_key_rcu(struct afs_cell *);
1394extern int afs_check_permit(struct afs_vnode *, struct key *, afs_access_t *);
1395extern int afs_permission(struct user_namespace *, struct inode *, int);
1396extern void __exit afs_clean_up_permit_cache(void);
1397
1398
1399
1400
1401extern spinlock_t afs_server_peer_lock;
1402
1403extern struct afs_server *afs_find_server(struct afs_net *,
1404 const struct sockaddr_rxrpc *);
1405extern struct afs_server *afs_find_server_by_uuid(struct afs_net *, const uuid_t *);
1406extern struct afs_server *afs_lookup_server(struct afs_cell *, struct key *, const uuid_t *, u32);
1407extern struct afs_server *afs_get_server(struct afs_server *, enum afs_server_trace);
1408extern struct afs_server *afs_use_server(struct afs_server *, enum afs_server_trace);
1409extern void afs_unuse_server(struct afs_net *, struct afs_server *, enum afs_server_trace);
1410extern void afs_unuse_server_notime(struct afs_net *, struct afs_server *, enum afs_server_trace);
1411extern void afs_put_server(struct afs_net *, struct afs_server *, enum afs_server_trace);
1412extern void afs_manage_servers(struct work_struct *);
1413extern void afs_servers_timer(struct timer_list *);
1414extern void afs_fs_probe_timer(struct timer_list *);
1415extern void __net_exit afs_purge_servers(struct afs_net *);
1416extern bool afs_check_server_record(struct afs_operation *, struct afs_server *);
1417
1418static inline void afs_inc_servers_outstanding(struct afs_net *net)
1419{
1420 atomic_inc(&net->servers_outstanding);
1421}
1422
1423static inline void afs_dec_servers_outstanding(struct afs_net *net)
1424{
1425 if (atomic_dec_and_test(&net->servers_outstanding))
1426 wake_up_var(&net->servers_outstanding);
1427}
1428
1429static inline bool afs_is_probing_server(struct afs_server *server)
1430{
1431 return list_empty(&server->probe_link);
1432}
1433
1434
1435
1436
1437static inline struct afs_server_list *afs_get_serverlist(struct afs_server_list *slist)
1438{
1439 refcount_inc(&slist->usage);
1440 return slist;
1441}
1442
1443extern void afs_put_serverlist(struct afs_net *, struct afs_server_list *);
1444extern struct afs_server_list *afs_alloc_server_list(struct afs_cell *, struct key *,
1445 struct afs_vldb_entry *,
1446 u8);
1447extern bool afs_annotate_server_list(struct afs_server_list *, struct afs_server_list *);
1448
1449
1450
1451
1452extern int __init afs_fs_init(void);
1453extern void afs_fs_exit(void);
1454
1455
1456
1457
1458extern struct afs_vldb_entry *afs_vl_get_entry_by_name_u(struct afs_vl_cursor *,
1459 const char *, int);
1460extern struct afs_addr_list *afs_vl_get_addrs_u(struct afs_vl_cursor *, const uuid_t *);
1461extern struct afs_call *afs_vl_get_capabilities(struct afs_net *, struct afs_addr_cursor *,
1462 struct key *, struct afs_vlserver *, unsigned int);
1463extern struct afs_addr_list *afs_yfsvl_get_endpoints(struct afs_vl_cursor *, const uuid_t *);
1464extern char *afs_yfsvl_get_cell_name(struct afs_vl_cursor *);
1465
1466
1467
1468
1469extern int afs_cell_detect_alias(struct afs_cell *, struct key *);
1470
1471
1472
1473
1474extern void afs_vlserver_probe_result(struct afs_call *);
1475extern int afs_send_vl_probes(struct afs_net *, struct key *, struct afs_vlserver_list *);
1476extern int afs_wait_for_vl_probes(struct afs_vlserver_list *, unsigned long);
1477
1478
1479
1480
1481extern bool afs_begin_vlserver_operation(struct afs_vl_cursor *,
1482 struct afs_cell *, struct key *);
1483extern bool afs_select_vlserver(struct afs_vl_cursor *);
1484extern bool afs_select_current_vlserver(struct afs_vl_cursor *);
1485extern int afs_end_vlserver_operation(struct afs_vl_cursor *);
1486
1487
1488
1489
1490static inline struct afs_vlserver *afs_get_vlserver(struct afs_vlserver *vlserver)
1491{
1492 atomic_inc(&vlserver->usage);
1493 return vlserver;
1494}
1495
1496static inline struct afs_vlserver_list *afs_get_vlserverlist(struct afs_vlserver_list *vllist)
1497{
1498 if (vllist)
1499 atomic_inc(&vllist->usage);
1500 return vllist;
1501}
1502
1503extern struct afs_vlserver *afs_alloc_vlserver(const char *, size_t, unsigned short);
1504extern void afs_put_vlserver(struct afs_net *, struct afs_vlserver *);
1505extern struct afs_vlserver_list *afs_alloc_vlserver_list(unsigned int);
1506extern void afs_put_vlserverlist(struct afs_net *, struct afs_vlserver_list *);
1507extern struct afs_vlserver_list *afs_extract_vlserver_list(struct afs_cell *,
1508 const void *, size_t);
1509
1510
1511
1512
1513extern struct afs_volume *afs_create_volume(struct afs_fs_context *);
1514extern int afs_activate_volume(struct afs_volume *);
1515extern void afs_deactivate_volume(struct afs_volume *);
1516extern struct afs_volume *afs_get_volume(struct afs_volume *, enum afs_volume_trace);
1517extern void afs_put_volume(struct afs_net *, struct afs_volume *, enum afs_volume_trace);
1518extern int afs_check_volume_status(struct afs_volume *, struct afs_operation *);
1519
1520
1521
1522
1523#ifdef CONFIG_AFS_FSCACHE
1524extern int afs_set_page_dirty(struct page *);
1525#else
1526#define afs_set_page_dirty __set_page_dirty_nobuffers
1527#endif
1528extern int afs_write_begin(struct file *file, struct address_space *mapping,
1529 loff_t pos, unsigned len, unsigned flags,
1530 struct page **pagep, void **fsdata);
1531extern int afs_write_end(struct file *file, struct address_space *mapping,
1532 loff_t pos, unsigned len, unsigned copied,
1533 struct page *page, void *fsdata);
1534extern int afs_writepage(struct page *, struct writeback_control *);
1535extern int afs_writepages(struct address_space *, struct writeback_control *);
1536extern ssize_t afs_file_write(struct kiocb *, struct iov_iter *);
1537extern int afs_fsync(struct file *, loff_t, loff_t, int);
1538extern vm_fault_t afs_page_mkwrite(struct vm_fault *vmf);
1539extern void afs_prune_wb_keys(struct afs_vnode *);
1540extern int afs_launder_page(struct page *);
1541
1542
1543
1544
1545extern const struct xattr_handler *afs_xattr_handlers[];
1546
1547
1548
1549
1550extern void yfs_fs_fetch_data(struct afs_operation *);
1551extern void yfs_fs_create_file(struct afs_operation *);
1552extern void yfs_fs_make_dir(struct afs_operation *);
1553extern void yfs_fs_remove_file2(struct afs_operation *);
1554extern void yfs_fs_remove_file(struct afs_operation *);
1555extern void yfs_fs_remove_dir(struct afs_operation *);
1556extern void yfs_fs_link(struct afs_operation *);
1557extern void yfs_fs_symlink(struct afs_operation *);
1558extern void yfs_fs_rename(struct afs_operation *);
1559extern void yfs_fs_store_data(struct afs_operation *);
1560extern void yfs_fs_setattr(struct afs_operation *);
1561extern void yfs_fs_get_volume_status(struct afs_operation *);
1562extern void yfs_fs_set_lock(struct afs_operation *);
1563extern void yfs_fs_extend_lock(struct afs_operation *);
1564extern void yfs_fs_release_lock(struct afs_operation *);
1565extern void yfs_fs_fetch_status(struct afs_operation *);
1566extern void yfs_fs_inline_bulk_status(struct afs_operation *);
1567
1568struct yfs_acl {
1569 struct afs_acl *acl;
1570 struct afs_acl *vol_acl;
1571 u32 inherit_flag;
1572 u32 num_cleaned;
1573 unsigned int flags;
1574#define YFS_ACL_WANT_ACL 0x01
1575#define YFS_ACL_WANT_VOL_ACL 0x02
1576};
1577
1578extern void yfs_free_opaque_acl(struct yfs_acl *);
1579extern void yfs_fs_fetch_opaque_acl(struct afs_operation *);
1580extern void yfs_fs_store_opaque_acl2(struct afs_operation *);
1581
1582
1583
1584
1585static inline struct afs_vnode *AFS_FS_I(struct inode *inode)
1586{
1587 return container_of(inode, struct afs_vnode, vfs_inode);
1588}
1589
1590static inline struct inode *AFS_VNODE_TO_I(struct afs_vnode *vnode)
1591{
1592 return &vnode->vfs_inode;
1593}
1594
1595
1596
1597
1598
1599
1600static inline void afs_update_dentry_version(struct afs_operation *op,
1601 struct afs_vnode_param *dir_vp,
1602 struct dentry *dentry)
1603{
1604 if (!op->error)
1605 dentry->d_fsdata =
1606 (void *)(unsigned long)dir_vp->scb.status.data_version;
1607}
1608
1609
1610
1611
1612
1613static inline void afs_set_i_size(struct afs_vnode *vnode, u64 size)
1614{
1615 i_size_write(&vnode->vfs_inode, size);
1616 vnode->vfs_inode.i_blocks = ((size + 1023) >> 10) << 1;
1617}
1618
1619
1620
1621
1622
1623
1624static inline void afs_check_dir_conflict(struct afs_operation *op,
1625 struct afs_vnode_param *dvp)
1626{
1627 if (dvp->dv_before + dvp->dv_delta != dvp->scb.status.data_version)
1628 op->flags |= AFS_OPERATION_DIR_CONFLICT;
1629}
1630
1631static inline int afs_io_error(struct afs_call *call, enum afs_io_error where)
1632{
1633 trace_afs_io_error(call->debug_id, -EIO, where);
1634 return -EIO;
1635}
1636
1637static inline int afs_bad(struct afs_vnode *vnode, enum afs_file_error where)
1638{
1639 trace_afs_file_error(vnode, -EIO, where);
1640 return -EIO;
1641}
1642
1643
1644
1645
1646
1647extern unsigned afs_debug;
1648
1649#define dbgprintk(FMT,...) \
1650 printk("[%-6.6s] "FMT"\n", current->comm ,##__VA_ARGS__)
1651
1652#define kenter(FMT,...) dbgprintk("==> %s("FMT")",__func__ ,##__VA_ARGS__)
1653#define kleave(FMT,...) dbgprintk("<== %s()"FMT"",__func__ ,##__VA_ARGS__)
1654#define kdebug(FMT,...) dbgprintk(" "FMT ,##__VA_ARGS__)
1655
1656
1657#if defined(__KDEBUG)
1658#define _enter(FMT,...) kenter(FMT,##__VA_ARGS__)
1659#define _leave(FMT,...) kleave(FMT,##__VA_ARGS__)
1660#define _debug(FMT,...) kdebug(FMT,##__VA_ARGS__)
1661
1662#elif defined(CONFIG_AFS_DEBUG)
1663#define AFS_DEBUG_KENTER 0x01
1664#define AFS_DEBUG_KLEAVE 0x02
1665#define AFS_DEBUG_KDEBUG 0x04
1666
1667#define _enter(FMT,...) \
1668do { \
1669 if (unlikely(afs_debug & AFS_DEBUG_KENTER)) \
1670 kenter(FMT,##__VA_ARGS__); \
1671} while (0)
1672
1673#define _leave(FMT,...) \
1674do { \
1675 if (unlikely(afs_debug & AFS_DEBUG_KLEAVE)) \
1676 kleave(FMT,##__VA_ARGS__); \
1677} while (0)
1678
1679#define _debug(FMT,...) \
1680do { \
1681 if (unlikely(afs_debug & AFS_DEBUG_KDEBUG)) \
1682 kdebug(FMT,##__VA_ARGS__); \
1683} while (0)
1684
1685#else
1686#define _enter(FMT,...) no_printk("==> %s("FMT")",__func__ ,##__VA_ARGS__)
1687#define _leave(FMT,...) no_printk("<== %s()"FMT"",__func__ ,##__VA_ARGS__)
1688#define _debug(FMT,...) no_printk(" "FMT ,##__VA_ARGS__)
1689#endif
1690
1691
1692
1693
1694#if 1
1695
1696#define ASSERT(X) \
1697do { \
1698 if (unlikely(!(X))) { \
1699 printk(KERN_ERR "\n"); \
1700 printk(KERN_ERR "AFS: Assertion failed\n"); \
1701 BUG(); \
1702 } \
1703} while(0)
1704
1705#define ASSERTCMP(X, OP, Y) \
1706do { \
1707 if (unlikely(!((X) OP (Y)))) { \
1708 printk(KERN_ERR "\n"); \
1709 printk(KERN_ERR "AFS: Assertion failed\n"); \
1710 printk(KERN_ERR "%lu " #OP " %lu is false\n", \
1711 (unsigned long)(X), (unsigned long)(Y)); \
1712 printk(KERN_ERR "0x%lx " #OP " 0x%lx is false\n", \
1713 (unsigned long)(X), (unsigned long)(Y)); \
1714 BUG(); \
1715 } \
1716} while(0)
1717
1718#define ASSERTRANGE(L, OP1, N, OP2, H) \
1719do { \
1720 if (unlikely(!((L) OP1 (N)) || !((N) OP2 (H)))) { \
1721 printk(KERN_ERR "\n"); \
1722 printk(KERN_ERR "AFS: Assertion failed\n"); \
1723 printk(KERN_ERR "%lu "#OP1" %lu "#OP2" %lu is false\n", \
1724 (unsigned long)(L), (unsigned long)(N), \
1725 (unsigned long)(H)); \
1726 printk(KERN_ERR "0x%lx "#OP1" 0x%lx "#OP2" 0x%lx is false\n", \
1727 (unsigned long)(L), (unsigned long)(N), \
1728 (unsigned long)(H)); \
1729 BUG(); \
1730 } \
1731} while(0)
1732
1733#define ASSERTIF(C, X) \
1734do { \
1735 if (unlikely((C) && !(X))) { \
1736 printk(KERN_ERR "\n"); \
1737 printk(KERN_ERR "AFS: Assertion failed\n"); \
1738 BUG(); \
1739 } \
1740} while(0)
1741
1742#define ASSERTIFCMP(C, X, OP, Y) \
1743do { \
1744 if (unlikely((C) && !((X) OP (Y)))) { \
1745 printk(KERN_ERR "\n"); \
1746 printk(KERN_ERR "AFS: Assertion failed\n"); \
1747 printk(KERN_ERR "%lu " #OP " %lu is false\n", \
1748 (unsigned long)(X), (unsigned long)(Y)); \
1749 printk(KERN_ERR "0x%lx " #OP " 0x%lx is false\n", \
1750 (unsigned long)(X), (unsigned long)(Y)); \
1751 BUG(); \
1752 } \
1753} while(0)
1754
1755#else
1756
1757#define ASSERT(X) \
1758do { \
1759} while(0)
1760
1761#define ASSERTCMP(X, OP, Y) \
1762do { \
1763} while(0)
1764
1765#define ASSERTRANGE(L, OP1, N, OP2, H) \
1766do { \
1767} while(0)
1768
1769#define ASSERTIF(C, X) \
1770do { \
1771} while(0)
1772
1773#define ASSERTIFCMP(C, X, OP, Y) \
1774do { \
1775} while(0)
1776
1777#endif
1778