E2fsprogs: add compress and cow support in chattr, lsattr
A message that is not in the archive (sent off-list or not yet received): [email protected]
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 2/2 E2fsprogs: add compress and cow support in chattr, lsattr
Modify command 'chattr' and 'lsattr' to support compress and cow.
- use 'C' to indicate NOCOW attribute.
- still use 'c' to indicate compress attribute.
Also update the man doc.
--- lib/e2p/pf.c | 1 + lib/ext2fs/ext2_fs.h | 1 + misc/chattr.1.in | 15 +++++++++++---- misc/chattr.c | 15 ++++++++++++++- 4 files changed, 27 insertions(+), 5 deletions(-)
lib/e2p/pf.c +1 -0
@@ -48,6 +48,7 @@ static struct flags_name flags_array[] = { { FS_TOPDIR_FL, "T", "Top_of_Directory_Hierarchies" }, { EXT4_EXTENTS_FL, "e", "Extents" }, { EXT4_HUGE_FILE_FL, "h", "Huge_file" }, + { FS_NOCOW_FL, "C", "NOCOW" }, { 0, NULL, NULL } };
lib/ext2fs/ext2_fs.h +1 -0
@@ -276,6 +276,7 @@ struct ext2_dx_countlimit {#define EXT4_EXTENTS_FL 0x00080000/* Inode uses extents */ #define EXT4_EA_INODE_FL 0x00200000/* Inode used for large EA */ #define EXT4_EOFBLOCKS_FL 0x00400000/* Blocks allocated beyond EOF */ +#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 */
misc/chattr.1.in +11 -4
@@ -19,17 +19,18 @@ chattr \- change file attributes on a Linux file system .B chattr changes the file attributes on a Linux file system. .PP -The format of a symbolic mode is +-=[acdeijstuADST]. +The format of a symbolic mode is +-=[acdeijstuACDST]. .PP The operator `+' causes the selected attributes to be added to the existing attributes of the files; `-' causes them to be removed; and `=' causes them to be the only attributes that the files have. .PP -The letters `acdeijstuADST' select the new attributes for the files: +The letters `acdeijstuACDST' 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), -synchronous updates (S), and top of directory hierarchy (T). +undeletable (u), no atime updates (A), no copy on write (C), +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 .BR lsattr (1)
@@ -64,6 +65,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 is marked without COW (copy on write). Note: +please make sure to read the bugs and limitations section at the end of this +document. +.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.
@@ -161,6 +166,8 @@ 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. +The `C' attribute is only used in btrfs filesystem in the current mainline +Linux kernels. .PP The `j' option is only useful if the filesystem is mounted as ext3. .PP
misc/chattr.c +14 -1
@@ -82,7 +82,7 @@ static unsigned long sf;static void usage (void ) {fprintf (stderr, -_ ("Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n" ), +_ ("Usage: %s [-RVf] [-+=AacDdeijsSuC] [-v version] files...\n" ), program_name);exit (1 ); }
@@ -106,6 +106,7 @@ static const struct flags_char flags_array[] = { { FS_UNRM_FL, 'u' }, { FS_NOTAIL_FL, 't' }, { FS_TOPDIR_FL, 'T' }, + { FS_NOCOW_FL, 'C' }, { 0, 0 } };
@@ -159,6 +160,12 @@ static int decode_arg (int * i, int argc, char ** argv) }if ((fl =get_flag (*p)) ==0 )usage (); + +if (fl ==FS_COMPR_FL ) { + af |=FS_NOCOMPR_FL ; + add =1 ; + } + rf |= fl; rem =1 ; }
@@ -168,6 +175,12 @@ static int decode_arg (int * i, int argc, char ** argv)for (p = &argv[*i][1 ]; *p; p++) {if ((fl =get_flag (*p)) ==0 )usage (); + +if (fl ==FS_COMPR_FL ) { + rf |=FS_NOCOMPR_FL ; + rem =1 ; + } + af |= fl; }break ;
Signature · 1 line
1.6.5.2
Quoted 2 lines · liubo
Modify command 'chattr' and 'lsattr' to support compress and cow.
- use 'C' to indicate NOCOW attribute.
It's kind of confusing for new users that when one sets
Quoted 1 line
chattr +C someexistingfile
on btrfs, a subsequent
Quoted 1 line
lsattr someexistingfile
will show the C flag as "not set". It takes some reading to realize that btrfs cannot change the non-COW flag on files bigger than 0 bytes.
Maybe "chattr +C" could print a warning if a file to change attributes for is > 0 bytes long?
Regards,
Lutz Vieweg
Quoted 127 lines
Signed-off-by Liu Bo <[email protected]>--- lib/e2p/pf.c | 1 + lib/ext2fs/ext2_fs.h | 1 + misc/chattr.1.in | 15 +++++++++++---- misc/chattr.c | 15 ++++++++++++++- 4 files changed, 27 insertions(+), 5 deletions(-)lib/e2p/pf.c +1
-0@@ -48,6 +48,7 @@ static struct flags_name flags_array[] = { { FS_TOPDIR_FL, "T", "Top_of_Directory_Hierarchies" }, { EXT4_EXTENTS_FL, "e", "Extents" }, { EXT4_HUGE_FILE_FL, "h", "Huge_file" }, + { FS_NOCOW_FL, "C", "NOCOW" }, { 0, NULL, NULL } };lib/ext2fs/ext2_fs.h +1
-0@@ -276,6 +276,7 @@ struct ext2_dx_countlimit {#define EXT4_EXTENTS_FL 0x00080000/* Inode uses extents */ #define EXT4_EA_INODE_FL 0x00200000/* Inode used for large EA */ #define EXT4_EOFBLOCKS_FL 0x00400000/* Blocks allocated beyond EOF */ +#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 */ misc/chattr.1.in +11
-4@@ -19,17 +19,18 @@ chattr \- change file attributes on a Linux file system .B chattr changes the file attributes on a Linux file system. .PP -The format of a symbolic mode is +-=[acdeijstuADST]. +The format of a symbolic mode is +-=[acdeijstuACDST]. .PP The operator `+' causes the selected attributes to be added to the existing attributes of the files; `-' causes them to be removed; and `=' causes them to be the only attributes that the files have. .PP -The letters `acdeijstuADST' select the new attributes for the files: +The letters `acdeijstuACDST' 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), -synchronous updates (S), and top of directory hierarchy (T). +undeletable (u), no atime updates (A), no copy on write (C), +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 .BR lsattr (1)@@ -64,6 +65,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 is marked without COW (copy on write). Note: +please make sure to read the bugs and limitations section at the end of this +document. +.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.@@ -161,6 +166,8 @@ 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. +The `C' attribute is only used in btrfs filesystem in the current mainline +Linux kernels. .PP The `j' option is only useful if the filesystem is mounted as ext3. .PPmisc/chattr.c +14
-1@@ -82,7 +82,7 @@ static unsigned long sf;static void usage (void ) {fprintf (stderr, -_ ("Usage: %s [-RVf] [-+=AacDdeijsSu] [-v version] files...\n" ), +_ ("Usage: %s [-RVf] [-+=AacDdeijsSuC] [-v version] files...\n" ), program_name);exit (1 ); }@@ -106,6 +106,7 @@ static const struct flags_char flags_array[] = { { FS_UNRM_FL, 'u' }, { FS_NOTAIL_FL, 't' }, { FS_TOPDIR_FL, 'T' }, + { FS_NOCOW_FL, 'C' }, { 0, 0 } };@@ -159,6 +160,12 @@ static int decode_arg (int * i, int argc, char ** argv) }if ((fl =get_flag (*p)) ==0 )usage (); + +if (fl ==FS_COMPR_FL ) { + af |=FS_NOCOMPR_FL ; + add =1 ; + } + rf |= fl; rem =1 ; }@@ -168,6 +175,12 @@ static int decode_arg (int * i, int argc, char ** argv)for (p = &argv[*i][1 ]; *p; p++) {if ((fl =get_flag (*p)) ==0 )usage (); + +if (fl ==FS_COMPR_FL ) { + rf |=FS_NOCOMPR_FL ; + rem =1 ; + } + af |= fl; }break ;
Quoted 2 lines · Lutz Vieweg
Maybe "chattr +C" could print a warning if a file
to change attributes for is > 0 bytes long?
This may only affect btrfs. The old ext2? ext3? compression patches were able to compress pre-existing files. I don't know how other filesystems behave in this regard.
Signature · 4 lines
_____________________________________________________________________
/ __// /__ ____ __ http://www.modeemi.fi/~flux/\ \
/ /_ / // // /\ \/ / \ /
/_/ /_/ \___/ /_/\_\@modeemi.fi \/Am Sonntag, 4. Januar 2015, 12:40:59 schrieb Erkki Seppala:
Quoted 8 lines
Quoted 2 lines · Lutz Vieweg
Maybe "chattr +C" could print a warning if a file
to change attributes for is > 0 bytes long?This may only affect btrfs. The old ext2? ext3? compression patches were able to compress pre-existing files. I don't know how other filesystems behave in this regard.
+C is no-cow, -c is compression.
Signature · 2 lines
Martin 'Helios' Steigerwald - http://www.Lichtvoll.de GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7