From: Fred Isaman <iisaman@netapp.com>
To: linux-nfs@vger.kernel.org
Subject: [PATCH 5/7] SQUASHME: pnfs-devinfo-submit: Use only asynch error handler for LAYOUTGET
Date: Fri, 1 Oct 2010 12:02:49 -0400 [thread overview]
Message-ID: <1285948971-2048-6-git-send-email-iisaman@netapp.com> (raw)
In-Reply-To: <1285948971-2048-1-git-send-email-iisaman@netapp.com>
This corrects the problem where a retry uses freed memory.
Signed-off-by: Fred Isaman <iisaman@netapp.com>
---
fs/nfs/nfs4proc.c | 38 +++++++++++++++-----------------------
1 files changed, 15 insertions(+), 23 deletions(-)
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index aad6fdc..e28da81 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -5426,15 +5426,26 @@ nfs4_layoutget_prepare(struct rpc_task *task, void *calldata)
static void nfs4_layoutget_done(struct rpc_task *task, void *calldata)
{
struct nfs4_layoutget *lgp = calldata;
+ struct nfs_server *server = NFS_SERVER(lgp->args.inode);
dprintk("--> %s\n", __func__);
if (!nfs4_sequence_done(task, &lgp->res.seq_res))
return;
- /* Error handling done later using nfs4_handle_exception to get
- * exponential backoff.
- */
+ switch (task->tk_status) {
+ case 0:
+ break;
+ case -NFS4ERR_LAYOUTTRYLATER:
+ case -NFS4ERR_RECALLCONFLICT:
+ task->tk_status = -NFS4ERR_DELAY;
+ /* Fall through */
+ default:
+ if (nfs4_async_handle_error(task, server, NULL, NULL) == -EAGAIN) {
+ rpc_restart_call_prepare(task);
+ return;
+ }
+ }
lgp->status = task->tk_status;
dprintk("<-- %s\n", __func__);
}
@@ -5458,7 +5469,7 @@ static const struct rpc_call_ops nfs4_layoutget_call_ops = {
.rpc_release = nfs4_layoutget_release,
};
-static int _nfs4_proc_layoutget(struct nfs4_layoutget *lgp)
+int nfs4_proc_layoutget(struct nfs4_layoutget *lgp)
{
struct nfs_server *server = NFS_SERVER(lgp->args.inode);
struct rpc_task *task;
@@ -5501,25 +5512,6 @@ out:
return status;
}
-int nfs4_proc_layoutget(struct nfs4_layoutget *lgp)
-{
- struct nfs_server *server = NFS_SERVER(lgp->args.inode);
- struct nfs4_exception exception = { };
- int err;
- do {
- err = _nfs4_proc_layoutget(lgp);
- switch (err) {
- case -NFS4ERR_LAYOUTTRYLATER:
- case -NFS4ERR_RECALLCONFLICT:
- err = -NFS4ERR_DELAY;
- /* Fall through */
- default:
- err = nfs4_handle_exception(server, err, &exception);
- }
- } while (exception.retry);
- return err;
-}
-
static void nfs4_layoutcommit_prepare(struct rpc_task *task, void *data)
{
struct nfs4_layoutcommit_data *ldata =
--
1.7.2.1
next prev parent reply other threads:[~2010-10-01 16:03 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-01 16:02 [PATCH 0/7] misc fixes and cleanup Fred Isaman
2010-10-01 16:02 ` [PATCH 1/7] SQUASHME: pnfs-devinfo-submit: misc small fixes Fred Isaman
2010-10-01 16:02 ` [PATCH 2/7] SQUASHME: pnfs_submit: remove inlines from *.c files Fred Isaman
2010-10-01 16:02 ` [PATCH 3/7] SQUASHME: pnfs-devinfo-submit: fix comments in pnfs_layout*_release Fred Isaman
2010-10-01 16:02 ` [PATCH 4/7] nfs: change end of line commas to semicolons Fred Isaman
2010-10-01 16:02 ` Fred Isaman [this message]
2010-10-01 16:02 ` [PATCH 6/7] SQUASHME: pnfs_submit: Only use asynch error handler for LAYOUTCOMMIT Fred Isaman
2010-10-01 16:02 ` [PATCH 7/7] SQUASHME: pnfs_submit: only use asynch error handler for LAYOUTRETURN Fred Isaman
2010-10-01 16:30 ` [PATCH 0/7] misc fixes and cleanup Benny Halevy
2010-10-01 17:00 ` Benny Halevy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1285948971-2048-6-git-send-email-iisaman@netapp.com \
--to=iisaman@netapp.com \
--cc=linux-nfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox