We don't need a helper for every incompatibility bit, let's do it in a
more generic way as suggested below [modulo syntax errors]:
On Fri, Jul 20, 2012 at 05:16:41PM -0500, Mitch Harder wrote:
> --- a/fs/btrfs/ctree.h
> +++ b/fs/btrfs/ctree.h
> @@ -3103,6 +3103,19 @@ void __btrfs_abort_transaction(struct btrfs_trans_handle *trans,
> struct btrfs_root *root, const char *function,
> unsigned int line, int errno);
>
> +static inline void btrfs_chk_lzo_incompat(struct btrfs_root *root)
> +{
btrfs_set_fs_incompat(struct btrfs_fs_info *fs_info, u64 flag) {
> + struct btrfs_super_block *disk_super;
> + u64 features;
> +
> + disk_super = root->fs_info->super_copy;
disk_super = fs_info->super_copy;
> + features = btrfs_super_incompat_flags(disk_super);
> + if (!(features & BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO)) {
> + features |= BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO;
if (!(features & flag)) {
features |= BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO;
> + btrfs_set_super_incompat_flags(disk_super, features);
> + }
> +}
> +
> #define btrfs_abort_transaction(trans, root, errno) \
> do { \
> __btrfs_abort_transaction(trans, root, __func__, \
> diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
> index 17facea..d5fd69e 100644
> --- a/fs/btrfs/ioctl.c
> +++ b/fs/btrfs/ioctl.c
> @@ -1042,11 +1042,9 @@ int btrfs_defrag_file(struct inode *inode, struct file *file,
> u64 newer_than, unsigned long max_to_defrag)
> {
> struct btrfs_root *root = BTRFS_I(inode)->root;
> - struct btrfs_super_block *disk_super;
> struct file_ra_state *ra = NULL;
> unsigned long last_index;
> u64 isize = i_size_read(inode);
> - u64 features;
> u64 last_len = 0;
> u64 skip = 0;
> u64 defrag_end = 0;
> @@ -1233,11 +1231,8 @@ int btrfs_defrag_file(struct inode *inode, struct file *file,
> mutex_unlock(&inode->i_mutex);
> }
>
> - disk_super = root->fs_info->super_copy;
> - features = btrfs_super_incompat_flags(disk_super);
> if (range->compress_type == BTRFS_COMPRESS_LZO) {
> - features |= BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO;
> - btrfs_set_super_incompat_flags(disk_super, features);
> + btrfs_chk_lzo_incompat(root);
btrfs_set_fs_incompat(fs_info, BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO);
> }
>
> ret = defrag_count;
> diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
> index 26da344..32c2bd9 100644
> --- a/fs/btrfs/super.c
> +++ b/fs/btrfs/super.c
> @@ -401,6 +401,7 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)
> compress_type = "lzo";
> info->compress_type = BTRFS_COMPRESS_LZO;
> btrfs_set_opt(info->mount_opt, COMPRESS);
> + btrfs_chk_lzo_incompat(root);
btrfs_set_fs_incompat(fs_info, BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO);
> } else if (strncmp(args[0].from, "no", 2) == 0) {
> compress_type = "no";
> info->compress_type = BTRFS_COMPRESS_NONE;
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html