]> www.infradead.org Git - users/hch/dma-mapping.git/commitdiff
nfs: pass struct nfsd_file to nfs_init_pgio and nfs_init_commit
authorMike Snitzer <snitzer@kernel.org>
Thu, 5 Sep 2024 19:09:52 +0000 (15:09 -0400)
committerAnna Schumaker <anna.schumaker@oracle.com>
Mon, 23 Sep 2024 19:03:30 +0000 (15:03 -0400)
The nfsd_file will be passed, in future commits, by callers
that enable LOCALIO support (for both regular NFS and pNFS IO).

[Derived from patch authored by Weston Andros Adamson, but switched
 from passing struct file to struct nfsd_file]

Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Reviewed-by: NeilBrown <neilb@suse.de>
Reviewed-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Anna Schumaker <anna.schumaker@oracle.com>
fs/nfs/filelayout/filelayout.c
fs/nfs/flexfilelayout/flexfilelayout.c
fs/nfs/internal.h
fs/nfs/pagelist.c
fs/nfs/pnfs_nfs.c
fs/nfs/write.c
include/linux/nfslocalio.h

index b6e9aeaf4ce289c96252f240c3dacc7ddcc000af..d39a1f58e18d9dc71eb36333deec6a5d6bcc9af6 100644 (file)
@@ -488,7 +488,7 @@ filelayout_read_pagelist(struct nfs_pgio_header *hdr)
        /* Perform an asynchronous read to ds */
        nfs_initiate_pgio(ds_clnt, hdr, hdr->cred,
                          NFS_PROTO(hdr->inode), &filelayout_read_call_ops,
-                         0, RPC_TASK_SOFTCONN);
+                         0, RPC_TASK_SOFTCONN, NULL);
        return PNFS_ATTEMPTED;
 }
 
@@ -530,7 +530,7 @@ filelayout_write_pagelist(struct nfs_pgio_header *hdr, int sync)
        /* Perform an asynchronous write */
        nfs_initiate_pgio(ds_clnt, hdr, hdr->cred,
                          NFS_PROTO(hdr->inode), &filelayout_write_call_ops,
-                         sync, RPC_TASK_SOFTCONN);
+                         sync, RPC_TASK_SOFTCONN, NULL);
        return PNFS_ATTEMPTED;
 }
 
@@ -1011,7 +1011,7 @@ static int filelayout_initiate_commit(struct nfs_commit_data *data, int how)
                data->args.fh = fh;
        return nfs_initiate_commit(ds_clnt, data, NFS_PROTO(data->inode),
                                   &filelayout_commit_call_ops, how,
-                                  RPC_TASK_SOFTCONN);
+                                  RPC_TASK_SOFTCONN, NULL);
 out_err:
        pnfs_generic_prepare_to_resend_writes(data);
        pnfs_generic_commit_release(data);
index d4d551ffea7b179b46678a5a360994de7e016ec5..01ee52551a632fd34f694418b15ef22f01428d5b 100644 (file)
@@ -1806,7 +1806,7 @@ ff_layout_read_pagelist(struct nfs_pgio_header *hdr)
        nfs_initiate_pgio(ds_clnt, hdr, ds_cred, ds->ds_clp->rpc_ops,
                          vers == 3 ? &ff_layout_read_call_ops_v3 :
                                      &ff_layout_read_call_ops_v4,
-                         0, RPC_TASK_SOFTCONN);
+                         0, RPC_TASK_SOFTCONN, NULL);
        put_cred(ds_cred);
        return PNFS_ATTEMPTED;
 
@@ -1874,7 +1874,7 @@ ff_layout_write_pagelist(struct nfs_pgio_header *hdr, int sync)
        nfs_initiate_pgio(ds_clnt, hdr, ds_cred, ds->ds_clp->rpc_ops,
                          vers == 3 ? &ff_layout_write_call_ops_v3 :
                                      &ff_layout_write_call_ops_v4,
-                         sync, RPC_TASK_SOFTCONN);
+                         sync, RPC_TASK_SOFTCONN, NULL);
        put_cred(ds_cred);
        return PNFS_ATTEMPTED;
 
@@ -1949,7 +1949,7 @@ static int ff_layout_initiate_commit(struct nfs_commit_data *data, int how)
        ret = nfs_initiate_commit(ds_clnt, data, ds->ds_clp->rpc_ops,
                                   vers == 3 ? &ff_layout_commit_call_ops_v3 :
                                               &ff_layout_commit_call_ops_v4,
-                                  how, RPC_TASK_SOFTCONN);
+                                  how, RPC_TASK_SOFTCONN, NULL);
        put_cred(ds_cred);
        return ret;
 out_err:
index b3dc7c84eef9df6502b5010e41addc66bec30e92..f0af96a665d2f7ee1f033b8a0debea76121af020 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/crc32.h>
 #include <linux/sunrpc/addr.h>
 #include <linux/nfs_page.h>
+#include <linux/nfslocalio.h>
 #include <linux/wait_bit.h>
 
 #define NFS_SB_MASK (SB_RDONLY|SB_NOSUID|SB_NODEV|SB_NOEXEC|SB_SYNCHRONOUS)
@@ -308,7 +309,8 @@ void nfs_pgio_header_free(struct nfs_pgio_header *);
 int nfs_generic_pgio(struct nfs_pageio_descriptor *, struct nfs_pgio_header *);
 int nfs_initiate_pgio(struct rpc_clnt *clnt, struct nfs_pgio_header *hdr,
                      const struct cred *cred, const struct nfs_rpc_ops *rpc_ops,
-                     const struct rpc_call_ops *call_ops, int how, int flags);
+                     const struct rpc_call_ops *call_ops, int how, int flags,
+                     struct nfsd_file *localio);
 void nfs_free_request(struct nfs_page *req);
 struct nfs_pgio_mirror *
 nfs_pgio_current_mirror(struct nfs_pageio_descriptor *desc);
@@ -527,7 +529,8 @@ extern int nfs_initiate_commit(struct rpc_clnt *clnt,
                               struct nfs_commit_data *data,
                               const struct nfs_rpc_ops *nfs_ops,
                               const struct rpc_call_ops *call_ops,
-                              int how, int flags);
+                              int how, int flags,
+                              struct nfsd_file *localio);
 extern void nfs_init_commit(struct nfs_commit_data *data,
                            struct list_head *head,
                            struct pnfs_layout_segment *lseg,
index 04124f22666530eddcf437557d8a96d5a8fd811d..50f3d6c9ac2a12b64c8ff28fad7d2534e6e49bf0 100644 (file)
@@ -731,7 +731,8 @@ static void nfs_pgio_prepare(struct rpc_task *task, void *calldata)
 
 int nfs_initiate_pgio(struct rpc_clnt *clnt, struct nfs_pgio_header *hdr,
                      const struct cred *cred, const struct nfs_rpc_ops *rpc_ops,
-                     const struct rpc_call_ops *call_ops, int how, int flags)
+                     const struct rpc_call_ops *call_ops, int how, int flags,
+                     struct nfsd_file *localio)
 {
        struct rpc_task *task;
        struct rpc_message msg = {
@@ -961,7 +962,8 @@ static int nfs_generic_pg_pgios(struct nfs_pageio_descriptor *desc)
                                        NFS_PROTO(hdr->inode),
                                        desc->pg_rpc_callops,
                                        desc->pg_ioflags,
-                                       RPC_TASK_CRED_NOREF | task_flags);
+                                       RPC_TASK_CRED_NOREF | task_flags,
+                                       NULL);
        }
        return ret;
 }
index a74ee69a2fa63848823c065fc22e80e8a2ad3c46..dbef837e871ad44e401461c39f04b159ec43f2f6 100644 (file)
@@ -490,7 +490,7 @@ pnfs_generic_commit_pagelist(struct inode *inode, struct list_head *mds_pages,
                        nfs_initiate_commit(NFS_CLIENT(inode), data,
                                            NFS_PROTO(data->inode),
                                            data->mds_ops, how,
-                                           RPC_TASK_CRED_NOREF);
+                                           RPC_TASK_CRED_NOREF, NULL);
                } else {
                        nfs_init_commit(data, NULL, data->lseg, cinfo);
                        initiate_commit(data, how);
index 61b580bcb356dd5fc63d5c9061d436b36ee2290d..ef72922263bb706ceb81da132c0288787f0dfb30 100644 (file)
@@ -1664,7 +1664,8 @@ EXPORT_SYMBOL_GPL(nfs_commitdata_release);
 int nfs_initiate_commit(struct rpc_clnt *clnt, struct nfs_commit_data *data,
                        const struct nfs_rpc_ops *nfs_ops,
                        const struct rpc_call_ops *call_ops,
-                       int how, int flags)
+                       int how, int flags,
+                       struct nfsd_file *localio)
 {
        struct rpc_task *task;
        int priority = flush_task_priority(how);
@@ -1810,7 +1811,7 @@ nfs_commit_list(struct inode *inode, struct list_head *head, int how,
                task_flags = RPC_TASK_MOVEABLE;
        return nfs_initiate_commit(NFS_CLIENT(inode), data, NFS_PROTO(inode),
                                   data->mds_ops, how,
-                                  RPC_TASK_CRED_NOREF | task_flags);
+                                  RPC_TASK_CRED_NOREF | task_flags, NULL);
 }
 
 /*
index 546f46b4e46f0c38617fbb68f8f42644748c8a8b..2c4e0fd9da6b93efa83c83b2ea07571520e7f003 100644 (file)
@@ -6,6 +6,9 @@
 #ifndef __LINUX_NFSLOCALIO_H
 #define __LINUX_NFSLOCALIO_H
 
+/* nfsd_file structure is purposely kept opaque to NFS client */
+struct nfsd_file;
+
 #if IS_ENABLED(CONFIG_NFS_LOCALIO)
 
 #include <linux/module.h>
@@ -36,8 +39,6 @@ void nfs_uuid_is_local(const uuid_t *, struct list_head *,
 void nfs_uuid_invalidate_clients(struct list_head *list);
 void nfs_uuid_invalidate_one_client(nfs_uuid_t *nfs_uuid);
 
-struct nfsd_file;
-
 /* localio needs to map filehandle -> struct nfsd_file */
 extern struct nfsd_file *
 nfsd_open_local_fh(struct net *, struct auth_domain *, struct rpc_clnt *,