mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git
synced 2024-11-15 16:24:21 +08:00
btrfs-progs: convert: Convert ext inode flags to btrfs inode flags
Before this patch, btrfs-convert never copy ext* inode flags to corresponding btrfs inode flags. This makes common flags like APPEND/SYNC/SYNCDIR/IMMUTABLE not copied to btrfs inode. This patch introduces ext2_convert_inode_flags() function to handle the convert, so btrfs-convert can copy as many inode flags as possible. Reported-by: Lakshmipathi.G <lakshmipathi.g@gmail.com> Signed-off-by: Qu Wenruo <quwenruo@cn.fujitsu.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
5bd4016363
commit
8570a0c3a4
@ -2201,6 +2201,31 @@ static int ext2_check_state(struct btrfs_convert_context *cctx)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* EXT2_*_FL to BTRFS_INODE_FLAG_* stringification helper */
|
||||||
|
#define COPY_ONE_EXT2_FLAG(flags, ext2_inode, name) ({ \
|
||||||
|
if (ext2_inode->i_flags & EXT2_##name##_FL) \
|
||||||
|
flags |= BTRFS_INODE_##name; \
|
||||||
|
})
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert EXT2_*_FL to corresponding BTRFS_INODE_* flags
|
||||||
|
*
|
||||||
|
* Only a subset of EXT_*_FL is supported in btrfs.
|
||||||
|
*/
|
||||||
|
static void ext2_convert_inode_flags(struct btrfs_inode_item *dst,
|
||||||
|
struct ext2_inode *src)
|
||||||
|
{
|
||||||
|
u64 flags = 0;
|
||||||
|
|
||||||
|
COPY_ONE_EXT2_FLAG(flags, src, APPEND);
|
||||||
|
COPY_ONE_EXT2_FLAG(flags, src, SYNC);
|
||||||
|
COPY_ONE_EXT2_FLAG(flags, src, IMMUTABLE);
|
||||||
|
COPY_ONE_EXT2_FLAG(flags, src, NODUMP);
|
||||||
|
COPY_ONE_EXT2_FLAG(flags, src, NOATIME);
|
||||||
|
COPY_ONE_EXT2_FLAG(flags, src, DIRSYNC);
|
||||||
|
btrfs_set_stack_inode_flags(dst, flags);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* copy a single inode. do all the required works, such as cloning
|
* copy a single inode. do all the required works, such as cloning
|
||||||
* inode item, creating file extents and creating directory entries.
|
* inode item, creating file extents and creating directory entries.
|
||||||
@ -2223,6 +2248,7 @@ static int ext2_copy_single_inode(struct btrfs_trans_handle *trans,
|
|||||||
BTRFS_INODE_NODATASUM;
|
BTRFS_INODE_NODATASUM;
|
||||||
btrfs_set_stack_inode_flags(&btrfs_inode, flags);
|
btrfs_set_stack_inode_flags(&btrfs_inode, flags);
|
||||||
}
|
}
|
||||||
|
ext2_convert_inode_flags(&btrfs_inode, ext2_inode);
|
||||||
|
|
||||||
switch (ext2_inode->i_mode & S_IFMT) {
|
switch (ext2_inode->i_mode & S_IFMT) {
|
||||||
case S_IFREG:
|
case S_IFREG:
|
||||||
|
Loading…
Reference in New Issue
Block a user