Re: [PATCH 00/21] Btrfs: restriper

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jan 09, 2012 at 03:44:18PM +0200, Ilya Dryomov wrote:
> On Mon, Jan 09, 2012 at 01:50:34AM -0500, Marios Titas wrote:
> > I tried this for many different scenarios and it seems to work pretty
> > well. I only ran into one problematic case: If you remove a device
> > from a multidevice filesystem it crashes. Here's how to reproduce it:
> > 
> > truncate -s1g /tmp/test1
> > truncate -s1g /tmp/test2
> > losetup /dev/loop1 /tmp/test1
> > losetup /dev/loop2 /tmp/test2
> > mkdir /tmp/test
> > ./mkfs.btrfs -L test -d single -m single /dev/loop1 /dev/loop2
> > mount -o noatime /dev/loop1 /tmp/test
> > ./btrfs dev del /dev/loop1 /tmp/test
> > ./btrfs fi bal start /tmp/test
> > 
> > There is no actual restriping involved but the above example does work
> > corretly under 3.1+for-linus whereas it fails with your patches.
> 
> Thanks for your testing.  The good news is that I put that BUG() there
> simply for debugging so it's nothing major:
> 
> 2520                    if (ret)
> 2521                            BUG(); /* FIXME break ? */
> 
> It used to be just a break out of the loop there, so that's the reason
> it doesn't panic with 3.1+for-linus.  I'll investigate further and fix
> this.

I force-rebased my tree, removed two other BUG_ONs along with this one.

Thanks,

		Ilya



diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index d7c5c7d..9b3d03d 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -2312,7 +2312,8 @@ static int chunk_drange_filter(struct extent_buffer *leaf,
 	int factor;
 	int i;
 
-	BUG_ON(!(bargs->flags & BTRFS_BALANCE_ARGS_DEVID));
+	if (!(bargs->flags & BTRFS_BALANCE_ARGS_DEVID))
+		return 0;
 
 	if (btrfs_chunk_type(leaf, chunk) & (BTRFS_BLOCK_GROUP_DUP |
 	     BTRFS_BLOCK_GROUP_RAID1 | BTRFS_BLOCK_GROUP_RAID10))
@@ -2355,7 +2356,8 @@ static int chunk_vrange_filter(struct extent_buffer *leaf,
 static int chunk_soft_convert_filter(u64 chunk_profile,
 				     struct btrfs_balance_args *bargs)
 {
-	BUG_ON(!(bargs->flags & BTRFS_BALANCE_ARGS_CONVERT));
+	if (!(bargs->flags & BTRFS_BALANCE_ARGS_CONVERT))
+		return 0;
 
 	chunk_profile &= BTRFS_BLOCK_GROUP_PROFILE_MASK;
 
@@ -2518,7 +2520,7 @@ again:
 		ret = btrfs_previous_item(chunk_root, path, 0,
 					  BTRFS_CHUNK_ITEM_KEY);
 		if (ret)
-			BUG(); /* FIXME break ? */
+			break;
 
 		leaf = path->nodes[0];
 		slot = path->slots[0];

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux