mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-18 21:41:52 -04:00
Merge tag 'nfs-for-6.19-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
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
...
This commit is contained in:
@@ -344,6 +344,7 @@ struct nfs4_copy_state {
|
||||
#define NFS_INO_LAYOUTCOMMITTING (10) /* layoutcommit inflight */
|
||||
#define NFS_INO_LAYOUTSTATS (11) /* layoutstats inflight */
|
||||
#define NFS_INO_ODIRECT (12) /* I/O setting is O_DIRECT */
|
||||
#define NFS_INO_REQ_DIR_DELEG (13) /* Request a directory delegation */
|
||||
|
||||
static inline struct nfs_inode *NFS_I(const struct inode *inode)
|
||||
{
|
||||
|
||||
@@ -172,6 +172,11 @@ struct nfs_server {
|
||||
#define NFS_MOUNT_FORCE_RDIRPLUS 0x20000000
|
||||
#define NFS_MOUNT_NETUNREACH_FATAL 0x40000000
|
||||
|
||||
unsigned int automount_inherit; /* Properties inherited by automount */
|
||||
#define NFS_AUTOMOUNT_INHERIT_BSIZE 0x0001
|
||||
#define NFS_AUTOMOUNT_INHERIT_RSIZE 0x0002
|
||||
#define NFS_AUTOMOUNT_INHERIT_WSIZE 0x0004
|
||||
|
||||
unsigned int caps; /* server capabilities */
|
||||
__u64 fattr_valid; /* Valid attributes */
|
||||
unsigned int rsize; /* read size */
|
||||
@@ -305,6 +310,7 @@ struct nfs_server {
|
||||
#define NFS_CAP_REBOOT_LAYOUTRETURN (1U << 8)
|
||||
#define NFS_CAP_OFFLOAD_STATUS (1U << 9)
|
||||
#define NFS_CAP_ZERO_RANGE (1U << 10)
|
||||
#define NFS_CAP_DIR_DELEG (1U << 11)
|
||||
#define NFS_CAP_OPEN_XOR (1U << 12)
|
||||
#define NFS_CAP_DELEGTIME (1U << 13)
|
||||
#define NFS_CAP_POSIX_LOCK (1U << 14)
|
||||
|
||||
@@ -1092,12 +1092,19 @@ struct nfs4_getattr_arg {
|
||||
struct nfs4_sequence_args seq_args;
|
||||
const struct nfs_fh * fh;
|
||||
const u32 * bitmask;
|
||||
bool get_dir_deleg;
|
||||
};
|
||||
|
||||
struct nfs4_gdd_res {
|
||||
u32 status;
|
||||
nfs4_stateid deleg;
|
||||
};
|
||||
|
||||
struct nfs4_getattr_res {
|
||||
struct nfs4_sequence_res seq_res;
|
||||
const struct nfs_server * server;
|
||||
struct nfs_fattr * fattr;
|
||||
struct nfs4_gdd_res * gdd_res;
|
||||
};
|
||||
|
||||
struct nfs4_link_arg {
|
||||
@@ -1801,7 +1808,8 @@ struct nfs_rpc_ops {
|
||||
int (*unlink_done) (struct rpc_task *, struct inode *);
|
||||
void (*rename_setup) (struct rpc_message *msg,
|
||||
struct dentry *old_dentry,
|
||||
struct dentry *new_dentry);
|
||||
struct dentry *new_dentry,
|
||||
struct inode *same_parent);
|
||||
void (*rename_rpc_prepare)(struct rpc_task *task, struct nfs_renamedata *);
|
||||
int (*rename_done) (struct rpc_task *task, struct inode *old_dir, struct inode *new_dir);
|
||||
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,
|
||||
void xprt_free_bc_request(struct rpc_rqst *req);
|
||||
int xprt_setup_backchannel(struct rpc_xprt *, unsigned int min_reqs);
|
||||
void xprt_destroy_backchannel(struct rpc_xprt *, unsigned int max_reqs);
|
||||
void xprt_enqueue_bc_request(struct rpc_rqst *req);
|
||||
|
||||
/* Socket backchannel transport methods */
|
||||
int xprt_setup_bc(struct rpc_xprt *xprt, unsigned int min_reqs);
|
||||
void xprt_destroy_bc(struct rpc_xprt *xprt, unsigned int max_reqs);
|
||||
void xprt_free_bc_rqst(struct rpc_rqst *req);
|
||||
unsigned int xprt_bc_max_slots(struct rpc_xprt *xprt);
|
||||
void xprt_svc_destroy_nullify_bc(struct rpc_xprt *xprt, struct svc_serv **serv);
|
||||
|
||||
/*
|
||||
* Determine if a shared backchannel is in use
|
||||
@@ -68,5 +70,10 @@ static inline void set_bc_enabled(struct svc_serv *serv)
|
||||
static inline void xprt_free_bc_request(struct rpc_rqst *req)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void xprt_svc_destroy_nullify_bc(struct rpc_xprt *xprt, struct svc_serv **serv)
|
||||
{
|
||||
svc_destroy(serv);
|
||||
}
|
||||
#endif /* CONFIG_SUNRPC_BACKCHANNEL */
|
||||
#endif /* _LINUX_SUNRPC_BC_XPRT_H */
|
||||
|
||||
Reference in New Issue
Block a user