Re: [PATCH v3 1/1] Btrfs: Check INCOMPAT flags on remount and add helper function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux