All of lore.kernel.org
 help / color / mirror / Atom feed
* Btrfs and data nocow for per inode basis
@ 2012-06-10  6:47 Goffredo Baroncelli
  2012-06-12 17:41 ` Btrfs and data nocow " Goffredo Baroncelli
  0 siblings, 1 reply; 10+ messages in thread
From: Goffredo Baroncelli @ 2012-06-10  6:47 UTC (permalink / raw)
  To: linux-btrfs

Hi all,

which is the supposed corrected way to set the file flag FS_NOCOW_FL ? I
know that exists the associated ioctl FS_IOC_SETFLAGS; which I didn't
found is an user-space tool to use to set the flags.

I am missing something ?

Thanks in advance
G.Baroncelli




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

* Re: Btrfs and data nocow per inode basis
  2012-06-10  6:47 Btrfs and data nocow for per inode basis Goffredo Baroncelli
@ 2012-06-12 17:41 ` Goffredo Baroncelli
  2012-06-12 18:32   ` Ted Ts'o
  0 siblings, 1 reply; 10+ messages in thread
From: Goffredo Baroncelli @ 2012-06-12 17:41 UTC (permalink / raw)
  To: kreijack; +Cc: linux-btrfs, Liu Bo, Ted Ts'o

On 06/10/2012 08:47 AM, Goffredo Baroncelli wrote:
> Hi all,
> 
> which is the supposed corrected way to set the file flag FS_NOCOW_FL ? I
> know that exists the associated ioctl FS_IOC_SETFLAGS; which I didn't
> found is an user-space tool to use to set the flags.
> 
> I am missing something ?

After a bit of googling I found a Liu Bo patches which add the ability
to set the NOCOW flags to a btrfs file.[1]

However it seems that it was not present in the current (v1.42.3)
e2fsprogs suite.

There is any reason which stopped the adoption of this patch ?
Does make sense to add the chattr/lsattr capability to the btrfs tool (I
am thinking about new commands like "btrfs filesystem chattr"/"btrfs
filesystem lsattr") ?

G.Baroncelli

[1] http://patchwork.ozlabs.org/patch/91697/


> 
> Thanks in advance
> G.Baroncelli
> 
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> .
> 


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

* Re: Btrfs and data nocow per inode basis
  2012-06-12 17:41 ` Btrfs and data nocow " Goffredo Baroncelli
@ 2012-06-12 18:32   ` Ted Ts'o
  2012-06-12 19:15     ` Ted Ts'o
  0 siblings, 1 reply; 10+ messages in thread
From: Ted Ts'o @ 2012-06-12 18:32 UTC (permalink / raw)
  To: kreijack; +Cc: linux-btrfs, Liu Bo

On Tue, Jun 12, 2012 at 07:41:25PM +0200, Goffredo Baroncelli wrote:
> 
> After a bit of googling I found a Liu Bo patches which add the ability
> to set the NOCOW flags to a btrfs file.[1]
> 
> However it seems that it was not present in the current (v1.42.3)
> e2fsprogs suite.
> 
> There is any reason which stopped the adoption of this patch ?

It's a textbook example of how *not* to try to get a patch into
e2fsprogs.

1) It's a huge patch that makes a much larger set of changes than what
is necessary to achieve the desired results (the EXT2_*_FL to
FS_*_FL flags is hugely gratuitous)

2) Because of all of the noise in the patch, something that was
completely missed was that the patch did ***NOT*** allow the setting
of the NOCOW flag.

My apologies for not having the time send a reply back.  It fell
between the cracks.

