summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQu Wenruo <wqu@suse.com>2017-10-26 15:28:37 +0800
committerDavid Sterba <dsterba@suse.com>2017-11-14 15:59:00 +0100
commitda2659b090af383dea6dec71d2d4e128c643d455 (patch)
treef0b8ee3daf7906de8f57fae8da5d457fb2cb0a5c
parentfec462240d7722a5952969a1b4c39ce719661ed7 (diff)
btrfs-progs: convert: Open the fs readonly for rollback
For rollback, we only needs to open the fs to check if it meets the condition to rollback. And this RW read makes us failed to rollback btrfs with v2 space cache. In fact, we don't even start a transaction during rollback. So open the fs RO for rollback, to avoid v2 space cache problem. Reported-by: Gu Jinxiang <gujx@cn.fujitsu.com> Reviewed-by: Gu JinXiang <gujx@cn.fujitsu.com> Tested-by: Gu JinXiang <gujx@cn.fujitsu.com> Signed-off-by: Qu Wenruo <wqu@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--convert/main.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/convert/main.c b/convert/main.c
index 67616c4b..af285531 100644
--- a/convert/main.c
+++ b/convert/main.c
@@ -1529,7 +1529,13 @@ static int do_rollback(const char *devname)
goto free_mem;
}
fsize = lseek(fd, 0, SEEK_END);
- root = open_ctree_fd(fd, devname, 0, OPEN_CTREE_WRITES);
+
+ /*
+ * For rollback, we don't really need to write anything so open it
+ * read-only. The write part will happen after we close the
+ * filesystem.
+ */
+ root = open_ctree_fd(fd, devname, 0, 0);
if (!root) {
error("unable to open ctree");
ret = -EIO;