linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/1] LZO INCOMPAT Checking
@ 2012-07-20 22:16 Mitch Harder
  2012-07-20 22:16 ` [PATCH v3 1/1] Btrfs: Check INCOMPAT flags on remount and add helper function Mitch Harder
  0 siblings, 1 reply; 4+ messages in thread
From: Mitch Harder @ 2012-07-20 22:16 UTC (permalink / raw)
  To: linux-btrfs; +Cc: Mitch Harder

The following patch is against Josef's btrfs-next repository,
and depends on Arnd Hannemann's patch:
"Btrfs: allow mount -o remount,compress=no"

The method was based on a previous example of checking for
lzo INCOMPAT used by Li Zefan when defragmenting with explicit
compression ("btrfs: Allow to specify compress method when defrag")
in ioctl.c.

Based on feedback on IRC, the two patch version presented in the
previous version has been consolidated into a single patch, and
the helper function was converted to a static inline function.

Mitch Harder (1):
  Btrfs: Check INCOMPAT flags on remount and add helper function

 fs/btrfs/ctree.h |   13 +++++++++++++
 fs/btrfs/ioctl.c |    7 +------
 fs/btrfs/super.c |    1 +
 3 files changed, 15 insertions(+), 6 deletions(-)

-- 
1.7.8.6


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v3 1/1] Btrfs: Check INCOMPAT flags on remount and add helper function
  2012-07-20 22:16 [PATCH v3 0/1] LZO INCOMPAT Checking Mitch Harder
@ 2012-07-20 22:16 ` Mitch Harder
  2012-07-23  1:15   ` Li Zefan
  2012-07-24 12:11   ` David Sterba
  0 siblings, 2 replies; 4+ messages in thread
From: Mitch Harder @ 2012-07-20 22:16 UTC (permalink / raw)
  To: linux-btrfs; +Cc: Mitch Harder

In support of the recently added capability to remount with lzo
compression, provide a helper function to check the compression
INCOMPAT flags when remounting with lzo compression, and set
the flags if necessary.

Also, implement the new helper function when defragmenting with
explicit lzo compression.

Signed-off-by: Mitch Harder <mitch.harder@sabayonlinux.org>
---

v1->v2
- Remove extraneous formatting change.
v2->v3
- Consolidate into a single patch
- Convert helper function to a static inline function.

 fs/btrfs/ctree.h |   13 +++++++++++++
 fs/btrfs/ioctl.c |    7 +------
 fs/btrfs/super.c |    1 +
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index a0ee2f8..3a1a700 100644
--- 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)
+{
+	struct btrfs_super_block *disk_super;
+	u64 features;
+
+	disk_super = root->fs_info->super_copy;
+	features = btrfs_super_incompat_flags(disk_super);
+	if (!(features & BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO)) {
+		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);
 	}
 
 	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);
 			} else if (strncmp(args[0].from, "no", 2) == 0) {
 				compress_type = "no";
 				info->compress_type = BTRFS_COMPRESS_NONE;
-- 
1.7.8.6


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v3 1/1] Btrfs: Check INCOMPAT flags on remount and add helper function
  2012-07-20 22:16 ` [PATCH v3 1/1] Btrfs: Check INCOMPAT flags on remount and add helper function Mitch Harder
@ 2012-07-23  1:15   ` Li Zefan
  2012-07-24 12:11   ` David Sterba
  1 sibling, 0 replies; 4+ messages in thread
From: Li Zefan @ 2012-07-23  1:15 UTC (permalink / raw)
  To: Mitch Harder; +Cc: linux-btrfs

> diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h

> index a0ee2f8..3a1a700 100644
> --- 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)


Isn't btrfs_set_lzo_incompat() is a better name?

> +{
> +	struct btrfs_super_block *disk_super;
> +	u64 features;
> +
> +	disk_super = root->fs_info->super_copy;
> +	features = btrfs_super_incompat_flags(disk_super);
> +	if (!(features & BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO)) {
> +		features |= BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO;
> +		btrfs_set_super_incompat_flags(disk_super, features);
> +	}
> +}
> +



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v3 1/1] Btrfs: Check INCOMPAT flags on remount and add helper function
  2012-07-20 22:16 ` [PATCH v3 1/1] Btrfs: Check INCOMPAT flags on remount and add helper function Mitch Harder
  2012-07-23  1:15   ` Li Zefan
@ 2012-07-24 12:11   ` David Sterba
  1 sibling, 0 replies; 4+ messages in thread
From: David Sterba @ 2012-07-24 12:11 UTC (permalink / raw)
  To: Mitch Harder; +Cc: linux-btrfs

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;

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-07-24 12:11 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-20 22:16 [PATCH v3 0/1] LZO INCOMPAT Checking Mitch Harder
2012-07-20 22:16 ` [PATCH v3 1/1] Btrfs: Check INCOMPAT flags on remount and add helper function Mitch Harder
2012-07-23  1:15   ` Li Zefan
2012-07-24 12:11   ` David Sterba

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).