> Does make sense to add the chattr/lsattr capability to the btrfs tool (I
> am thinking about new commands like "btrfs filesystem chattr"/"btrfs
> filesystem lsattr") ?

The lsattr/chattr commands and the flags were always originally been
defined for the ext2/3/4 file systems.  It was the reiserfs filesystem
that just glommed onto that interface and hijacked the flags
definition into a file system independent interface.  At this point
enough other file systems have used those ioctl's and the flags
interface that I *do* try to coordinate with other file systems.

This means that I coordinate flag assignments and try not to use flag
bits in ext2/3/4 that have been made visible by other file systems
(even though the 32-bit flag space is getting pretty crowded, and
there's not much space left).  And I will add support for flags into
lsattr/chattr that are not supported by ext2/3/4.

But a massive change which tries to do a global rename of EXT2_*_FL to
FS_*_FL in e2fsprogs for no good reason?  That just adds code churn
and it makes it harder to validate that the patch is correct, for no
good user-visible benefit.

Regards,

					- Ted

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

* Re: Btrfs and data nocow per inode basis
  2012-06-12 18:32   ` Ted Ts'o
@ 2012-06-12 19:15     ` Ted Ts'o
  2012-06-12 20:44       ` Chris Mason
  0 siblings, 1 reply; 10+ messages in thread
From: Ted Ts'o @ 2012-06-12 19:15 UTC (permalink / raw)
  To: kreijack; +Cc: linux-btrfs, Liu Bo

It appears the NOCOW_FL flag is currently a no-op in the 3.2 kernel?

<tytso.root@tytso-glaptop.cam.corp.google.com> {/mnt}  
2062# grep /mnt /proc/mounts 
/dev/mapper/funarg-btrfs /mnt btrfs rw,relatime,space_cache 0 0
<tytso.root@tytso-glaptop.cam.corp.google.com> {/mnt}  
2063# sync ; filefrag -v a
Filesystem type is: 9123683e
File size of a is 32768 (8 blocks, blocksize 4096)
 ext logical physical expected length flags
   0       0     3096               8 eof
a: 1 extent found
<tytso.root@tytso-glaptop.cam.corp.google.com> {/mnt}  
2064# dd if=/dev/zero of=a bs=32k conv=notrunc,nocreat count=1 
1+0 records in
1+0 records out
32768 bytes (33 kB) copied, 0.000119266 s, 275 MB/s
<tytso.root@tytso-glaptop.cam.corp.google.com> {/mnt}  
2065# sync ; filefrag -v a
Filesystem type is: 9123683e
File size of a is 32768 (8 blocks, blocksize 4096)
 ext logical physical expected length flags
   0       0     3088               8 eof
a: 1 extent found
<tytso.root@tytso-glaptop.cam.corp.google.com> {/mnt}  
2066# lsattr a
---------------C a

I've attached the patch which I was going to commit, but when I tested
it, it appears the flag is being set and displayed correctly, but
btrfs doesn't appear to be honoring it.

Anyway want to explain what's going on?

						- Ted

diff --git a/lib/e2p/pf.c b/lib/e2p/pf.c
index f03193c..69181e7 100644
--- a/lib/e2p/pf.c
+++ b/lib/e2p/pf.c
@@ -49,6 +49,7 @@ static struct flags_name flags_array[] = {
 	{ EXT2_TOPDIR_FL, "T", "Top_of_Directory_Hierarchies" },
 	{ EXT4_EXTENTS_FL, "e", "Extents" },
 	{ EXT4_HUGE_FILE_FL, "h", "Huge_file" },
+	{ FS_NOCOW_FL, "C", "Huge_file" },
 	{ 0, NULL, NULL }
 };
 
diff --git a/lib/ext2fs/ext2_fs.h b/lib/ext2fs/ext2_fs.h
index f46a1a9..fb3f7cc 100644
--- a/lib/ext2fs/ext2_fs.h
+++ b/lib/ext2fs/ext2_fs.h
@@ -301,6 +301,7 @@ struct ext2_dx_countlimit {
 #define EXT4_EXTENTS_FL 		0x00080000 /* Inode uses extents */
 #define EXT4_EA_INODE_FL	        0x00200000 /* Inode used for large EA */
 /* EXT4_EOFBLOCKS_FL 0x00400000 was here */
+#define FS_NOCOW_FL			0x00800000 /* Do not cow file */
 #define EXT4_SNAPFILE_FL		0x01000000  /* Inode is a snapshot */
 #define EXT4_SNAPFILE_DELETED_FL	0x04000000  /* Snapshot is being deleted */
 #define EXT4_SNAPFILE_SHRUNK_FL		0x08000000  /* Snapshot shrink has completed */
diff --git a/misc/chattr.1.in b/misc/chattr.1.in
index 92f6d70..18b44bd 100644
--- a/misc/chattr.1.in
+++ b/misc/chattr.1.in
@@ -64,6 +64,10 @@ this file compresses data before storing them on the disk.  Note: please
 make sure to read the bugs and limitations section at the end of this
 document.
 .PP
+A file with the 'C' attribute set will not be subject to copy-on-write
+updates.  This flag is only supported on file systems which perform
+copy-on-write, obviously.
+.PP
 When a directory with the `D' attribute set is modified,
 the changes are written synchronously on the disk; this is equivalent to
 the `dirsync' mount option applied to a subset of the files.
diff --git a/misc/chattr.c b/misc/chattr.c
index 8a2d61f..141ea6e 100644
--- a/misc/chattr.c
+++ b/misc/chattr.c
@@ -107,6 +107,7 @@ static const struct flags_char flags_array[] = {
 	{ EXT2_UNRM_FL, 'u' },
 	{ EXT2_NOTAIL_FL, 't' },
 	{ EXT2_TOPDIR_FL, 'T' },
+	{ FS_NOCOW_FL, 'C' },
 	{ 0, 0 }
 };
 

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

* Re: Btrfs and data nocow per inode basis
  2012-06-12 19:15     ` Ted Ts'o
@ 2012-06-12 20:44       ` Chris Mason
  2012-06-12 21:02         ` Goffredo Baroncelli
                           ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Chris Mason @ 2012-06-12 20:44 UTC (permalink / raw)
  To: Ted Ts'o; +Cc: kreijack, linux-btrfs, Liu Bo

On Tue, Jun 12, 2012 at 01:15:27PM -0600, Ted Ts'o wrote:
> It appears the NOCOW_FL flag is currently a no-op in the 3.2 kernel?

It's not a noop, but it is only setting the NODATACOW flag.  It needs to
set the nodatasum flag as well, just like the mount -o nodatacow mount
option does.

I'll fix this up on the kernel side, thanks Ted.

-chris

> 
> <tytso.root@tytso-glaptop.cam.corp.google.com> {/mnt}  
> 2062# grep /mnt /proc/mounts 
> /dev/mapper/funarg-btrfs /mnt btrfs rw,relatime,space_cache 0 0
> <tytso.root@tytso-glaptop.cam.corp.google.com> {/mnt}  
> 2063# sync ; filefrag -v a
> Filesystem type is: 9123683e
> File size of a is 32768 (8 blocks, blocksize 4096)
>  ext logical physical expected length flags
>    0       0     3096               8 eof
> a: 1 extent found
> <tytso.root@tytso-glaptop.cam.corp.google.com> {/mnt}  
> 2064# dd if=/dev/zero of=a bs=32k conv=notrunc,nocreat count=1 
> 1+0 records in
> 1+0 records out
> 32768 bytes (33 kB) copied, 0.000119266 s, 275 MB/s
> <tytso.root@tytso-glaptop.cam.corp.google.com> {/mnt}  
> 2065# sync ; filefrag -v a
> Filesystem type is: 9123683e
> File size of a is 32768 (8 blocks, blocksize 4096)
>  ext logical physical expected length flags
>    0       0     3088               8 eof
> a: 1 extent found
> <tytso.root@tytso-glaptop.cam.corp.google.com> {/mnt}  
> 2066# lsattr a
> ---------------C a
> 
> I've attached the patch which I was going to commit, but when I tested
> it, it appears the flag is being set and displayed correctly, but
> btrfs doesn't appear to be honoring it.
> 
> Anyway want to explain what's going on?
> 
> 						- Ted
> 
> diff --git a/lib/e2p/pf.c b/lib/e2p/pf.c
> index f03193c..69181e7 100644
> --- a/lib/e2p/pf.c
> +++ b/lib/e2p/pf.c
> @@ -49,6 +49,7 @@ static struct flags_name flags_array[] = {
>  	{ EXT2_TOPDIR_FL, "T", "Top_of_Directory_Hierarchies" },
>  	{ EXT4_EXTENTS_FL, "e", "Extents" },
>  	{ EXT4_HUGE_FILE_FL, "h", "Huge_file" },
> +	{ FS_NOCOW_FL, "C", "Huge_file" },
>  	{ 0, NULL, NULL }
>  };
>  
> diff --git a/lib/ext2fs/ext2_fs.h b/lib/ext2fs/ext2_fs.h
> index f46a1a9..fb3f7cc 100644
> --- a/lib/ext2fs/ext2_fs.h
> +++ b/lib/ext2fs/ext2_fs.h
> @@ -301,6 +301,7 @@ struct ext2_dx_countlimit {
>  #define EXT4_EXTENTS_FL 		0x00080000 /* Inode uses extents */
>  #define EXT4_EA_INODE_FL	        0x00200000 /* Inode used for large EA */
>  /* EXT4_EOFBLOCKS_FL 0x00400000 was here */
> +#define FS_NOCOW_FL			0x00800000 /* Do not cow file */
>  #define EXT4_SNAPFILE_FL		0x01000000  /* Inode is a snapshot */
>  #define EXT4_SNAPFILE_DELETED_FL	0x04000000  /* Snapshot is being deleted */
>  #define EXT4_SNAPFILE_SHRUNK_FL		0x08000000  /* Snapshot shrink has completed */
> diff --git a/misc/chattr.1.in b/misc/chattr.1.in
> index 92f6d70..18b44bd 100644
> --- a/misc/chattr.1.in
> +++ b/misc/chattr.1.in
> @@ -64,6 +64,10 @@ this file compresses data before storing them on the disk.  Note: please
>  make sure to read the bugs and limitations section at the end of this
>  document.
>  .PP
> +A file with the 'C' attribute set will not be subject to copy-on-write
> +updates.  This flag is only supported on file systems which perform
> +copy-on-write, obviously.
> +.PP
>  When a directory with the `D' attribute set is modified,
>  the changes are written synchronously on the disk; this is equivalent to
>  the `dirsync' mount option applied to a subset of the files.
> diff --git a/misc/chattr.c b/misc/chattr.c
> index 8a2d61f..141ea6e 100644
> --- a/misc/chattr.c
> +++ b/misc/chattr.c
> @@ -107,6 +107,7 @@ static const struct flags_char flags_array[] = {
>  	{ EXT2_UNRM_FL, 'u' },
>  	{ EXT2_NOTAIL_FL, 't' },
>  	{ EXT2_TOPDIR_FL, 'T' },
> +	{ FS_NOCOW_FL, 'C' },
>  	{ 0, 0 }
>  };
>  
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: Btrfs and data nocow per inode basis
  2012-06-12 20:44       ` Chris Mason
@ 2012-06-12 21:02         ` Goffredo Baroncelli
  2012-06-12 21:10         ` Ted Ts'o
  2012-06-12 22:08         ` David Sterba
  2 siblings, 0 replies; 10+ messages in thread
From: Goffredo Baroncelli @ 2012-06-12 21:02 UTC (permalink / raw)
  To: Chris Mason; +Cc: Ted Ts'o, linux-btrfs, Liu Bo

On 06/12/2012 10:44 PM, Chris Mason wrote:
> On Tue, Jun 12, 2012 at 01:15:27PM -0600, Ted Ts'o wrote:
>> It appears the NOCOW_FL flag is currently a no-op in the 3.2 kernel?
> 
> It's not a noop, but it is only setting the NODATACOW flag.  It needs to
> set the nodatasum flag as well, just like the mount -o nodatacow mount
> option does.
> 
> I'll fix this up on the kernel side, thanks Ted.

Yes, if a filesystem is mounted with "nodatasum" options, the 'C' flags
works correctly.

So the solution it seems to set the BTRFS inode both as NODATASUM and
NODATACOW when chattr sets it as NOCOW.
Does make sense to allow to set NODATASUM alone ?


> 
> -chris
> 
>>
>> <tytso.root@tytso-glaptop.cam.corp.google.com> {/mnt}  
>> 2062# grep /mnt /proc/mounts 
>> /dev/mapper/funarg-btrfs /mnt btrfs rw,relatime,space_cache 0 0
>> <tytso.root@tytso-glaptop.cam.corp.google.com> {/mnt}  
>> 2063# sync ; filefrag -v a
>> Filesystem type is: 9123683e
>> File size of a is 32768 (8 blocks, blocksize 4096)
>>  ext logical physical expected length flags
>>    0       0     3096               8 eof
>> a: 1 extent found
>> <tytso.root@tytso-glaptop.cam.corp.google.com> {/mnt}  
>> 2064# dd if=/dev/zero of=a bs=32k conv=notrunc,nocreat count=1 
>> 1+0 records in
>> 1+0 records out
>> 32768 bytes (33 kB) copied, 0.000119266 s, 275 MB/s
>> <tytso.root@tytso-glaptop.cam.corp.google.com> {/mnt}  
>> 2065# sync ; filefrag -v a
>> Filesystem type is: 9123683e
>> File size of a is 32768 (8 blocks, blocksize 4096)
>>  ext logical physical expected length flags
>>    0       0     3088               8 eof
>> a: 1 extent found
>> <tytso.root@tytso-glaptop.cam.corp.google.com> {/mnt}  
>> 2066# lsattr a
>> ---------------C a
>>
>> I've attached the patch which I was going to commit, but when I tested
>> it, it appears the flag is being set and displayed correctly, but
>> btrfs doesn't appear to be honoring it.
>>
>> Anyway want to explain what's going on?
>>
>> 						- Ted
>>
>> diff --git a/lib/e2p/pf.c b/lib/e2p/pf.c
>> index f03193c..69181e7 100644
>> --- a/lib/e2p/pf.c
>> +++ b/lib/e2p/pf.c
>> @@ -49,6 +49,7 @@ static struct flags_name flags_array[] = {
>>  	{ EXT2_TOPDIR_FL, "T", "Top_of_Directory_Hierarchies" },
>>  	{ EXT4_EXTENTS_FL, "e", "Extents" },
>>  	{ EXT4_HUGE_FILE_FL, "h", "Huge_file" },
>> +	{ FS_NOCOW_FL, "C", "Huge_file" },
>>  	{ 0, NULL, NULL }
>>  };
>>  
>> diff --git a/lib/ext2fs/ext2_fs.h b/lib/ext2fs/ext2_fs.h
>> index f46a1a9..fb3f7cc 100644
>> --- a/lib/ext2fs/ext2_fs.h
>> +++ b/lib/ext2fs/ext2_fs.h
>> @@ -301,6 +301,7 @@ struct ext2_dx_countlimit {
>>  #define EXT4_EXTENTS_FL 		0x00080000 /* Inode uses extents */
>>  #define EXT4_EA_INODE_FL	        0x00200000 /* Inode used for large EA */
>>  /* EXT4_EOFBLOCKS_FL 0x00400000 was here */
>> +#define FS_NOCOW_FL			0x00800000 /* Do not cow file */
>>  #define EXT4_SNAPFILE_FL		0x01000000  /* Inode is a snapshot */
>>  #define EXT4_SNAPFILE_DELETED_FL	0x04000000  /* Snapshot is being deleted */
>>  #define EXT4_SNAPFILE_SHRUNK_FL		0x08000000  /* Snapshot shrink has completed */
>> diff --git a/misc/chattr.1.in b/misc/chattr.1.in
>> index 92f6d70..18b44bd 100644
>> --- a/misc/chattr.1.in
>> +++ b/misc/chattr.1.in
>> @@ -64,6 +64,10 @@ this file compresses data before storing them on the disk.  Note: please
>>  make sure to read the bugs and limitations section at the end of this
>>  document.
>>  .PP
>> +A file with the 'C' attribute set will not be subject to copy-on-write
>> +updates.  This flag is only supported on file systems which perform
>> +copy-on-write, obviously.
>> +.PP
>>  When a directory with the `D' attribute set is modified,
>>  the changes are written synchronously on the disk; this is equivalent to
>>  the `dirsync' mount option applied to a subset of the files.
>> diff --git a/misc/chattr.c b/misc/chattr.c
>> index 8a2d61f..141ea6e 100644
>> --- a/misc/chattr.c
>> +++ b/misc/chattr.c
>> @@ -107,6 +107,7 @@ static const struct flags_char flags_array[] = {
>>  	{ EXT2_UNRM_FL, 'u' },
>>  	{ EXT2_NOTAIL_FL, 't' },
>>  	{ EXT2_TOPDIR_FL, 'T' },
>> +	{ FS_NOCOW_FL, 'C' },
>>  	{ 0, 0 }
>>  };
>>  
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> .
> 


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

* Re: Btrfs and data nocow per inode basis
  2012-06-12 20:44       ` Chris Mason
  2012-06-12 21:02         ` Goffredo Baroncelli
@ 2012-06-12 21:10         ` Ted Ts'o
  2012-06-12 22:19           ` Ted Ts'o
  2012-06-13  7:42           ` Liu Bo
  2012-06-12 22:08         ` David Sterba
  2 siblings, 2 replies; 10+ messages in thread
From: Ted Ts'o @ 2012-06-12 21:10 UTC (permalink / raw)
  To: Chris Mason, kreijack, linux-btrfs, Liu Bo

On Tue, Jun 12, 2012 at 04:44:23PM -0400, Chris Mason wrote:
> On Tue, Jun 12, 2012 at 01:15:27PM -0600, Ted Ts'o wrote:
> > It appears the NOCOW_FL flag is currently a no-op in the 3.2 kernel?
> 
> It's not a noop, but it is only setting the NODATACOW flag.  It needs to
> set the nodatasum flag as well, just like the mount -o nodatacow mount
> option does.
> 
> I'll fix this up on the kernel side, thanks Ted.

Here's the final patch to e2fsprogs that will be going into 1.42.4:

commit 5a23c93aeb65d61892a47f8f27bffad38f4759ea
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Tue Jun 12 17:09:39 2012 -0400

    lsattr, chattr: add support for btrfs's No_COW flag
    
    Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>

diff --git a/lib/e2p/pf.c b/lib/e2p/pf.c
index f03193c..e2f8ce5 100644
--- a/lib/e2p/pf.c
+++ b/lib/e2p/pf.c
@@ -49,6 +49,7 @@ static struct flags_name flags_array[] = {
 	{ EXT2_TOPDIR_FL, "T", "Top_of_Directory_Hierarchies" },
 	{ EXT4_EXTENTS_FL, "e", "Extents" },
 	{ EXT4_HUGE_FILE_FL, "h", "Huge_file" },
+	{ FS_NOCOW_FL, "C", "No_COW" },
 	{ 0, NULL, NULL }
 };
 
diff --git a/lib/ext2fs/ext2_fs.h b/lib/ext2fs/ext2_fs.h
index f46a1a9..fb3f7cc 100644
--- a/lib/ext2fs/ext2_fs.h
+++ b/lib/ext2fs/ext2_fs.h
@@ -301,6 +301,7 @@ struct ext2_dx_countlimit {
 #define EXT4_EXTENTS_FL 		0x00080000 /* Inode uses extents */
 #define EXT4_EA_INODE_FL	        0x00200000 /* Inode used for large EA */
 /* EXT4_EOFBLOCKS_FL 0x00400000 was here */
+#define FS_NOCOW_FL			0x00800000 /* Do not cow file */
 #define EXT4_SNAPFILE_FL		0x01000000  /* Inode is a snapshot */
 #define EXT4_SNAPFILE_DELETED_FL	0x04000000  /* Snapshot is being deleted */
 #define EXT4_SNAPFILE_SHRUNK_FL		0x08000000  /* Snapshot shrink has completed */
diff --git a/misc/chattr.1.in b/misc/chattr.1.in
index 92f6d70..5a57d2c 100644
--- a/misc/chattr.1.in
+++ b/misc/chattr.1.in
@@ -64,6 +64,15 @@ this file compresses data before storing them on the disk.  Note: please
 make sure to read the bugs and limitations section at the end of this
 document.
 .PP
+A file with the 'C' attribute set will not be subject to copy-on-write
+updates.  This flag is only supported on file systems which perform
+copy-on-write.  (Note: For btrfs, the 'C' flag should be only
+set on new or empty files.  If it is set on a file which already has
+data blocks, it is undefined when the blocks assigned to the file will
+be fully stable.  If the 'C' flag is set on a directory, it will have no
+effect on the directory, but new files created in that directory will
+the No_COW attribute.)
+.PP
 When a directory with the `D' attribute set is modified,
 the changes are written synchronously on the disk; this is equivalent to
 the `dirsync' mount option applied to a subset of the files.
@@ -159,8 +168,7 @@ maintained by Theodore Ts'o <tytso@alum.mit.edu>.
 .SH BUGS AND LIMITATIONS
 The `c', 's',  and `u' attributes are not honored 
 by the ext2 and ext3 filesystems as implemented in the current mainline
-Linux kernels.    These attributes may be implemented
-in future versions of the ext2 and ext3 filesystems.
+Linux kernels.
 .PP
 The `j' option is only useful if the filesystem is mounted as ext3.
 .PP
diff --git a/misc/chattr.c b/misc/chattr.c
index 8a2d61f..141ea6e 100644
--- a/misc/chattr.c
+++ b/misc/chattr.c
@@ -107,6 +107,7 @@ static const struct flags_char flags_array[] = {
 	{ EXT2_UNRM_FL, 'u' },
 	{ EXT2_NOTAIL_FL, 't' },
 	{ EXT2_TOPDIR_FL, 'T' },
+	{ FS_NOCOW_FL, 'C' },
 	{ 0, 0 }
 };
 

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

* Re: Btrfs and data nocow per inode basis
  2012-06-12 20:44       ` Chris Mason
  2012-06-12 21:02         ` Goffredo Baroncelli
  2012-06-12 21:10         ` Ted Ts'o
@ 2012-06-12 22:08         ` David Sterba
  2 siblings, 0 replies; 10+ messages in thread
From: David Sterba @ 2012-06-12 22:08 UTC (permalink / raw)
  To: Chris Mason, Ted Ts'o, kreijack, linux-btrfs, Liu Bo

On Tue, Jun 12, 2012 at 04:44:23PM -0400, Chris Mason wrote:
> On Tue, Jun 12, 2012 at 01:15:27PM -0600, Ted Ts'o wrote:
> > It appears the NOCOW_FL flag is currently a no-op in the 3.2 kernel?
> 
> It's not a noop, but it is only setting the NODATACOW flag.  It needs to
> set the nodatasum flag as well, just like the mount -o nodatacow mount
> option does.
> 
> I'll fix this up on the kernel side, thanks Ted.

Last time the nocow question popped up, I sent this workaround,

http://article.gmane.org/gmane.comp.file-systems.btrfs/17351
(whole thread http://article.gmane.org/gmane.comp.file-systems.btrfs/17351)

which now seems to be the way to go (as removing the checksums from
existing file is not that easy).

Good to see the NOCOW support going to lsattr/chattr.


david

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

* Re: Btrfs and data nocow per inode basis
  2012-06-12 21:10         ` Ted Ts'o
@ 2012-06-12 22:19           ` Ted Ts'o
  2012-06-13  7:42           ` Liu Bo
  1 sibling, 0 replies; 10+ messages in thread
From: Ted Ts'o @ 2012-06-12 22:19 UTC (permalink / raw)
  To: Chris Mason, kreijack, linux-btrfs, Liu Bo

... and e2fsprogs 1.42.4 has been released, with the No_COW lsattr and
chattr support.  It's in all of the usual places:

ftp://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v1.42.4

and

http://prdownloads.sourceforge.net/e2fsprogs/e2fsprogs-1.42.4.tar.gz

... and I've uploaded a release to debian unstable, which will
hopefully make it into testing before the upcoming stable release
(Wheezy) freeze.

You can look through the release notes at:

http://e2fsprogs.sourceforge.net/e2fsprogs-release.html#1.42.4

Regards,

						- Ted

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

* Re: Btrfs and data nocow per inode basis
  2012-06-12 21:10         ` Ted Ts'o
  2012-06-12 22:19           ` Ted Ts'o
@ 2012-06-13  7:42           ` Liu Bo
  1 sibling, 0 replies; 10+ messages in thread
From: Liu Bo @ 2012-06-13  7:42 UTC (permalink / raw)
  To: Ted Ts'o, Chris Mason; +Cc: kreijack, linux-btrfs

On 06/13/2012 05:10 AM, Ted Ts'o wrote:

> On Tue, Jun 12, 2012 at 04:44:23PM -0400, Chris Mason wrote:
>> On Tue, Jun 12, 2012 at 01:15:27PM -0600, Ted Ts'o wrote:
>>> It appears the NOCOW_FL flag is currently a no-op in the 3.2 kernel?
>> It's not a noop, but it is only setting the NODATACOW flag.  It needs to
>> set the nodatasum flag as well, just like the mount -o nodatacow mount
>> option does.
>>
>> I'll fix this up on the kernel side, thanks Ted.
> 


ohh, that's my fault...sorry.

> Here's the final patch to e2fsprogs that will be going into 1.42.4:
> 


This commit is lack of the related usage update, I'll send a patch for it :)

thanks,
liubo

> commit 5a23c93aeb65d61892a47f8f27bffad38f4759ea
> Author: Theodore Ts'o <tytso@mit.edu>
> Date:   Tue Jun 12 17:09:39 2012 -0400
> 
>     lsattr, chattr: add support for btrfs's No_COW flag
>     
>     Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
> 
> diff --git a/lib/e2p/pf.c b/lib/e2p/pf.c
> index f03193c..e2f8ce5 100644
> --- a/lib/e2p/pf.c
> +++ b/lib/e2p/pf.c
> @@ -49,6 +49,7 @@ static struct flags_name flags_array[] = {
>  	{ EXT2_TOPDIR_FL, "T", "Top_of_Directory_Hierarchies" },
>  	{ EXT4_EXTENTS_FL, "e", "Extents" },
>  	{ EXT4_HUGE_FILE_FL, "h", "Huge_file" },
> +	{ FS_NOCOW_FL, "C", "No_COW" },
>  	{ 0, NULL, NULL }
>  };
>  
> diff --git a/lib/ext2fs/ext2_fs.h b/lib/ext2fs/ext2_fs.h
> index f46a1a9..fb3f7cc 100644
> --- a/lib/ext2fs/ext2_fs.h
> +++ b/lib/ext2fs/ext2_fs.h
> @@ -301,6 +301,7 @@ struct ext2_dx_countlimit {
>  #define EXT4_EXTENTS_FL 		0x00080000 /* Inode uses extents */
>  #define EXT4_EA_INODE_FL	        0x00200000 /* Inode used for large EA */
>  /* EXT4_EOFBLOCKS_FL 0x00400000 was here */
> +#define FS_NOCOW_FL			0x00800000 /* Do not cow file */
>  #define EXT4_SNAPFILE_FL		0x01000000  /* Inode is a snapshot */
>  #define EXT4_SNAPFILE_DELETED_FL	0x04000000  /* Snapshot is being deleted */
>  #define EXT4_SNAPFILE_SHRUNK_FL		0x08000000  /* Snapshot shrink has completed */
> diff --git a/misc/chattr.1.in b/misc/chattr.1.in
> index 92f6d70..5a57d2c 100644
> --- a/misc/chattr.1.in
> +++ b/misc/chattr.1.in
> @@ -64,6 +64,15 @@ this file compresses data before storing them on the disk.  Note: please
>  make sure to read the bugs and limitations section at the end of this
>  document.
>  .PP
> +A file with the 'C' attribute set will not be subject to copy-on-write
> +updates.  This flag is only supported on file systems which perform
> +copy-on-write.  (Note: For btrfs, the 'C' flag should be only
> +set on new or empty files.  If it is set on a file which already has
> +data blocks, it is undefined when the blocks assigned to the file will
> +be fully stable.  If the 'C' flag is set on a directory, it will have no
> +effect on the directory, but new files created in that directory will
> +the No_COW attribute.)
> +.PP
>  When a directory with the `D' attribute set is modified,
>  the changes are written synchronously on the disk; this is equivalent to
>  the `dirsync' mount option applied to a subset of the files.
> @@ -159,8 +168,7 @@ maintained by Theodore Ts'o <tytso@alum.mit.edu>.
>  .SH BUGS AND LIMITATIONS
>  The `c', 's',  and `u' attributes are not honored 
>  by the ext2 and ext3 filesystems as implemented in the current mainline
> -Linux kernels.    These attributes may be implemented
> -in future versions of the ext2 and ext3 filesystems.
> +Linux kernels.
>  .PP
>  The `j' option is only useful if the filesystem is mounted as ext3.
>  .PP
> diff --git a/misc/chattr.c b/misc/chattr.c
> index 8a2d61f..141ea6e 100644
> --- a/misc/chattr.c
> +++ b/misc/chattr.c
> @@ -107,6 +107,7 @@ static const struct flags_char flags_array[] = {
>  	{ EXT2_UNRM_FL, 'u' },
>  	{ EXT2_NOTAIL_FL, 't' },
>  	{ EXT2_TOPDIR_FL, 'T' },
> +	{ FS_NOCOW_FL, 'C' },
>  	{ 0, 0 }
>  };
>  
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 



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

end of thread, other threads:[~2012-06-13  7:35 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-06-10  6:47 Btrfs and data nocow for per inode basis Goffredo Baroncelli
2012-06-12 17:41 ` Btrfs and data nocow " Goffredo Baroncelli
2012-06-12 18:32   ` Ted Ts'o
2012-06-12 19:15     ` Ted Ts'o
2012-06-12 20:44       ` Chris Mason
2012-06-12 21:02         ` Goffredo Baroncelli
2012-06-12 21:10         ` Ted Ts'o
2012-06-12 22:19           ` Ted Ts'o
2012-06-13  7:42           ` Liu Bo
2012-06-12 22:08         ` David Sterba

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.