Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > fc11cd6e1c513a17304da94a5390f3cd > files > 2579

kernel-2.6.18-194.11.1.el5.src.rpm

From: Ian Kent <ikent@redhat.com>
Date: Tue, 1 Dec 2009 17:07:18 -0500
Subject: [nfs] fix a deadlock with lazy umount -2
Message-id: <20091201170718.12228.69007.stgit@zeus.themaw.net>
Patchwork-id: 21572
O-Subject: [RHEL 5.4 PATCH 2/5] NFS: Fix a deadlock with lazy umount fix
	(bz489931)
Bugzilla: 489931
RH-Acked-by: Jeff Layton <jlayton@redhat.com>

From: Ian Kent <raven@themaw.net>

Some of the cases were we need to bump the context count were
missed when we backorted this patch series.

diff --git a/fs/nfs/read.c b/fs/nfs/read.c
index 20f0d17..57fd698 100644
--- a/fs/nfs/read.c
+++ b/fs/nfs/read.c
@@ -162,7 +162,7 @@ static int nfs_readpage_sync(struct nfs_open_context *ctx, struct inode *inode,
 	rdata->inode = inode;
 	INIT_LIST_HEAD(&rdata->pages);
 	rdata->args.fh = NFS_FH(inode);
-	rdata->args.context = ctx;
+	rdata->args.context = get_nfs_open_context(ctx);
 	rdata->args.pages = &page;
 	rdata->args.pgbase = 0UL;
 	rdata->args.count = rsize;
@@ -219,13 +219,13 @@ static int nfs_readpage_sync(struct nfs_open_context *ctx, struct inode *inode,
 	result = 0;
 
 	nfs_readpage_to_fscache(inode, page, 1);
-	nfs_readdata_free(rdata);
+	nfs_readdata_release(rdata);
 	unlock_page(page);
 
 	return result;
 
 io_error:
-	nfs_readdata_free(rdata);
+	nfs_readdata_release(rdata);
 out_unlock:
 	unlock_page(page);
 	return result;
@@ -408,7 +408,7 @@ out_bad:
 	while (!list_empty(&list)) {
 		data = list_entry(list.next, struct nfs_read_data, pages);
 		list_del(&data->pages);
-		nfs_readdata_free(data);
+		nfs_readdata_release(data);
 	}
 	SetPageError(page);
 	nfs_readpage_release(req);
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index b24727b..f683476 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -987,7 +987,7 @@ static void nfs_write_rpcsetup(struct nfs_page *req,
 	data->args.pgbase = req->wb_pgbase + offset;
 	data->args.pages  = data->pagevec;
 	data->args.count  = count;
-	data->args.context = req->wb_context;
+	data->args.context = get_nfs_open_context(req->wb_context);
 
 	data->res.fattr   = &data->fattr;
 	data->res.count   = count;