Filipe Manana 9c3b306e1c Btrfs: race free update of commit root for ro snapshots
This is a better solution for the problem addressed in the following
commit:

    Btrfs: update commit root on snapshot creation after orphan cleanup
    (3821f348889e506efbd268cc8149e0ebfa47c4e5)

The previous solution wasn't the best because of 2 reasons:

    1) It added another full transaction commit, which is more expensive
       than just swapping the commit root with the root;

    2) If a reboot happened after the first transaction commit (the one
       that creates the snapshot) and before the second transaction commit,
       then we would end up with the same problem if a send using that
       snapshot was requested before the first transaction commit after
       the reboot.

This change addresses those 2 issues. The second issue is addressed by
switching the commit root in the dentry lookup VFS callback, which is
also called by the snapshot/subvol creation ioctl and performs orphan
cleanup if needed. Like the vfs, the ioctl locks the parent inode too,
preventing race issues between a dentry lookup and snapshot creation.

Cc: Alex Lyakas <alex.btrfs@zadarastorage.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: Chris Mason <clm@fb.com>
2014-08-21 07:55:21 -07:00
..
2014-06-06 16:08:09 -07:00
2014-06-04 16:53:53 -07:00
2014-06-12 00:18:51 -04:00
2014-01-25 03:14:05 -05:00
2014-06-06 16:08:13 -07:00
2014-06-12 00:18:51 -04:00
2014-05-06 17:39:36 -04:00
2014-08-01 02:35:51 -04:00
2014-05-06 17:31:10 -04:00
2014-02-07 16:08:57 -08:00
2014-04-01 23:19:09 -04:00
2014-07-24 06:18:12 -04:00
2014-05-06 17:39:42 -04:00
2014-04-01 23:19:08 -04:00
2014-04-01 23:19:08 -04:00
2014-04-01 23:19:09 -04:00