The one new feature this time, from Anna Schumaker, is READ_PLUS, which
has the same arguments as READ but allows the server to return an array of data and hole extents. Otherwise it's a lot of cleanup and bugfixes. -----BEGIN PGP SIGNATURE----- iQJJBAABCAAzFiEEYtFWavXG9hZotryuJ5vNeUKO4b4FAl+Q5vsVHGJmaWVsZHNA ZmllbGRzZXMub3JnAAoJECebzXlCjuG+DUAP/RlALnXbaoWi8YCcEcc9U1LoQKbD CJpDR+FqCOyGwRuzWung/5pvkOO50fGEeAroos+2rF/NgRkQq8EFr9AuBhNOYUFE IZhWEOfu/r2ukXyBmcu21HGcWLwPnyJehvjuzTQW2wOHlBi/sdoL5Ap1sVlwVLj5 EZ5kqJLD+ioG2sufW99Spi55l1Cy+3Y0IhLSWl4ZAE6s8hmFSYAJZFsOeI0Afx57 USPTDRaeqjyEULkb+f8IhD0eRApOUo4evDn9dwQx+of7HPa1CiygctTKYwA3hnlc gXp2KpVA1REaiYVgOPwYlnqBmJ2K9X0wCRzcWy2razqEcVAX/2j7QCe9M2mn4DC8 xZ2q4SxgXu9yf0qfUSVnDxWmP6ipqq7OmsG0JXTFseGKBdpjJY1qHhyqanVAGvEg I+xHnnWfGwNCftwyA3mt3RfSFPsbLlSBIMZxvN4kn8aVlqszGITOQvTdQcLYA6kT xWllBf4XKVXMqF0PzerxPDmfzBfhx6b1VPWOIVcu7VLBg3IXoEB2G5xG8MUJiSch OUTCt41LUQkerQlnzaZYqwmFdSBfXJefmcE/x/vps4VtQ/fPHX1jQyD7iTu3HfSP bRlkKHvNVeTodlBDe/HTPiTA99MShhBJyvtV5wfzIqwjc1cNreed+ePppxn8mxJi SmQ2uZk/MpUl7/V0 =rcOj -----END PGP SIGNATURE----- Merge tag 'nfsd-5.10' of git://linux-nfs.org/~bfields/linux Pull nfsd updates from Bruce Fields: "The one new feature this time, from Anna Schumaker, is READ_PLUS, which has the same arguments as READ but allows the server to return an array of data and hole extents. Otherwise it's a lot of cleanup and bugfixes" * tag 'nfsd-5.10' of git://linux-nfs.org/~bfields/linux: (43 commits) NFSv4.2: Fix NFS4ERR_STALE error when doing inter server copy SUNRPC: fix copying of multiple pages in gss_read_proxy_verf() sunrpc: raise kernel RPC channel buffer size svcrdma: fix bounce buffers for unaligned offsets and multiple pages nfsd: remove unneeded break net/sunrpc: Fix return value for sysctl sunrpc.transports NFSD: Encode a full READ_PLUS reply NFSD: Return both a hole and a data segment NFSD: Add READ_PLUS hole segment encoding NFSD: Add READ_PLUS data support NFSD: Hoist status code encoding into XDR encoder functions NFSD: Map nfserr_wrongsec outside of nfsd_dispatch NFSD: Remove the RETURN_STATUS() macro NFSD: Call NFSv2 encoders on error returns NFSD: Fix .pc_release method for NFSv2 NFSD: Remove vestigial typedefs NFSD: Refactor nfsd_dispatch() error paths NFSD: Clean up nfsd_dispatch() variables NFSD: Clean up stale comments in nfsd_dispatch() NFSD: Clean up switch statement in nfsd_dispatch() ...
This commit is contained in:
commit
24717cfbbb
44 changed files with 1488 additions and 1366 deletions
67
include/linux/nfs_ssc.h
Normal file
67
include/linux/nfs_ssc.h
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* include/linux/nfs_ssc.h
|
||||
*
|
||||
* Author: Dai Ngo <dai.ngo@oracle.com>
|
||||
*
|
||||
* Copyright (c) 2020, Oracle and/or its affiliates.
|
||||
*/
|
||||
|
||||
#include <linux/nfs_fs.h>
|
||||
|
||||
extern struct nfs_ssc_client_ops_tbl nfs_ssc_client_tbl;
|
||||
|
||||
/*
|
||||
* NFS_V4
|
||||
*/
|
||||
struct nfs4_ssc_client_ops {
|
||||
struct file *(*sco_open)(struct vfsmount *ss_mnt,
|
||||
struct nfs_fh *src_fh, nfs4_stateid *stateid);
|
||||
void (*sco_close)(struct file *filep);
|
||||
};
|
||||
|
||||
/*
|
||||
* NFS_FS
|
||||
*/
|
||||
struct nfs_ssc_client_ops {
|
||||
void (*sco_sb_deactive)(struct super_block *sb);
|
||||
};
|
||||
|
||||
struct nfs_ssc_client_ops_tbl {
|
||||
const struct nfs4_ssc_client_ops *ssc_nfs4_ops;
|
||||
const struct nfs_ssc_client_ops *ssc_nfs_ops;
|
||||
};
|
||||
|
||||
extern void nfs42_ssc_register_ops(void);
|
||||
extern void nfs42_ssc_unregister_ops(void);
|
||||
|
||||
extern void nfs42_ssc_register(const struct nfs4_ssc_client_ops *ops);
|
||||
extern void nfs42_ssc_unregister(const struct nfs4_ssc_client_ops *ops);
|
||||
|
||||
#ifdef CONFIG_NFSD_V4_2_INTER_SSC
|
||||
static inline struct file *nfs42_ssc_open(struct vfsmount *ss_mnt,
|
||||
struct nfs_fh *src_fh, nfs4_stateid *stateid)
|
||||
{
|
||||
if (nfs_ssc_client_tbl.ssc_nfs4_ops)
|
||||
return (*nfs_ssc_client_tbl.ssc_nfs4_ops->sco_open)(ss_mnt, src_fh, stateid);
|
||||
return ERR_PTR(-EIO);
|
||||
}
|
||||
|
||||
static inline void nfs42_ssc_close(struct file *filep)
|
||||
{
|
||||
if (nfs_ssc_client_tbl.ssc_nfs4_ops)
|
||||
(*nfs_ssc_client_tbl.ssc_nfs4_ops->sco_close)(filep);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* NFS_FS
|
||||
*/
|
||||
extern void nfs_ssc_register(const struct nfs_ssc_client_ops *ops);
|
||||
extern void nfs_ssc_unregister(const struct nfs_ssc_client_ops *ops);
|
||||
|
||||
static inline void nfs_do_sb_deactive(struct super_block *sb)
|
||||
{
|
||||
if (nfs_ssc_client_tbl.ssc_nfs_ops)
|
||||
(*nfs_ssc_client_tbl.ssc_nfs_ops->sco_sb_deactive)(sb);
|
||||
}
|
||||
|
|
@ -234,6 +234,8 @@ typedef int (*kxdrdproc_t)(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|||
extern void xdr_init_encode(struct xdr_stream *xdr, struct xdr_buf *buf,
|
||||
__be32 *p, struct rpc_rqst *rqst);
|
||||
extern __be32 *xdr_reserve_space(struct xdr_stream *xdr, size_t nbytes);
|
||||
extern int xdr_reserve_space_vec(struct xdr_stream *xdr, struct kvec *vec,
|
||||
size_t nbytes);
|
||||
extern void xdr_commit_encode(struct xdr_stream *xdr);
|
||||
extern void xdr_truncate_encode(struct xdr_stream *xdr, size_t len);
|
||||
extern int xdr_restrict_buflen(struct xdr_stream *xdr, int newbuflen);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue