nfs: remove ->write_pageio_init from rpc ops
Subsystems (2)
PATCH 1/2 nfs: remove ->write_pageio_init from rpc ops
We only use one static ops vector or grab it from the layout driver, so clean up the whole code path to make that more obvious.
--- fs/nfs/direct.c | 4 ++-- fs/nfs/nfs3proc.c | 1 - fs/nfs/nfs4proc.c | 1 - fs/nfs/pnfs.c | 14 -------------- fs/nfs/pnfs.h | 8 -------- fs/nfs/proc.c | 1 - fs/nfs/write.c | 20 ++++++++++++-------- include/linux/nfs_xdr.h | 2 -- 8 files changed, 14 insertions(+), 37 deletions(-)
fs/nfs/direct.c +2 -2
@@ -564,7 +564,7 @@ static void nfs_direct_write_reschedule(struct nfs_direct_req *dreq) dreq->count =0 ;get_dreq (dreq); -NFS_PROTO (dreq->inode)->write_pageio_init (&desc, dreq->inode,FLUSH_STABLE , +nfs_pageio_init_write (&desc, dreq->inode,FLUSH_STABLE , &nfs_direct_write_completion_ops); desc.pg_dreq = dreq;
@@ -874,7 +874,7 @@ static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq,size_t requested_bytes =0 ;unsigned long seg; -NFS_PROTO (inode)->write_pageio_init (&desc, inode,FLUSH_COND_STABLE , +nfs_pageio_init_write (&desc, inode,FLUSH_COND_STABLE , &nfs_direct_write_completion_ops); desc.pg_dreq = dreq;get_dreq (dreq);
fs/nfs/nfs3proc.c +0 -1
@@ -986,7 +986,6 @@ const struct nfs_rpc_ops nfs_v3_clientops = { .read_rpc_prepare = nfs3_proc_read_rpc_prepare, .read_done = nfs3_read_done, .write_setup = nfs3_proc_write_setup, - .write_pageio_init = nfs_pageio_init_write, .write_rpc_prepare = nfs3_proc_write_rpc_prepare, .write_done = nfs3_write_done, .commit_setup = nfs3_proc_commit_setup,
fs/nfs/nfs4proc.c +0 -1
@@ -8466,7 +8466,6 @@ const struct nfs_rpc_ops nfs_v4_clientops = { .read_rpc_prepare = nfs4_proc_read_rpc_prepare, .read_done = nfs4_read_done, .write_setup = nfs4_proc_write_setup, - .write_pageio_init = pnfs_pageio_init_write, .write_rpc_prepare = nfs4_proc_write_rpc_prepare, .write_done = nfs4_write_done, .commit_setup = nfs4_proc_commit_setup,
fs/nfs/pnfs.c +0 -14
@@ -1447,20 +1447,6 @@ pnfs_pageio_init_read(struct nfs_pageio_descriptor *pgio, struct inode *inode,nfs_pageio_init (pgio, inode, ld->pg_read_ops, compl_ops, server->rsize,0 ); } -void -pnfs_pageio_init_write (struct nfs_pageio_descriptor *pgio,struct inode *inode, -int ioflags, -const struct nfs_pgio_completion_ops *compl_ops) -{ -struct nfs_server *server =NFS_SERVER (inode); -struct pnfs_layoutdriver_type *ld = server->pnfs_curr_ld; - -if (ld ==NULL ) -nfs_pageio_init_write (pgio, inode, ioflags, compl_ops); -else -nfs_pageio_init (pgio, inode, ld->pg_write_ops, compl_ops, server->wsize, ioflags); -} -bool pnfs_generic_pg_test (struct nfs_pageio_descriptor *pgio,struct nfs_page *prev,struct nfs_page *req)
fs/nfs/pnfs.h +0 -8
@@ -182,8 +182,6 @@ void pnfs_put_lseg(struct pnfs_layout_segment *lseg);void pnfs_pageio_init_read (struct nfs_pageio_descriptor *,struct inode *,const struct nfs_pgio_completion_ops *); -void pnfs_pageio_init_write (struct nfs_pageio_descriptor *,struct inode *, -int ,const struct nfs_pgio_completion_ops *);void set_pnfs_layoutdriver (struct nfs_server *,const struct nfs_fh *,u32 );void unset_pnfs_layoutdriver (struct nfs_server *);
@@ -467,12 +465,6 @@ static inline void pnfs_pageio_init_read(struct nfs_pageio_descriptor *pgio, strnfs_pageio_init_read (pgio, inode, compl_ops); } -static inline void pnfs_pageio_init_write (struct nfs_pageio_descriptor *pgio,struct inode *inode,int ioflags, -const struct nfs_pgio_completion_ops *compl_ops) -{ -nfs_pageio_init_write (pgio, inode, ioflags, compl_ops); -} -static inline int pnfs_commit_list (struct inode *inode,struct list_head *mds_pages,int how,struct nfs_commit_info *cinfo)
fs/nfs/proc.c +0 -1
@@ -764,7 +764,6 @@ const struct nfs_rpc_ops nfs_v2_clientops = { .read_rpc_prepare = nfs_proc_read_rpc_prepare, .read_done = nfs_read_done, .write_setup = nfs_proc_write_setup, - .write_pageio_init = nfs_pageio_init_write, .write_rpc_prepare = nfs_proc_write_rpc_prepare, .write_done = nfs_write_done, .commit_setup = nfs_proc_commit_setup,
fs/nfs/write.c +12 -8
@@ -354,10 +354,8 @@ static int nfs_writepage_locked(struct page *page, struct writeback_control *wbcstruct nfs_pageio_descriptor pgio;int err; -NFS_PROTO (page_file_mapping (page)->host)->write_pageio_init (&pgio, - page->mapping->host, -wb_priority (wbc), - &nfs_async_write_completion_ops); +nfs_pageio_init_write (&pgio, page->mapping->host,wb_priority (wbc), + &nfs_async_write_completion_ops); err =nfs_do_writepage (page, wbc, &pgio);nfs_pageio_complete (&pgio);if (err <0 )
@@ -400,7 +398,8 @@ int nfs_writepages(struct address_space *mapping, struct writeback_control *wbc)nfs_inc_stats (inode,NFSIOS_VFSWRITEPAGES ); -NFS_PROTO (inode)->write_pageio_init (&pgio, inode,wb_priority (wbc), &nfs_async_write_completion_ops); +nfs_pageio_init_write (&pgio, inode,wb_priority (wbc), + &nfs_async_write_completion_ops); err =write_cache_pages (mapping, wbc, nfs_writepages_callback, &pgio);nfs_pageio_complete (&pgio);
@@ -1285,10 +1284,15 @@ void nfs_pageio_init_write(struct nfs_pageio_descriptor *pgio, struct inode *inode, int ioflags, const struct nfs_pgio_completion_ops *compl_ops) { - nfs_pageio_init(pgio, inode, &nfs_pageio_write_ops, compl_ops, - NFS_SERVER(inode)->wsize, ioflags); + struct nfs_server *server = NFS_SERVER(inode); +const struct nfs_pageio_ops *pg_ops = &nfs_pageio_write_ops; + +#if IS_ENABLED (CONFIG_NFS_V4 ) +if (server->pnfs_curr_ld) + pg_ops = server->pnfs_curr_ld->pg_write_ops; +#endif +nfs_pageio_init (pgio, inode, pg_ops, compl_ops, server->wsize, ioflags); } -EXPORT_SYMBOL_GPL (nfs_pageio_init_write);void nfs_pageio_reset_write_mds (struct nfs_pageio_descriptor *pgio) {
include/linux/nfs_xdr.h +0 -2
@@ -1467,8 +1467,6 @@ struct nfs_rpc_ops {int (*read_rpc_prepare)(struct rpc_task *,struct nfs_read_data *);int (*read_done) (struct rpc_task *,struct nfs_read_data *);void (*write_setup) (struct nfs_write_data *,struct rpc_message *); -void (*write_pageio_init)(struct nfs_pageio_descriptor *,struct inode *,int , -const struct nfs_pgio_completion_ops *);int (*write_rpc_prepare)(struct rpc_task *,struct nfs_write_data *);int (*write_done) (struct rpc_task *,struct nfs_write_data *);void (*commit_setup) (struct nfs_commit_data *,struct rpc_message *);
Signature · 1 line
1.7.10.4
PATCH 2/2 nfs: remove ->read_pageio_init from rpc ops
We only use one static ops vector or grab it from the layout driver, so clean up the whole code path to make that more obvious.
--- fs/nfs/direct.c | 3 +-- fs/nfs/nfs3proc.c | 1 - fs/nfs/nfs4proc.c | 1 - fs/nfs/pnfs.c | 13 ------------- fs/nfs/pnfs.h | 9 --------- fs/nfs/proc.c | 1 - fs/nfs/read.c | 16 +++++++++++----- include/linux/nfs_xdr.h | 2 -- 8 files changed, 12 insertions(+), 34 deletions(-)
fs/nfs/direct.c +1 -2
@@ -424,8 +424,7 @@ static ssize_t nfs_direct_read_schedule_iovec(struct nfs_direct_req *dreq,size_t requested_bytes =0 ;unsigned long seg; -NFS_PROTO (dreq->inode)->read_pageio_init (&desc, dreq->inode, - &nfs_direct_read_completion_ops); +nfs_pageio_init_read (&desc, dreq->inode, &nfs_direct_read_completion_ops);get_dreq (dreq); desc.pg_dreq = dreq;atomic_inc (&inode->i_dio_count);
fs/nfs/nfs3proc.c +0 -1
@@ -982,7 +982,6 @@ const struct nfs_rpc_ops nfs_v3_clientops = { .pathconf = nfs3_proc_pathconf, .decode_dirent = nfs3_decode_dirent, .read_setup = nfs3_proc_read_setup, - .read_pageio_init = nfs_pageio_init_read, .read_rpc_prepare = nfs3_proc_read_rpc_prepare, .read_done = nfs3_read_done, .write_setup = nfs3_proc_write_setup,
fs/nfs/nfs4proc.c +0 -1
@@ -8462,7 +8462,6 @@ const struct nfs_rpc_ops nfs_v4_clientops = { .set_capabilities = nfs4_server_capabilities, .decode_dirent = nfs4_decode_dirent, .read_setup = nfs4_proc_read_setup, - .read_pageio_init = pnfs_pageio_init_read, .read_rpc_prepare = nfs4_proc_read_rpc_prepare, .read_done = nfs4_read_done, .write_setup = nfs4_proc_write_setup,
fs/nfs/pnfs.c +0 -13
@@ -1434,19 +1434,6 @@ pnfs_generic_pg_init_write(struct nfs_pageio_descriptor *pgio, }EXPORT_SYMBOL_GPL (pnfs_generic_pg_init_write); -void -pnfs_pageio_init_read (struct nfs_pageio_descriptor *pgio,struct inode *inode, -const struct nfs_pgio_completion_ops *compl_ops) -{ -struct nfs_server *server =NFS_SERVER (inode); -struct pnfs_layoutdriver_type *ld = server->pnfs_curr_ld; - -if (ld ==NULL ) -nfs_pageio_init_read (pgio, inode, compl_ops); -else -nfs_pageio_init (pgio, inode, ld->pg_read_ops, compl_ops, server->rsize,0 ); -} -bool pnfs_generic_pg_test (struct nfs_pageio_descriptor *pgio,struct nfs_page *prev,struct nfs_page *req)
fs/nfs/pnfs.h +0 -9
@@ -180,9 +180,6 @@ extern int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp);void pnfs_get_layout_hdr (struct pnfs_layout_hdr *lo);void pnfs_put_lseg (struct pnfs_layout_segment *lseg); -void pnfs_pageio_init_read (struct nfs_pageio_descriptor *,struct inode *, -const struct nfs_pgio_completion_ops *); -void set_pnfs_layoutdriver (struct nfs_server *,const struct nfs_fh *,u32 );void unset_pnfs_layoutdriver (struct nfs_server *);void pnfs_generic_pg_init_read (struct nfs_pageio_descriptor *,struct nfs_page *);
@@ -459,12 +456,6 @@ static inline void unset_pnfs_layoutdriver(struct nfs_server *s) { } -static inline void pnfs_pageio_init_read (struct nfs_pageio_descriptor *pgio,struct inode *inode, -const struct nfs_pgio_completion_ops *compl_ops) -{ -nfs_pageio_init_read (pgio, inode, compl_ops); -} -static inline int pnfs_commit_list (struct inode *inode,struct list_head *mds_pages,int how,struct nfs_commit_info *cinfo)
fs/nfs/proc.c +0 -1
@@ -760,7 +760,6 @@ const struct nfs_rpc_ops nfs_v2_clientops = { .pathconf = nfs_proc_pathconf, .decode_dirent = nfs2_decode_dirent, .read_setup = nfs_proc_read_setup, - .read_pageio_init = nfs_pageio_init_read, .read_rpc_prepare = nfs_proc_read_rpc_prepare, .read_done = nfs_read_done, .write_setup = nfs_proc_write_setup,
fs/nfs/read.c +11 -5
@@ -24,6 +24,7 @@#include "internal.h" #include "iostat.h" #include "fscache.h" +#include "pnfs.h" #define NFSDBG_FACILITY NFSDBG_PAGECACHE
@@ -117,10 +118,15 @@ void nfs_pageio_init_read(struct nfs_pageio_descriptor *pgio,struct inode *inode, const struct nfs_pgio_completion_ops *compl_ops) { - nfs_pageio_init(pgio, inode, &nfs_pageio_read_ops, compl_ops, - NFS_SERVER(inode)->rsize, 0); + struct nfs_server *server = NFS_SERVER(inode); +const struct nfs_pageio_ops *pg_ops = &nfs_pageio_read_ops; + +#if IS_ENABLED (CONFIG_NFS_V4 ) +if (server->pnfs_curr_ld) + pg_ops = server->pnfs_curr_ld->pg_read_ops; +#endif +nfs_pageio_init (pgio, inode, pg_ops, compl_ops, server->rsize,0 ); } -EXPORT_SYMBOL_GPL (nfs_pageio_init_read);void nfs_pageio_reset_read_mds (struct nfs_pageio_descriptor *pgio) {
@@ -147,7 +153,7 @@ int nfs_readpage_async(struct nfs_open_context *ctx, struct inode *inode,if (len <PAGE_CACHE_SIZE )zero_user_segment (page, len,PAGE_CACHE_SIZE ); -NFS_PROTO (inode)->read_pageio_init (&pgio, inode, &nfs_async_read_completion_ops); +nfs_pageio_init_read (&pgio, inode, &nfs_async_read_completion_ops);nfs_pageio_add_request (&pgio, new);nfs_pageio_complete (&pgio);NFS_I (inode)->read_io += pgio.pg_bytes_written;
@@ -654,7 +660,7 @@ int nfs_readpages(struct file *filp, struct address_space *mapping,if (ret ==0 ) goto read_complete;/* all pages were read */ -NFS_PROTO (inode)->read_pageio_init (&pgio, inode, &nfs_async_read_completion_ops); +nfs_pageio_init_read (&pgio, inode, &nfs_async_read_completion_ops); ret =read_cache_pages (mapping, pages, readpage_async_filler, &desc);
include/linux/nfs_xdr.h +0 -2
@@ -1462,8 +1462,6 @@ struct nfs_rpc_ops {int (*set_capabilities)(struct nfs_server *,struct nfs_fh *);int (*decode_dirent)(struct xdr_stream *,struct nfs_entry *,int );void (*read_setup) (struct nfs_read_data *,struct rpc_message *); -void (*read_pageio_init)(struct nfs_pageio_descriptor *,struct inode *, -const struct nfs_pgio_completion_ops *);int (*read_rpc_prepare)(struct rpc_task *,struct nfs_read_data *);int (*read_done) (struct rpc_task *,struct nfs_read_data *);void (*write_setup) (struct nfs_write_data *,struct rpc_message *);
Signature · 1 line
1.7.10.4
Hey Christoph,
Quoted 156 lines · Christoph Hellwig
We only use one static ops vector or grab it from the layout driver, so clean up the whole code path to make that more obvious.
Signed-off-by Christoph Hellwig <[email protected]>--- fs/nfs/direct.c | 4 ++-- fs/nfs/nfs3proc.c | 1 - fs/nfs/nfs4proc.c | 1 - fs/nfs/pnfs.c | 14 -------------- fs/nfs/pnfs.h | 8 -------- fs/nfs/proc.c | 1 - fs/nfs/write.c | 20 ++++++++++++-------- include/linux/nfs_xdr.h | 2 -- 8 files changed, 14 insertions(+), 37 deletions(-)fs/nfs/direct.c +2
-2@@ -564,7 +564,7 @@ static void nfs_direct_write_reschedule(struct nfs_direct_req *dreq) dreq->count =0 ;get_dreq (dreq); -NFS_PROTO (dreq->inode)->write_pageio_init (&desc, dreq->inode,FLUSH_STABLE , +nfs_pageio_init_write (&desc, dreq->inode,FLUSH_STABLE , &nfs_direct_write_completion_ops); desc.pg_dreq = dreq;@@ -874,7 +874,7 @@ static ssize_t nfs_direct_write_schedule_iovec(struct nfs_direct_req *dreq,size_t requested_bytes =0 ;unsigned long seg; -NFS_PROTO (inode)->write_pageio_init (&desc, inode,FLUSH_COND_STABLE , +nfs_pageio_init_write (&desc, inode,FLUSH_COND_STABLE , &nfs_direct_write_completion_ops); desc.pg_dreq = dreq;get_dreq (dreq);fs/nfs/nfs3proc.c +0
-1@@ -986,7 +986,6 @@ const struct nfs_rpc_ops nfs_v3_clientops = { .read_rpc_prepare = nfs3_proc_read_rpc_prepare, .read_done = nfs3_read_done, .write_setup = nfs3_proc_write_setup, - .write_pageio_init = nfs_pageio_init_write, .write_rpc_prepare = nfs3_proc_write_rpc_prepare, .write_done = nfs3_write_done, .commit_setup = nfs3_proc_commit_setup,fs/nfs/nfs4proc.c +0
-1@@ -8466,7 +8466,6 @@ const struct nfs_rpc_ops nfs_v4_clientops = { .read_rpc_prepare = nfs4_proc_read_rpc_prepare, .read_done = nfs4_read_done, .write_setup = nfs4_proc_write_setup, - .write_pageio_init = pnfs_pageio_init_write, .write_rpc_prepare = nfs4_proc_write_rpc_prepare, .write_done = nfs4_write_done, .commit_setup = nfs4_proc_commit_setup,fs/nfs/pnfs.c +0
-14@@ -1447,20 +1447,6 @@ pnfs_pageio_init_read(struct nfs_pageio_descriptor *pgio, struct inode *inode,nfs_pageio_init (pgio, inode, ld->pg_read_ops, compl_ops, server->rsize,0 ); } -void -pnfs_pageio_init_write (struct nfs_pageio_descriptor *pgio,struct inode *inode, -int ioflags, -const struct nfs_pgio_completion_ops *compl_ops) -{ -struct nfs_server *server =NFS_SERVER (inode); -struct pnfs_layoutdriver_type *ld = server->pnfs_curr_ld; - -if (ld ==NULL ) -nfs_pageio_init_write (pgio, inode, ioflags, compl_ops); -else -nfs_pageio_init (pgio, inode, ld->pg_write_ops, compl_ops, server->wsize, ioflags); -} -bool pnfs_generic_pg_test (struct nfs_pageio_descriptor *pgio,struct nfs_page *prev,struct nfs_page *req)fs/nfs/pnfs.h +0
-8@@ -182,8 +182,6 @@ void pnfs_put_lseg(struct pnfs_layout_segment *lseg);void pnfs_pageio_init_read (struct nfs_pageio_descriptor *,struct inode *,const struct nfs_pgio_completion_ops *); -void pnfs_pageio_init_write (struct nfs_pageio_descriptor *,struct inode *, -int ,const struct nfs_pgio_completion_ops *);void set_pnfs_layoutdriver (struct nfs_server *,const struct nfs_fh *,u32 );void unset_pnfs_layoutdriver (struct nfs_server *);@@ -467,12 +465,6 @@ static inline void pnfs_pageio_init_read(struct nfs_pageio_descriptor *pgio, strnfs_pageio_init_read (pgio, inode, compl_ops); } -static inline void pnfs_pageio_init_write (struct nfs_pageio_descriptor *pgio,struct inode *inode,int ioflags, -const struct nfs_pgio_completion_ops *compl_ops) -{ -nfs_pageio_init_write (pgio, inode, ioflags, compl_ops); -} -static inline int pnfs_commit_list (struct inode *inode,struct list_head *mds_pages,int how,struct nfs_commit_info *cinfo)fs/nfs/proc.c +0
-1@@ -764,7 +764,6 @@ const struct nfs_rpc_ops nfs_v2_clientops = { .read_rpc_prepare = nfs_proc_read_rpc_prepare, .read_done = nfs_read_done, .write_setup = nfs_proc_write_setup, - .write_pageio_init = nfs_pageio_init_write, .write_rpc_prepare = nfs_proc_write_rpc_prepare, .write_done = nfs_write_done, .commit_setup = nfs_proc_commit_setup,fs/nfs/write.c +4
-6@@ -354,10 +354,8 @@ static int nfs_writepage_locked(struct page *page, struct writeback_control *wbcstruct nfs_pageio_descriptor pgio;int err; -NFS_PROTO (page_file_mapping (page)->host)->write_pageio_init (&pgio, - page->mapping->host, -wb_priority (wbc), - &nfs_async_write_completion_ops); +nfs_pageio_init_write (&pgio, page->mapping->host,wb_priority (wbc), + &nfs_async_write_completion_ops); err =nfs_do_writepage (page, wbc, &pgio);nfs_pageio_complete (&pgio);if (err <0 )@@ -400,7 +398,8 @@ int nfs_writepages(struct address_space *mapping, struct writeback_control *wbc)nfs_inc_stats (inode,NFSIOS_VFSWRITEPAGES ); -NFS_PROTO (inode)->write_pageio_init (&pgio, inode,wb_priority (wbc), &nfs_async_write_completion_ops); +nfs_pageio_init_write (&pgio, inode,wb_priority (wbc), + &nfs_async_write_completion_ops); err =write_cache_pages (mapping, wbc, nfs_writepages_callback, &pgio);nfs_pageio_complete (&pgio);@@ -1285,10 +1284,15 @@ void nfs_pageio_init_write(struct nfs_pageio_descriptor *pgio, struct inode *inode, int ioflags, const struct nfs_pgio_completion_ops *compl_ops) { - nfs_pageio_init(pgio, inode, &nfs_pageio_write_ops, compl_ops,
fs/nfs/write.c void nfs_pageio_init_write(struct nfs_pageio_descriptor *pgio, · line 1295
Quoted 10 lines
fs/nfs/write.c +8
-1- NFS_SERVER(inode)->wsize, ioflags); +struct nfs_server *server =NFS_SERVER (inode); +const struct nfs_pageio_ops *pg_ops = &nfs_pageio_write_ops; + +#if IS_ENABLED (CONFIG_NFS_V4 ) +if (server->pnfs_curr_ld) + pg_ops = server->pnfs_curr_ld->pg_write_ops; +#endif +nfs_pageio_init (pgio, inode, pg_ops, compl_ops, server->wsize, ioflags); }
I thought it was bad style to put a #ifdef in the middle of a function, which is why we have so many noop functions in the rest of the code. Should this be done with a select_compl_ops() function instead?
Anna
Quoted 17 lines
fs/nfs/write.c +0
-1-EXPORT_SYMBOL_GPL (nfs_pageio_init_write);void nfs_pageio_reset_write_mds (struct nfs_pageio_descriptor *pgio) {include/linux/nfs_xdr.h +0
-2@@ -1467,8 +1467,6 @@ struct nfs_rpc_ops {int (*read_rpc_prepare)(struct rpc_task *,struct nfs_read_data *);int (*read_done) (struct rpc_task *,struct nfs_read_data *);void (*write_setup) (struct nfs_write_data *,struct rpc_message *); -void (*write_pageio_init)(struct nfs_pageio_descriptor *,struct inode *,int , -const struct nfs_pgio_completion_ops *);int (*write_rpc_prepare)(struct rpc_task *,struct nfs_write_data *);int (*write_done) (struct rpc_task *,struct nfs_write_data *);void (*commit_setup) (struct nfs_commit_data *,struct rpc_message *);
Quoted 11 lines
fs/nfs/write.c void nfs_pageio_init_write(struct nfs_pageio_descriptor *pgio, · line 1295
Quoted 9 lines
fs/nfs/write.c +8
-0+struct nfs_server *server =NFS_SERVER (inode); +const struct nfs_pageio_ops *pg_ops = &nfs_pageio_write_ops; + +#if IS_ENABLED (CONFIG_NFS_V4 ) +if (server->pnfs_curr_ld) + pg_ops = server->pnfs_curr_ld->pg_write_ops; +#endif +nfs_pageio_init (pgio, inode, pg_ops, compl_ops, server->wsize, ioflags); }I thought it was bad style to put a #ifdef in the middle of a function, which is why we have so many noop functions in the rest of the code. Should this be done with a
select_compl_ops()function instead?
I don't think it's much of a problem for a small and readable function with a single ifdef. And we'd need one helper for read and write each, which would make the code much harder to read. Still better than what's there currently, though.
The other option would be to simply always have the pnfs_curr_ld field in the server structure and remove the ifdef entirely.
Quoted 10 lines · Christoph Hellwig
Quoted 10 lines
fs/nfs/write.c void nfs_pageio_init_write(struct nfs_pageio_descriptor *pgio, · line 1295
Quoted 9 lines
fs/nfs/write.c +8
-0+struct nfs_server *server =NFS_SERVER (inode); +const struct nfs_pageio_ops *pg_ops = &nfs_pageio_write_ops; + +#if IS_ENABLED (CONFIG_NFS_V4 ) +if (server->pnfs_curr_ld) + pg_ops = server->pnfs_curr_ld->pg_write_ops; +#endif +nfs_pageio_init (pgio, inode, pg_ops, compl_ops, server->wsize, ioflags); }I thought it was bad style to put a #ifdef in the middle of a function, which is why we have so many noop functions in the rest of the code. Should this be done with a
select_compl_ops()function instead?
Quoted 7 lines
I don't think it's much of a problem for a small and readable function with a single ifdef. And we'd need one helper for read and write each, which would make the code much harder to read. Still better than what's there currently, though.
The other option would be to simply always have the
pnfs_curr_ldfield in the server structure and remove the ifdef entirely.
Okay. If we keep the ifdef, then it should probably check for CONFIG_NFS_V4_1 and not CONFIG_NFS_V4
Quoted 4 lines · Anna Schumaker
Quoted 2 lines
The other option would be to simply always have the
pnfs_curr_ldfield in the server structure and remove the ifdef entirely.Okay. If we keep the ifdef, then it should probably check for
CONFIG_NFS_V4_1and notCONFIG_NFS_V4
The field in the header is under CONFIG_NFS_V4, so I tried to make it consistent.
Quoted 7 lines · Christoph Hellwig
Quoted 3 lines · Anna Schumaker
Quoted 2 lines
The other option would be to simply always have the
pnfs_curr_ldfield in the server structure and remove the ifdef entirely.Okay. If we keep the ifdef, then it should probably check for
CONFIG_NFS_V4_1and notCONFIG_NFS_V4The field in the header is under
CONFIG_NFS_V4, so I tried to make it consistent.
struct pnfs_layoutdriver_type comes from fs/nfs/pnfs.h under a CONFIG_NFS_V4_1 check, so you can't access pg_write_ops or pg_read_ops without v4.1 enabled.
Quoted 9 lines · Anna Schumaker
Quoted 7 lines · Christoph Hellwig
Quoted 3 lines · Anna Schumaker
Quoted 2 lines
The other option would be to simply always have the
pnfs_curr_ldfield in the server structure and remove the ifdef entirely.Okay. If we keep the ifdef, then it should probably check for
CONFIG_NFS_V4_1and notCONFIG_NFS_V4The field in the header is under
CONFIG_NFS_V4, so I tried to make it consistent.struct
pnfs_layoutdriver_typecomes fromfs/nfs/pnfs.hunder aCONFIG_NFS_V4_1check, so you can't accesspg_write_opsorpg_read_opswithout v4.1 enabled.
You're right - the field exists for plain v4, but we can't dereference it unless 4.1 support is enable. I'll send an update.