From 56a84fbbee99be04ad363971e0130ffcef4610b4 Mon Sep 17 00:00:00 2001 From: Trond Myklebust Date: Sat, 26 Jan 2008 17:37:47 -0500 Subject: [PATCH] --- yaml --- r: 79565 b: refs/heads/master c: fccca7fc6aab4e6b519e2d606ef34632e4f50e33 h: refs/heads/master i: 79563: 739f7300878d1c1aeb84242e84e494bfaac2a844 v: v3 --- [refs] | 2 +- trunk/block/as-iosched.c | 10 +++------- trunk/fs/nfs/dir.c | 11 +++++------ trunk/fs/nfs/unlink.c | 2 +- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/[refs] b/[refs] index d79317bc0c1d..4d9266185284 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 149a051f82d2b3860fe32fa182dbc83a66274894 +refs/heads/master: fccca7fc6aab4e6b519e2d606ef34632e4f50e33 diff --git a/trunk/block/as-iosched.c b/trunk/block/as-iosched.c index 96036846a001..b201d16a7102 100644 --- a/trunk/block/as-iosched.c +++ b/trunk/block/as-iosched.c @@ -1275,13 +1275,9 @@ static void as_merged_requests(struct request_queue *q, struct request *req, * Don't copy here but swap, because when anext is * removed below, it must contain the unused context */ - if (rioc != nioc) { - double_spin_lock(&rioc->lock, &nioc->lock, - rioc < nioc); - swap_io_context(&rioc, &nioc); - double_spin_unlock(&rioc->lock, &nioc->lock, - rioc < nioc); - } + double_spin_lock(&rioc->lock, &nioc->lock, rioc < nioc); + swap_io_context(&rioc, &nioc); + double_spin_unlock(&rioc->lock, &nioc->lock, rioc < nioc); } } diff --git a/trunk/fs/nfs/dir.c b/trunk/fs/nfs/dir.c index f697b5c74b7c..d9abdb1d6a2a 100644 --- a/trunk/fs/nfs/dir.c +++ b/trunk/fs/nfs/dir.c @@ -537,12 +537,6 @@ static int nfs_readdir(struct file *filp, void *dirent, filldir_t filldir) lock_kernel(); - res = nfs_revalidate_mapping_nolock(inode, filp->f_mapping); - if (res < 0) { - unlock_kernel(); - return res; - } - /* * filp->f_pos points to the dirent entry number. * *desc->dir_cookie has the cookie for the next entry. We have @@ -564,6 +558,10 @@ static int nfs_readdir(struct file *filp, void *dirent, filldir_t filldir) desc->entry = &my_entry; nfs_block_sillyrename(dentry); + res = nfs_revalidate_mapping_nolock(inode, filp->f_mapping); + if (res < 0) + goto out; + while(!desc->entry->eof) { res = readdir_search_pagecache(desc); @@ -594,6 +592,7 @@ static int nfs_readdir(struct file *filp, void *dirent, filldir_t filldir) break; } } +out: nfs_unblock_sillyrename(dentry); unlock_kernel(); if (res > 0) diff --git a/trunk/fs/nfs/unlink.c b/trunk/fs/nfs/unlink.c index 233ad38161f9..c5fa6d8001f1 100644 --- a/trunk/fs/nfs/unlink.c +++ b/trunk/fs/nfs/unlink.c @@ -138,7 +138,7 @@ static int nfs_do_call_unlink(struct dentry *parent, struct inode *dir, struct n spin_lock(&alias->d_lock); if (!(alias->d_flags & DCACHE_NFSFS_RENAMED)) { alias->d_fsdata = data; - alias->d_flags ^= DCACHE_NFSFS_RENAMED; + alias->d_flags |= DCACHE_NFSFS_RENAMED; ret = 1; } spin_unlock(&alias->d_lock);