btrfs-progs: Fix infinite loop of btrfs subvolumn sync
authorZhao Lei <zhaolei@cn.fujitsu.com>
Wed, 26 Aug 2015 14:03:36 +0000 (22:03 +0800)
committerDavid Sterba <dsterba@suse.com>
Tue, 1 Sep 2015 12:02:48 +0000 (14:02 +0200)
commit6425752ab29d86594ad1d2411b7efeb74b62d48d
tree994926da3db6a18ce8399d48d3d78a574ea92784
parent9a99d2b683c23cbfb21df0557fa185b36e9e8540
btrfs-progs: Fix infinite loop of btrfs subvolumn sync

We can trigger the bug by following operation:
  (no wait between commands 3~5)
  btrfs subvolume create /mnt/btrfs/mysubvol
  btrfs subvolume snapshot /mnt/btrfs/mysubvol /mnt/btrfs/mysubvol_snap
  btrfs subvolume delete /mnt/btrfs/mysubvol_snap
  btrfs subvolume delete /mnt/btrfs/mysubvol
  btrfs subvolume sync /mnt/btrfs
The last command will not exit.

Reason:
  List of "deleted subvolumes" are not currectly set.

  It caused by a typo of value assign, in detail:
  *ids[idx] = sh->offset;
  should be:
  (*ids)[idx] = sh->offset;
  So only first element is set to right memory address.

  If there are multiple "deleted subvolumes", program will
  keep wait.

Above typo also caused some segment fault in my test.

This patch fixed above bug.

Signed-off-by: Zhao Lei <zhaolei@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.com>
cmds-subvolume.c