| From bbb651e469d99f0088e286fdeb54acca7bb4ad4e Mon Sep 17 00:00:00 2001 |
| From: Stefan Behrens <sbehrens@giantdisaster.de> |
| Date: Mon, 19 Aug 2013 18:51:13 +0200 |
| Subject: Btrfs: don't allow the replace procedure on read only filesystems |
| |
| From: Stefan Behrens <sbehrens@giantdisaster.de> |
| |
| commit bbb651e469d99f0088e286fdeb54acca7bb4ad4e upstream. |
| |
| If you start the replace procedure on a read only filesystem, at |
| the end the procedure fails to write the updated dev_items to the |
| chunk tree. The problem is that this error is not indicated except |
| for a WARN_ON(). If the user now thinks that everything was done |
| as expected and destroys the source device (with mkfs or with a |
| hammer). The next mount fails with "failed to read chunk root" and |
| the filesystem is gone. |
| |
| This commit adds code to fail the attempt to start the replace |
| procedure if the filesystem is mounted read-only. |
| |
| Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de> |
| Signed-off-by: Josef Bacik <jbacik@fusionio.com> |
| Signed-off-by: Chris Mason <chris.mason@fusionio.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/btrfs/ioctl.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/fs/btrfs/ioctl.c |
| +++ b/fs/btrfs/ioctl.c |
| @@ -3299,6 +3299,9 @@ static long btrfs_ioctl_dev_replace(stru |
| |
| switch (p->cmd) { |
| case BTRFS_IOCTL_DEV_REPLACE_CMD_START: |
| + if (root->fs_info->sb->s_flags & MS_RDONLY) |
| + return -EROFS; |
| + |
| if (atomic_xchg( |
| &root->fs_info->mutually_exclusive_operation_running, |
| 1)) { |