|
@@ -6129,11 +6129,13 @@ static struct page **nfs4_alloc_pages(size_t size, gfp_t gfp_flags)
|
|
|
static void nfs4_layoutget_release(void *calldata)
|
|
|
{
|
|
|
struct nfs4_layoutget *lgp = calldata;
|
|
|
- struct nfs_server *server = NFS_SERVER(lgp->args.inode);
|
|
|
+ struct inode *inode = lgp->args.inode;
|
|
|
+ struct nfs_server *server = NFS_SERVER(inode);
|
|
|
size_t max_pages = max_response_pages(server);
|
|
|
|
|
|
dprintk("--> %s\n", __func__);
|
|
|
nfs4_free_pages(lgp->args.layout.pages, max_pages);
|
|
|
+ pnfs_put_layout_hdr(NFS_I(inode)->layout);
|
|
|
put_nfs_open_context(lgp->args.ctx);
|
|
|
kfree(calldata);
|
|
|
dprintk("<-- %s\n", __func__);
|
|
@@ -6148,7 +6150,8 @@ static const struct rpc_call_ops nfs4_layoutget_call_ops = {
|
|
|
struct pnfs_layout_segment *
|
|
|
nfs4_proc_layoutget(struct nfs4_layoutget *lgp, gfp_t gfp_flags)
|
|
|
{
|
|
|
- struct nfs_server *server = NFS_SERVER(lgp->args.inode);
|
|
|
+ struct inode *inode = lgp->args.inode;
|
|
|
+ struct nfs_server *server = NFS_SERVER(inode);
|
|
|
size_t max_pages = max_response_pages(server);
|
|
|
struct rpc_task *task;
|
|
|
struct rpc_message msg = {
|
|
@@ -6178,6 +6181,10 @@ nfs4_proc_layoutget(struct nfs4_layoutget *lgp, gfp_t gfp_flags)
|
|
|
lgp->res.layoutp = &lgp->args.layout;
|
|
|
lgp->res.seq_res.sr_slot = NULL;
|
|
|
nfs41_init_sequence(&lgp->args.seq_args, &lgp->res.seq_res, 0);
|
|
|
+
|
|
|
+ /* nfs4_layoutget_release calls pnfs_put_layout_hdr */
|
|
|
+ pnfs_get_layout_hdr(NFS_I(inode)->layout);
|
|
|
+
|
|
|
task = rpc_run_task(&task_setup_data);
|
|
|
if (IS_ERR(task))
|
|
|
return ERR_CAST(task);
|