Btrfs: Add some conditional schedules near the alloc_mutex
authorChris Mason <chris.mason@oracle.com>
Tue, 22 Jul 2008 16:08:37 +0000 (12:08 -0400)
committerChris Mason <chris.mason@oracle.com>
Thu, 25 Sep 2008 15:04:05 +0000 (11:04 -0400)
This helps prevent stalls, especially while the snapshot cleaner is
running hard

Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/extent-tree.c

index c51cd11de2062243995c991cda0ea625ae1d72fa..72fa28236e5d4a80b3e77dd2616a7fde64b17e30 100644 (file)
@@ -937,6 +937,7 @@ int btrfs_inc_ref(struct btrfs_trans_handle *trans, struct btrfs_root *root,
        level = btrfs_header_level(buf);
        nritems = btrfs_header_nritems(buf);
        for (i = 0; i < nritems; i++) {
+               cond_resched();
                if (level == 0) {
                        u64 disk_bytenr;
                        btrfs_item_key_to_cpu(buf, &key, i);
@@ -2189,6 +2190,7 @@ static int noinline drop_leaf_ref(struct btrfs_trans_handle *trans,
 
        for (i = 0; i < nritems; i++) {
                u64 disk_bytenr;
+               cond_resched();
 
                btrfs_item_key_to_cpu(leaf, &key, i);
                if (btrfs_key_type(&key) != BTRFS_EXTENT_DATA_KEY)