diff options
Diffstat (limited to 'fs/nfs/read.c')
-rw-r--r-- | fs/nfs/read.c | 42 |
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 | ||
154 | int nfs_initiate_read(struct rpc_clnt *clnt, | 154 | static 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 | } |
193 | EXPORT_SYMBOL_GPL(nfs_initiate_read); | ||
194 | 163 | ||
195 | static int nfs_do_read(struct nfs_pgio_data *data, | 164 | static 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 | ||
203 | static int | 172 | static 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 | }; |