Loading fs/nfs/nfs4proc.c +9 −2 Original line number Original line Diff line number Diff line Loading @@ -7810,7 +7810,7 @@ static const struct rpc_call_ops nfs4_layoutreturn_call_ops = { .rpc_release = nfs4_layoutreturn_release, .rpc_release = nfs4_layoutreturn_release, }; }; int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp) int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp, bool sync) { { struct rpc_task *task; struct rpc_task *task; struct rpc_message msg = { struct rpc_message msg = { Loading @@ -7824,16 +7824,23 @@ int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp) .rpc_message = &msg, .rpc_message = &msg, .callback_ops = &nfs4_layoutreturn_call_ops, .callback_ops = &nfs4_layoutreturn_call_ops, .callback_data = lrp, .callback_data = lrp, .flags = RPC_TASK_ASYNC, }; }; int status; int status = 0; dprintk("--> %s\n", __func__); dprintk("--> %s\n", __func__); nfs4_init_sequence(&lrp->args.seq_args, &lrp->res.seq_res, 1); nfs4_init_sequence(&lrp->args.seq_args, &lrp->res.seq_res, 1); task = rpc_run_task(&task_setup_data); task = rpc_run_task(&task_setup_data); if (IS_ERR(task)) if (IS_ERR(task)) return PTR_ERR(task); return PTR_ERR(task); if (sync == false) goto out; status = nfs4_wait_for_completion_rpc_task(task); if (status != 0) goto out; status = task->tk_status; status = task->tk_status; trace_nfs4_layoutreturn(lrp->args.inode, status); trace_nfs4_layoutreturn(lrp->args.inode, status); out: dprintk("<-- %s status=%d\n", __func__, status); dprintk("<-- %s status=%d\n", __func__, status); rpc_put_task(task); rpc_put_task(task); return status; return status; Loading fs/nfs/pnfs.c +6 −5 Original line number Original line Diff line number Diff line Loading @@ -52,7 +52,7 @@ static LIST_HEAD(pnfs_modules_tbl); static int static int pnfs_send_layoutreturn(struct pnfs_layout_hdr *lo, nfs4_stateid stateid, pnfs_send_layoutreturn(struct pnfs_layout_hdr *lo, nfs4_stateid stateid, enum pnfs_iomode iomode); enum pnfs_iomode iomode, bool sync); /* Return the registered pnfs layout driver module matching given id */ /* Return the registered pnfs layout driver module matching given id */ static struct pnfs_layoutdriver_type * static struct pnfs_layoutdriver_type * Loading Loading @@ -392,7 +392,8 @@ pnfs_put_lseg(struct pnfs_layout_segment *lseg) spin_unlock(&inode->i_lock); spin_unlock(&inode->i_lock); pnfs_free_lseg(lseg); pnfs_free_lseg(lseg); if (need_return) if (need_return) pnfs_send_layoutreturn(lo, stateid, iomode); pnfs_send_layoutreturn(lo, stateid, iomode, true); else else pnfs_put_layout_hdr(lo); pnfs_put_layout_hdr(lo); } } Loading Loading @@ -897,7 +898,7 @@ static void pnfs_clear_layoutcommit(struct inode *inode, static int static int pnfs_send_layoutreturn(struct pnfs_layout_hdr *lo, nfs4_stateid stateid, pnfs_send_layoutreturn(struct pnfs_layout_hdr *lo, nfs4_stateid stateid, enum pnfs_iomode iomode) enum pnfs_iomode iomode, bool sync) { { struct inode *ino = lo->plh_inode; struct inode *ino = lo->plh_inode; struct nfs4_layoutreturn *lrp; struct nfs4_layoutreturn *lrp; Loading @@ -923,7 +924,7 @@ pnfs_send_layoutreturn(struct pnfs_layout_hdr *lo, nfs4_stateid stateid, lrp->clp = NFS_SERVER(ino)->nfs_client; lrp->clp = NFS_SERVER(ino)->nfs_client; lrp->cred = lo->plh_lc_cred; lrp->cred = lo->plh_lc_cred; status = nfs4_proc_layoutreturn(lrp); status = nfs4_proc_layoutreturn(lrp, sync); out: out: if (status) { if (status) { spin_lock(&ino->i_lock); spin_lock(&ino->i_lock); Loading Loading @@ -989,7 +990,7 @@ _pnfs_return_layout(struct inode *ino) spin_unlock(&ino->i_lock); spin_unlock(&ino->i_lock); pnfs_free_lseg_list(&tmp_list); pnfs_free_lseg_list(&tmp_list); status = pnfs_send_layoutreturn(lo, stateid, IOMODE_ANY); status = pnfs_send_layoutreturn(lo, stateid, IOMODE_ANY, true); out: out: dprintk("<-- %s status: %d\n", __func__, status); dprintk("<-- %s status: %d\n", __func__, status); return status; return status; Loading fs/nfs/pnfs.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -219,7 +219,7 @@ extern int nfs4_proc_getdeviceinfo(struct nfs_server *server, struct pnfs_device *dev, struct pnfs_device *dev, struct rpc_cred *cred); struct rpc_cred *cred); extern struct pnfs_layout_segment* nfs4_proc_layoutget(struct nfs4_layoutget *lgp, gfp_t gfp_flags); extern struct pnfs_layout_segment* nfs4_proc_layoutget(struct nfs4_layoutget *lgp, gfp_t gfp_flags); extern int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp); extern int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp, bool sync); /* pnfs.c */ /* pnfs.c */ void pnfs_get_layout_hdr(struct pnfs_layout_hdr *lo); void pnfs_get_layout_hdr(struct pnfs_layout_hdr *lo); Loading Loading
fs/nfs/nfs4proc.c +9 −2 Original line number Original line Diff line number Diff line Loading @@ -7810,7 +7810,7 @@ static const struct rpc_call_ops nfs4_layoutreturn_call_ops = { .rpc_release = nfs4_layoutreturn_release, .rpc_release = nfs4_layoutreturn_release, }; }; int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp) int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp, bool sync) { { struct rpc_task *task; struct rpc_task *task; struct rpc_message msg = { struct rpc_message msg = { Loading @@ -7824,16 +7824,23 @@ int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp) .rpc_message = &msg, .rpc_message = &msg, .callback_ops = &nfs4_layoutreturn_call_ops, .callback_ops = &nfs4_layoutreturn_call_ops, .callback_data = lrp, .callback_data = lrp, .flags = RPC_TASK_ASYNC, }; }; int status; int status = 0; dprintk("--> %s\n", __func__); dprintk("--> %s\n", __func__); nfs4_init_sequence(&lrp->args.seq_args, &lrp->res.seq_res, 1); nfs4_init_sequence(&lrp->args.seq_args, &lrp->res.seq_res, 1); task = rpc_run_task(&task_setup_data); task = rpc_run_task(&task_setup_data); if (IS_ERR(task)) if (IS_ERR(task)) return PTR_ERR(task); return PTR_ERR(task); if (sync == false) goto out; status = nfs4_wait_for_completion_rpc_task(task); if (status != 0) goto out; status = task->tk_status; status = task->tk_status; trace_nfs4_layoutreturn(lrp->args.inode, status); trace_nfs4_layoutreturn(lrp->args.inode, status); out: dprintk("<-- %s status=%d\n", __func__, status); dprintk("<-- %s status=%d\n", __func__, status); rpc_put_task(task); rpc_put_task(task); return status; return status; Loading
fs/nfs/pnfs.c +6 −5 Original line number Original line Diff line number Diff line Loading @@ -52,7 +52,7 @@ static LIST_HEAD(pnfs_modules_tbl); static int static int pnfs_send_layoutreturn(struct pnfs_layout_hdr *lo, nfs4_stateid stateid, pnfs_send_layoutreturn(struct pnfs_layout_hdr *lo, nfs4_stateid stateid, enum pnfs_iomode iomode); enum pnfs_iomode iomode, bool sync); /* Return the registered pnfs layout driver module matching given id */ /* Return the registered pnfs layout driver module matching given id */ static struct pnfs_layoutdriver_type * static struct pnfs_layoutdriver_type * Loading Loading @@ -392,7 +392,8 @@ pnfs_put_lseg(struct pnfs_layout_segment *lseg) spin_unlock(&inode->i_lock); spin_unlock(&inode->i_lock); pnfs_free_lseg(lseg); pnfs_free_lseg(lseg); if (need_return) if (need_return) pnfs_send_layoutreturn(lo, stateid, iomode); pnfs_send_layoutreturn(lo, stateid, iomode, true); else else pnfs_put_layout_hdr(lo); pnfs_put_layout_hdr(lo); } } Loading Loading @@ -897,7 +898,7 @@ static void pnfs_clear_layoutcommit(struct inode *inode, static int static int pnfs_send_layoutreturn(struct pnfs_layout_hdr *lo, nfs4_stateid stateid, pnfs_send_layoutreturn(struct pnfs_layout_hdr *lo, nfs4_stateid stateid, enum pnfs_iomode iomode) enum pnfs_iomode iomode, bool sync) { { struct inode *ino = lo->plh_inode; struct inode *ino = lo->plh_inode; struct nfs4_layoutreturn *lrp; struct nfs4_layoutreturn *lrp; Loading @@ -923,7 +924,7 @@ pnfs_send_layoutreturn(struct pnfs_layout_hdr *lo, nfs4_stateid stateid, lrp->clp = NFS_SERVER(ino)->nfs_client; lrp->clp = NFS_SERVER(ino)->nfs_client; lrp->cred = lo->plh_lc_cred; lrp->cred = lo->plh_lc_cred; status = nfs4_proc_layoutreturn(lrp); status = nfs4_proc_layoutreturn(lrp, sync); out: out: if (status) { if (status) { spin_lock(&ino->i_lock); spin_lock(&ino->i_lock); Loading Loading @@ -989,7 +990,7 @@ _pnfs_return_layout(struct inode *ino) spin_unlock(&ino->i_lock); spin_unlock(&ino->i_lock); pnfs_free_lseg_list(&tmp_list); pnfs_free_lseg_list(&tmp_list); status = pnfs_send_layoutreturn(lo, stateid, IOMODE_ANY); status = pnfs_send_layoutreturn(lo, stateid, IOMODE_ANY, true); out: out: dprintk("<-- %s status: %d\n", __func__, status); dprintk("<-- %s status: %d\n", __func__, status); return status; return status; Loading
fs/nfs/pnfs.h +1 −1 Original line number Original line Diff line number Diff line Loading @@ -219,7 +219,7 @@ extern int nfs4_proc_getdeviceinfo(struct nfs_server *server, struct pnfs_device *dev, struct pnfs_device *dev, struct rpc_cred *cred); struct rpc_cred *cred); extern struct pnfs_layout_segment* nfs4_proc_layoutget(struct nfs4_layoutget *lgp, gfp_t gfp_flags); extern struct pnfs_layout_segment* nfs4_proc_layoutget(struct nfs4_layoutget *lgp, gfp_t gfp_flags); extern int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp); extern int nfs4_proc_layoutreturn(struct nfs4_layoutreturn *lrp, bool sync); /* pnfs.c */ /* pnfs.c */ void pnfs_get_layout_hdr(struct pnfs_layout_hdr *lo); void pnfs_get_layout_hdr(struct pnfs_layout_hdr *lo); Loading