From 0c3939e69d8d15ab30b3e0f9c1d0d3c668d539d1 Mon Sep 17 00:00:00 2001 From: Liu Bo Date: Thu, 14 Jun 2012 02:23:21 -0600 Subject: [PATCH] --- yaml --- r: 310839 b: refs/heads/master c: ed0eaa14981e87a1e185b61e4ef621c440e3930c h: refs/heads/master i: 310837: a5197d47227719d13bec48ca7f8fb2b89ae56bf9 310835: fdbe050fc4e2f043a386dd4dd7018aa54e3f9fa6 310831: d9ae608f8f052098fe93725d431ae4ce37bc649c v: v3 --- [refs] | 2 +- trunk/fs/btrfs/disk-io.c | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index b13a1025b2a8..1c230539180c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6e841e32b159e298debbb2cb0e9158e894fcaf05 +refs/heads/master: ed0eaa14981e87a1e185b61e4ef621c440e3930c diff --git a/trunk/fs/btrfs/disk-io.c b/trunk/fs/btrfs/disk-io.c index 63a36232788b..ffdd76bf05d4 100644 --- a/trunk/fs/btrfs/disk-io.c +++ b/trunk/fs/btrfs/disk-io.c @@ -3557,8 +3557,10 @@ static int btrfs_destroy_pinned_extent(struct btrfs_root *root, u64 start; u64 end; int ret; + bool loop = true; unpin = pinned_extents; +again: while (1) { ret = find_first_extent_bit(unpin, 0, &start, &end, EXTENT_DIRTY); @@ -3576,6 +3578,15 @@ static int btrfs_destroy_pinned_extent(struct btrfs_root *root, cond_resched(); } + if (loop) { + if (unpin == &root->fs_info->freed_extents[0]) + unpin = &root->fs_info->freed_extents[1]; + else + unpin = &root->fs_info->freed_extents[0]; + loop = false; + goto again; + } + return 0; }