btrfs: copy fsid to super_block s_uuid
authorAnand Jain <anand.jain@oracle.com>
Tue, 1 Aug 2017 10:35:08 +0000 (18:35 +0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 30 Oct 2017 11:27:55 +0000 (12:27 +0100)
We didn't copy fsid to struct super_block.s_uuid so Overlay disables
index feature with btrfs as the lower FS.

kernel: overlayfs: fs on '/lower' does not support file handles, falling back to index=off.

Fix this by publishing the fsid through struct super_block.s_uuid.

[ dsterba: I think that setting s_uuid is the last missing bit. Overlay
  needs the file handle encoding support from the lower filesystem, which
  is supported. Filling the whole filesystem id is correct, the subvolume
  id is encoded in the file handle buffer from inside btrfs_encode_fh. ]

Signed-off-by: Anand Jain <anand.jain@oracle.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/disk-io.c

index dfdab849037b70887e9a61d5b1044a313658d437..0a98567f8cfc742288be505d28aa02165c026932 100644 (file)
@@ -2901,6 +2901,7 @@ int open_ctree(struct super_block *sb,
 
        sb->s_blocksize = sectorsize;
        sb->s_blocksize_bits = blksize_bits(sectorsize);
+       memcpy(&sb->s_uuid, fs_info->fsid, BTRFS_FSID_SIZE);
 
        mutex_lock(&fs_info->chunk_mutex);
        ret = btrfs_read_sys_array(fs_info);