btrfs-progs: convert: check source file system state
authorLakshmipathi.G <Lakshmipathi.G@giis.co.in>
Thu, 15 Sep 2016 12:08:52 +0000 (14:08 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 3 Oct 2016 09:35:49 +0000 (11:35 +0200)
Signed-off-by: Lakshmipathi.G <Lakshmipathi.G@giis.co.in>
[ add doc note ]
Signed-off-by: David Sterba <dsterba@suse.com>
Documentation/btrfs-convert.asciidoc
btrfs-convert.c

index ecc157c..cbc1c73 100644 (file)
@@ -33,6 +33,9 @@ have supported data block size (ie. the same that would be valid for
 'mkfs.btrfs'). This is typically the system page size (4KiB on x86_64
 machines).
 
+NOTE: The source filesystem should be clean, you are encouraged to run the
+'fsck' tool if you're not sure.
+
 **REMOVE THE ORIGINAL FILESYSTEM METADATA**
 
 By removing the 'ext2_saved' subvolume, all metadata of the original filesystem
index 727bfea..a62d2f0 100644 (file)
@@ -2183,6 +2183,17 @@ static void ext2_copy_inode_item(struct btrfs_inode_item *dst,
        }
        memset(&dst->reserved, 0, sizeof(dst->reserved));
 }
+static int check_filesystem_state(struct btrfs_convert_context *cctx)
+{
+       ext2_filsys fs = cctx->fs_data;
+
+        if (!(fs->super->s_state & EXT2_VALID_FS))
+               return 1;
+       else if (fs->super->s_state & EXT2_ERROR_FS)
+               return 1;
+       else
+               return 0;
+}
 
 /*
  * copy a single inode. do all the required works, such as cloning
@@ -2352,6 +2363,10 @@ static int do_convert(const char *devname, int datacsum, int packing,
        ret = convert_open_fs(devname, &cctx);
        if (ret)
                goto fail;
+       ret = check_filesystem_state(&cctx);
+       if (ret)
+               warning(
+               "source filesystem is not clean, running filesystem check is recommended");
        ret = convert_read_used_space(&cctx);
        if (ret)
                goto fail;