]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
lsattr, chattr: add support for btrfs's No_COW flag
authorTheodore Ts'o <tytso@mit.edu>
Tue, 12 Jun 2012 21:09:39 +0000 (17:09 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Tue, 12 Jun 2012 21:30:10 +0000 (17:30 -0400)
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
lib/e2p/pf.c
lib/ext2fs/ext2_fs.h
misc/chattr.1.in
misc/chattr.c

index f03193c07bbe6aade1d85e0ceb619c7ee44593dd..e2f8ce50a3855a5499482f3692d794d8198221f3 100644 (file)
@@ -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 }
 };
 
index f46a1a9635944522651f07397b413b631cc03785..fb3f7cc3cc96ae215ab4daaae8fbd64a7c7c7f25 100644 (file)
@@ -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 */
index 92f6d7031ba76801bd934975d935a8cf6d0c9606..2500561ae588471bc61e765a91903b13f09852b1 100644 (file)
@@ -27,8 +27,8 @@ existing attributes of the files; `-' causes them to be removed; and
 .PP
 The letters `acdeijstuADST' select the new attributes for the files:
 append only (a), compressed (c), no dump (d), extent format (e), immutable (i),
-data journalling (j), secure deletion (s), no tail-merging (t), 
-undeletable (u), no atime updates (A), synchronous directory updates (D), 
+data journalling (j), secure deletion (s), no tail-merging (t),
+undeletable (u), no atime updates (A), synchronous directory updates (D),
 synchronous updates (S), and top of directory hierarchy (T).
 .PP
 The following attributes are read-only, and may be listed by
@@ -55,15 +55,24 @@ not modified.  This avoids a certain amount of disk I/O for laptop
 systems.
 .PP
 A file with the `a' attribute set can only be open in append mode for writing.
-Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE 
+Only the superuser or a process possessing the CAP_LINUX_IMMUTABLE
 capability can set or clear this attribute.
 .PP
 A file with the `c' attribute set is automatically compressed on the disk
 by the kernel.  A read from this file returns uncompressed data.  A write to
-this file compresses data before storing them on the disk.  Note: please 
+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
+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.
@@ -72,9 +81,9 @@ A file with the `d' attribute set is not candidate for backup when the
 .BR dump (8)
 program is run.
 .PP
-The 'E' attribute is used by the experimental compression patches to 
+The 'E' attribute is used by the experimental compression patches to
 indicate that a compressed file has a compression error.  It may not be
-set or reset using 
+set or reset using
 .BR chattr (1),
 although it can be displayed by
 .BR lsattr (1).
@@ -84,7 +93,7 @@ the blocks on disk.  It may not be removed using
 .BR chattr (1).
 .PP
 The 'I' attribute is used by the htree code to indicate that a directory
-is being indexed using hashed trees.  It may not be set or reset using 
+is being indexed using hashed trees.  It may not be set or reset using
 .BR chattr (1),
 although it can be displayed by
 .BR lsattr (1).
@@ -105,8 +114,8 @@ A file with the `j' attribute has all of its data written to the ext3
 journal before being written to the file itself, if the filesystem is
 mounted with the "data=ordered" or "data=writeback" options.  When the
 filesystem is mounted with the "data=journal" option all file data
-is already journalled and this attribute has no effect.  
-Only the superuser or a process possessing the CAP_SYS_RESOURCE
+is already journalled and this attribute has no effect.  Only
+the superuser or a process possessing the CAP_SYS_RESOURCE
 capability can set or clear this attribute.
 .PP
 When a file with the `s' attribute set is deleted, its blocks are zeroed
@@ -117,7 +126,7 @@ When a file with the `S' attribute set is modified,
 the changes are written synchronously on the disk; this is equivalent to
 the `sync' mount option applied to a subset of the files.
 .PP
-A directory with the 'T' attribute will be deemed to be the top of 
+A directory with the 'T' attribute will be deemed to be the top of
 directory hierarchies for the purposes of the Orlov block allocator.
 This is a hint to the block allocator used by ext3 and ext4 that the
 subdirectories under this directory are not related, and thus should be
@@ -129,7 +138,7 @@ group subdirectories closer together where possible.
 .PP
 A file with the 't' attribute will not have a partial block fragment at
 the end of the file merged with other files (for those filesystems which
-support tail-merging).  This is necessary for applications such as LILO 
+support tail-merging).  This is necessary for applications such as LILO
 which read the filesystem directly, and which don't understand tail-merged
 files.  Note: As of this writing, the ext2 or ext3 filesystems do not
 (yet, except in very experimental patches) support tail-merging.
@@ -139,15 +148,15 @@ saved.  This allows the user to ask for its undeletion.  Note: please
 make sure to read the bugs and limitations section at the end of this
 document.
 .PP
-The 'X' attribute is used by the experimental compression patches to 
+The 'X' attribute is used by the experimental compression patches to
 indicate that a raw contents of a compressed file can be accessed
-directly.  It currently may not be set or reset using 
+directly.  It currently may not be set or reset using
 .BR chattr (1),
 although it can be displayed by
 .BR lsattr (1).
 .PP
-The 'Z' attribute is used by the experimental compression patches to 
-indicate a compressed file is dirty.  It may not be set or reset using 
+The 'Z' attribute is used by the experimental compression patches to
+indicate a compressed file is dirty.  It may not be set or reset using
 .BR chattr (1),
 although it can be displayed by
 .BR lsattr (1).
@@ -157,10 +166,9 @@ although it can be displayed by
 was written by Remy Card <Remy.Card@linux.org>.  It is currently being
 maintained by Theodore Ts'o <tytso@alum.mit.edu>.
 .SH BUGS AND LIMITATIONS
-The `c', 's',  and `u' attributes are not honored 
+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
index 8a2d61f9a81b632b481e461dc025ed238bf52fc8..141ea6eba0913b9c1b7d02df8fc104f0c93aa890 100644 (file)
@@ -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 }
 };