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;