diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-02-10 13:25:42 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-02-10 13:25:42 +0100 |
commit | f9915bfef3c64ea0b0b960dd1b999b584a7ef460 (patch) | |
tree | ec8d1c35a542e4c8e08b5a2be380b2bdef9a10d0 /fs | |
parent | b91facc367366b3f71375f337eb5997ec9ab4e69 (diff) | |
parent | acd895795d35d7c6405f20301a846d16998795ec (diff) | |
download | linux-stable-f9915bfef3c64ea0b0b960dd1b999b584a7ef460.tar.gz linux-stable-f9915bfef3c64ea0b0b960dd1b999b584a7ef460.tar.bz2 linux-stable-f9915bfef3c64ea0b0b960dd1b999b584a7ef460.zip |
Merge branches 'tracing/ftrace' and 'tracing/urgent' into tracing/core
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/ctree.c | 3 | ||||
-rw-r--r-- | fs/btrfs/locking.c | 22 | ||||
-rw-r--r-- | fs/btrfs/locking.h | 2 | ||||
-rw-r--r-- | fs/lockd/svclock.c | 6 |
4 files changed, 6 insertions, 27 deletions
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 551177c0011a..35443cc4b9a9 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -1530,8 +1530,7 @@ again: * for higher level blocks, try not to allocate blocks * with the block and the parent locks held. */ - if (level > 0 && !prealloc_block.objectid && - btrfs_path_lock_waiting(p, level)) { + if (level > 0 && !prealloc_block.objectid) { u32 size = b->len; u64 hint = b->start; diff --git a/fs/btrfs/locking.c b/fs/btrfs/locking.c index 68fd9ccf1805..9ebe9385129b 100644 --- a/fs/btrfs/locking.c +++ b/fs/btrfs/locking.c @@ -236,25 +236,3 @@ int btrfs_tree_locked(struct extent_buffer *eb) return test_bit(EXTENT_BUFFER_BLOCKING, &eb->bflags) || spin_is_locked(&eb->lock); } - -/* - * btrfs_search_slot uses this to decide if it should drop its locks - * before doing something expensive like allocating free blocks for cow. - */ -int btrfs_path_lock_waiting(struct btrfs_path *path, int level) -{ - int i; - struct extent_buffer *eb; - - for (i = level; i <= level + 1 && i < BTRFS_MAX_LEVEL; i++) { - eb = path->nodes[i]; - if (!eb) - break; - smp_mb(); - if (spin_is_contended(&eb->lock) || - waitqueue_active(&eb->lock_wq)) - return 1; - } - return 0; -} - diff --git a/fs/btrfs/locking.h b/fs/btrfs/locking.h index d92e707f5870..6bb0afbff928 100644 --- a/fs/btrfs/locking.h +++ b/fs/btrfs/locking.h @@ -26,8 +26,6 @@ int btrfs_tree_locked(struct extent_buffer *eb); int btrfs_try_tree_lock(struct extent_buffer *eb); int btrfs_try_spin_lock(struct extent_buffer *eb); -int btrfs_path_lock_waiting(struct btrfs_path *path, int level); - void btrfs_set_lock_blocking(struct extent_buffer *eb); void btrfs_clear_lock_blocking(struct extent_buffer *eb); #endif diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c index 6063a8e4b9f3..763b78a6e9de 100644 --- a/fs/lockd/svclock.c +++ b/fs/lockd/svclock.c @@ -427,7 +427,7 @@ nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file, goto out; case -EAGAIN: ret = nlm_lck_denied; - goto out; + break; case FILE_LOCK_DEFERRED: if (wait) break; @@ -443,6 +443,10 @@ nlmsvc_lock(struct svc_rqst *rqstp, struct nlm_file *file, goto out; } + ret = nlm_lck_denied; + if (!wait) + goto out; + ret = nlm_lck_blocked; /* Append to list of blocked */ |