aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/read.c
diff options
context:
space:
mode:
authorAnna Schumaker <Anna.Schumaker@netapp.com>2014-05-06 09:12:37 -0400
committerTrond Myklebust <trond.myklebust@primarydata.com>2014-05-29 11:11:40 -0400
commit1ed26f33008e954a8e91d26f97d4380dea8145db (patch)
treea187a1fb9658ee39d5c00e71fd6105b7cb6d3f56 /fs/nfs/read.c
parentef2c488c073f4f0b3a200745dd8d608c01d69c39 (diff)
NFS: Create a common initiate_pgio() function
Most of this code is the same for both the read and write paths, so combine everything and use the rw_ops when necessary. Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs/nfs/read.c')
-rw-r--r--fs/nfs/read.c42
1 files changed, 6 insertions, 36 deletions
diff --git a/fs/nfs/read.c b/fs/nfs/read.c
index 4fcef82d78b4..0359b0d76ef6 100644
--- a/fs/nfs/read.c
+++ b/fs/nfs/read.c
@@ -151,53 +151,22 @@ out:
151 hdr->release(hdr); 151 hdr->release(hdr);
152} 152}
153 153
154int nfs_initiate_read(struct rpc_clnt *clnt, 154static void nfs_initiate_read(struct nfs_pgio_data *data, struct rpc_message *msg,
155 struct nfs_pgio_data *data, 155 struct rpc_task_setup *task_setup_data, int how)
156 const struct rpc_call_ops *call_ops, int flags)
157{ 156{
158 struct inode *inode = data->header->inode; 157 struct inode *inode = data->header->inode;
159 int swap_flags = IS_SWAPFILE(inode) ? NFS_RPC_SWAPFLAGS : 0; 158 int swap_flags = IS_SWAPFILE(inode) ? NFS_RPC_SWAPFLAGS : 0;
160 struct rpc_task *task;
161 struct rpc_message msg = {
162 .rpc_argp = &data->args,
163 .rpc_resp = &data->res,
164 .rpc_cred = data->header->cred,
165 };
166 struct rpc_task_setup task_setup_data = {
167 .task = &data->task,
168 .rpc_client = clnt,
169 .rpc_message = &msg,
170 .callback_ops = call_ops,
171 .callback_data = data,
172 .workqueue = nfsiod_workqueue,
173 .flags = RPC_TASK_ASYNC | swap_flags | flags,
174 };
175 159
176 /* Set up the initial task struct. */ 160 task_setup_data->flags |= swap_flags;
177 NFS_PROTO(inode)->read_setup(data, &msg); 161 NFS_PROTO(inode)->read_setup(data, msg);
178
179 dprintk("NFS: %5u initiated read call (req %s/%llu, %u bytes @ "
180 "offset %llu)\n",
181 data->task.tk_pid,
182 inode->i_sb->s_id,
183 (unsigned long long)NFS_FILEID(inode),
184 data->args.count,
185 (unsigned long long)data->args.offset);
186
187 task = rpc_run_task(&task_setup_data);
188 if (IS_ERR(task))
189 return PTR_ERR(task);
190 rpc_put_task(task);
191 return 0;
192} 162}
193EXPORT_SYMBOL_GPL(nfs_initiate_read);
194 163
195static int nfs_do_read(struct nfs_pgio_data *data, 164static int nfs_do_read(struct nfs_pgio_data *data,
196 const struct rpc_call_ops *call_ops) 165 const struct rpc_call_ops *call_ops)
197{ 166{
198 struct inode *inode = data->header->inode; 167 struct inode *inode = data->header->inode;
199 168
200 return nfs_initiate_read(NFS_CLIENT(inode), data, call_ops, 0); 169 return nfs_initiate_pgio(NFS_CLIENT(inode), data, call_ops, 0, 0);
201} 170}
202 171
203static int 172static int
@@ -491,4 +460,5 @@ static const struct nfs_rw_ops nfs_rw_read_ops = {
491 .rw_free_header = nfs_readhdr_free, 460 .rw_free_header = nfs_readhdr_free,
492 .rw_done = nfs_readpage_done, 461 .rw_done = nfs_readpage_done,
493 .rw_result = nfs_readpage_result, 462 .rw_result = nfs_readpage_result,
463 .rw_initiate = nfs_initiate_read,
494}; 464};