Pull NFS client updates from Trond Myklebust: "Bugfixes: - Fix 'nlink' attribute update races when unlinking a file - Add missing initialisers for the directory verifier in various places - Don't regress the NFSv4 open state due to misordered racing replies - Ensure the NFSv4.x callback server uses the correct transport connection - Fix potential use-after-free races when shutting down the NFSv4.x callback server - Fix a pNFS layout commit crash - Assorted fixes to ensure correct propagation of mount options when the client crosses a filesystem boundary and triggers the VFS automount code - More localio fixes Features and cleanups: - Add initial support for basic directory delegations - SunRPC back channel code cleanups" * tag 'nfs-for-6.19-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs: (24 commits) NFSv4: Handle NFS4ERR_NOTSUPP errors for directory delegations nfs/localio: remove 61 byte hole from needless ____cacheline_aligned nfs/localio: remove alignment size checking in nfs_is_local_dio_possible NFS: Fix up the automount fs_context to use the correct cred NFS: Fix inheritance of the block sizes when automounting NFS: Automounted filesystems should inherit ro,noexec,nodev,sync flags Revert "nfs: ignore SB_RDONLY when mounting nfs" Revert "nfs: clear SB_RDONLY before getting superblock" Revert "nfs: ignore SB_RDONLY when remounting nfs" NFS: Add a module option to disable directory delegations NFS: Shortcut lookup revalidations if we have a directory delegation NFS: Request a directory delegation during RENAME NFS: Request a directory delegation on ACCESS, CREATE, and UNLINK NFS: Add support for sending GDD_GETATTR NFSv4/pNFS: Clear NFS_INO_LAYOUTCOMMIT in pnfs_mark_layout_stateid_invalid NFSv4.1: protect destroying and nullifying bc_serv structure SUNRPC: new helper function for stopping backchannel server SUNRPC: cleanup common code in backchannel request NFSv4.1: pass transport for callback shutdown NFSv4: ensure the open stateid seqid doesn't go backwards ...
Showing the changes to include/linux (4 of 25 files). Show all
Unified · Split
| @@ -344,6 +344,7 @@ struct nfs4_copy_state { · 343 unmodified lines | ||
| 344 | 344 | #define NFS_INO_LAYOUTCOMMITTING (10) /* layoutcommit inflight */ |
| 345 | 345 | #define NFS_INO_LAYOUTSTATS (11) /* layoutstats inflight */ |
| 346 | 346 | #define NFS_INO_ODIRECT (12) /* I/O setting is O_DIRECT */ |
| 347 | +#define NFS_INO_REQ_DIR_DELEG (13) /* Request a directory delegation */ | |
| 347 | 348 | |
| 348 | 349 | static inline struct nfs_inode *NFS_I(const struct inode *inode) |
| 349 | 350 | { |
| @@ -172,6 +172,11 @@ struct nfs_server { · 171 unmodified lines | ||
| 172 | 172 | #define NFS_MOUNT_FORCE_RDIRPLUS 0x20000000 |
| 173 | 173 | #define NFS_MOUNT_NETUNREACH_FATAL 0x40000000 |
| 174 | 174 | |
| 175 | + unsigned int automount_inherit; /* Properties inherited by automount */ | |
| 176 | +#define NFS_AUTOMOUNT_INHERIT_BSIZE 0x0001 | |
| 177 | +#define NFS_AUTOMOUNT_INHERIT_RSIZE 0x0002 | |
| 178 | +#define NFS_AUTOMOUNT_INHERIT_WSIZE 0x0004 | |
| 179 | + | |
| 175 | 180 | unsigned int caps; /* server capabilities */ |
| 176 | 181 | __u64 fattr_valid; /* Valid attributes */ |
| 177 | 182 | unsigned int rsize; /* read size */ |
| @@ -305,6 +310,7 @@ struct nfs_server { · 127 unmodified lines | ||
| 305 | 310 | #define NFS_CAP_REBOOT_LAYOUTRETURN (1U << 8) |
| 306 | 311 | #define NFS_CAP_OFFLOAD_STATUS (1U << 9) |
| 307 | 312 | #define NFS_CAP_ZERO_RANGE (1U << 10) |
| 313 | +#define NFS_CAP_DIR_DELEG (1U << 11) | |
| 308 | 314 | #define NFS_CAP_OPEN_XOR (1U << 12) |
| 309 | 315 | #define NFS_CAP_DELEGTIME (1U << 13) |
| 310 | 316 | #define NFS_CAP_POSIX_LOCK (1U << 14) |
| @@ -1092,12 +1092,19 @@ struct nfs4_getattr_arg { · 1091 unmodified lines | ||
| 1092 | 1092 | struct nfs4_sequence_args seq_args; |
| 1093 | 1093 | const struct nfs_fh * fh; |
| 1094 | 1094 | const u32 * bitmask; |
| 1095 | + bool get_dir_deleg; | |
| 1096 | +}; | |
| 1097 | + | |
| 1098 | +struct nfs4_gdd_res { | |
| 1099 | + u32 status; | |
| 1100 | + nfs4_stateid deleg; | |
| 1095 | 1101 | }; |
| 1096 | 1102 | |
| 1097 | 1103 | struct nfs4_getattr_res { |
| 1098 | 1104 | struct nfs4_sequence_res seq_res; |
| 1099 | 1105 | const struct nfs_server * server; |
| 1100 | 1106 | struct nfs_fattr * fattr; |
| 1107 | + struct nfs4_gdd_res * gdd_res; | |
| 1101 | 1108 | }; |
| 1102 | 1109 | |
| 1103 | 1110 | struct nfs4_link_arg { |
| @@ -1801,7 +1808,8 @@ struct nfs_rpc_ops { · 697 unmodified lines | ||
| 1801 | 1808 | int (*unlink_done) (struct rpc_task *, struct inode *); |
| 1802 | 1809 | void (*rename_setup) (struct rpc_message *msg, |
| 1803 | 1810 | struct dentry *old_dentry, |
| 1804 | − struct dentry *new_dentry); | |
| 1811 | + struct dentry *new_dentry, | |
| 1812 | + struct inode *same_parent); | |
| 1805 | 1813 | void (*rename_rpc_prepare)(struct rpc_task *task, struct nfs_renamedata *); |
| 1806 | 1814 | int (*rename_done) (struct rpc_task *task, struct inode *old_dir, struct inode *new_dir); |
| 1807 | 1815 | int (*link) (struct inode *, struct inode *, const struct qstr *); |
| @@ -25,12 +25,14 @@ void xprt_init_bc_request(struct rpc_rqst *req, struct rpc_task *task, · 24 unmodified lines | ||
| 25 | 25 | void xprt_free_bc_request(struct rpc_rqst *req); |
| 26 | 26 | int xprt_setup_backchannel(struct rpc_xprt *, unsigned int min_reqs); |
| 27 | 27 | void xprt_destroy_backchannel(struct rpc_xprt *, unsigned int max_reqs); |
| 28 | +void xprt_enqueue_bc_request(struct rpc_rqst *req); | |
| 28 | 29 | |
| 29 | 30 | /* Socket backchannel transport methods */ |
| 30 | 31 | int xprt_setup_bc(struct rpc_xprt *xprt, unsigned int min_reqs); |
| 31 | 32 | void xprt_destroy_bc(struct rpc_xprt *xprt, unsigned int max_reqs); |
| 32 | 33 | void xprt_free_bc_rqst(struct rpc_rqst *req); |
| 33 | 34 | unsigned int xprt_bc_max_slots(struct rpc_xprt *xprt); |
| 35 | +void xprt_svc_destroy_nullify_bc(struct rpc_xprt *xprt, struct svc_serv **serv); | |
| 34 | 36 | |
| 35 | 37 | /* |
| 36 | 38 | * Determine if a shared backchannel is in use |
| @@ -68,5 +70,10 @@ static inline void set_bc_enabled(struct svc_serv *serv) · 31 unmodified lines | ||
| 68 | 70 | static inline void xprt_free_bc_request(struct rpc_rqst *req) |
| 69 | 71 | { |
| 70 | 72 | } |
| 73 | + | |
| 74 | +static inline void xprt_svc_destroy_nullify_bc(struct rpc_xprt *xprt, struct svc_serv **serv) | |
| 75 | +{ | |
| 76 | + svc_destroy(serv); | |
| 77 | +} | |
| 71 | 78 | #endif /* CONFIG_SUNRPC_BACKCHANNEL */ |
| 72 | 79 | #endif /* _LINUX_SUNRPC_BC_XPRT_H */ |