From: Trond Myklebust Date: Fri, 20 Oct 2006 06:28:38 +0000 (-0700) Subject: [PATCH] NFS: Fix oops in nfs_cancel_commit_list X-Git-Tag: firefly_0821_release~31522^2~47^2~59 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=b6dff26a08189932eeb0fa4261e09e733b0fc540;p=firefly-linux-kernel-4.4.55.git [PATCH] NFS: Fix oops in nfs_cancel_commit_list Fix two bugs: - nfs_inode_remove_request will call nfs_clear_request, so we cannot reference req->wb_page after it. Move the call to dec_zone_page_state so that it occurs while req->wb_page is still valid. - Calling nfs_clear_page_writeback is unnecessary since the radix tree tags will have been cleared by the call to nfs_inode_remove_request. Replace with a simple call to nfs_unlock_request. Signed-off-by: Trond Myklebust Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/fs/nfs/write.c b/fs/nfs/write.c index ca92ac36fe9d..883dd4a1c157 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -590,10 +590,10 @@ static void nfs_cancel_commit_list(struct list_head *head) while(!list_empty(head)) { req = nfs_list_entry(head->next); + dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); nfs_list_remove_request(req); nfs_inode_remove_request(req); - dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); - nfs_clear_page_writeback(req); + nfs_unlock_request(req); } }