The patch titled NFS: Fix race in nfs_set_page_dirty has been removed from the -mm tree. Its filename was nfs-fix-race-in-nfs_set_page_dirty.patch This patch was dropped because it was merged into mainline or a subsystem tree ------------------------------------------------------ Subject: NFS: Fix race in nfs_set_page_dirty From: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> Protect nfs_set_page_dirty() against races with nfs_inode_add_request. Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- fs/nfs/write.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff -puN fs/nfs/write.c~nfs-fix-race-in-nfs_set_page_dirty fs/nfs/write.c --- a/fs/nfs/write.c~nfs-fix-race-in-nfs_set_page_dirty +++ a/fs/nfs/write.c @@ -376,6 +376,8 @@ static int nfs_inode_add_request(struct } SetPagePrivate(req->wb_page); set_page_private(req->wb_page, (unsigned long)req); + if (PageDirty(req->wb_page)) + set_bit(PG_NEED_FLUSH, &req->wb_flags); nfsi->npages++; atomic_inc(&req->wb_count); return 0; @@ -395,6 +397,8 @@ static void nfs_inode_remove_request(str set_page_private(req->wb_page, 0); ClearPagePrivate(req->wb_page); radix_tree_delete(&nfsi->nfs_page_tree, req->wb_index); + if (test_and_clear_bit(PG_NEED_FLUSH, &req->wb_flags)) + __set_page_dirty_nobuffers(req->wb_page); nfsi->npages--; if (!nfsi->npages) { spin_unlock(&nfsi->req_lock); @@ -1530,15 +1534,22 @@ int nfs_wb_page(struct inode *inode, str int nfs_set_page_dirty(struct page *page) { + spinlock_t *req_lock = &NFS_I(page->mapping->host)->req_lock; struct nfs_page *req; + int ret; - req = nfs_page_find_request(page); + spin_lock(req_lock); + req = nfs_page_find_request_locked(page); if (req != NULL) { /* Mark any existing write requests for flushing */ - set_bit(PG_NEED_FLUSH, &req->wb_flags); + ret = !test_and_set_bit(PG_NEED_FLUSH, &req->wb_flags); + spin_unlock(req_lock); nfs_release_request(req); + return ret; } - return __set_page_dirty_nobuffers(page); + ret = __set_page_dirty_nobuffers(page); + spin_unlock(req_lock); + return ret; } _ Patches currently in -mm which might be from Trond.Myklebust@xxxxxxxxxx are origin.patch auth_gss-unregister-gss_domain-when-unloading-module.patch nfs-kill-the-obsolete-nfs_paranoia.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html