* [PATCH 0/3] xfsprogs: v4 inode type in directory
@ 2013-09-19 21:05 Mark Tinguely
2013-09-19 21:05 ` [PATCH 1/3] xfsprog: add xfs sb v4 support for dirent filetype field Mark Tinguely
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Mark Tinguely @ 2013-09-19 21:05 UTC (permalink / raw)
To: xfs
Here are the patches that enable the inode in the directory
feature in v4 superblocks.
patch 1: add the entries to xfs_sb.h (sync with kernel)
patch 2: add the XFS_FSOP_GEOM_FLAGS_FTYPE to xfs_fs.h (sync with kernel)
add the entry to repair so that xfs_info reports the feature
patch 3: add the feature to mkfs.xfs and manual page.
note: this new feature is ignored for superblock v5
automatically turns on this feature.
--Mark.
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/3] xfsprog: add xfs sb v4 support for dirent filetype field
2013-09-19 21:05 [PATCH 0/3] xfsprogs: v4 inode type in directory Mark Tinguely
@ 2013-09-19 21:05 ` Mark Tinguely
2013-09-19 22:52 ` Dave Chinner
2013-09-19 21:05 ` [PATCH 2/3] xfsprog: add dirent filetype information for xfs_info Mark Tinguely
2013-09-19 21:05 ` [PATCH 3/3] xfsprog: add mkfs.xfs sb v4 support for dirent filetype field Mark Tinguely
2 siblings, 1 reply; 8+ messages in thread
From: Mark Tinguely @ 2013-09-19 21:05 UTC (permalink / raw)
To: xfs
[-- Attachment #1: 1-3-xfsprog-add-xfs-sb-v4-support-for-dirent-filetype-field.patch --]
[-- Type: text/plain, Size: 1716 bytes --]
Add xfsprog superblock v4 support for the directory inode type
in xfs_sb.h.
This support adds a feature bit for version 4 superblocks and
leaves the original superblock 5 incompatibility bit.
Signed-off-by: Mark Tinguely <tinguely@sgi.com>
---
include/xfs_sb.h | 20 ++++++++++++--------
include/xfs_sb.h | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
Index: b/include/xfs_sb.h
===================================================================
--- a/include/xfs_sb.h
+++ b/include/xfs_sb.h
@@ -84,11 +84,13 @@ struct xfs_trans;
#define XFS_SB_VERSION2_PARENTBIT 0x00000010 /* parent pointers */
#define XFS_SB_VERSION2_PROJID32BIT 0x00000080 /* 32 bit project id */
#define XFS_SB_VERSION2_CRCBIT 0x00000100 /* metadata CRCs */
+#define XFS_SB_VERSION2_FTYPE 0x00000200 /* inode type in dir */
#define XFS_SB_VERSION2_OKREALFBITS \
(XFS_SB_VERSION2_LAZYSBCOUNTBIT | \
XFS_SB_VERSION2_ATTR2BIT | \
- XFS_SB_VERSION2_PROJID32BIT)
+ XFS_SB_VERSION2_PROJID32BIT | \
+ XFS_SB_VERSION2_FTYPE)
#define XFS_SB_VERSION2_OKSASHFBITS \
(0)
#define XFS_SB_VERSION2_OKREALBITS \
@@ -631,8 +633,10 @@ static inline int xfs_sb_version_has_pqu
static inline int xfs_sb_version_hasftype(struct xfs_sb *sbp)
{
- return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5 &&
- xfs_sb_has_incompat_feature(sbp, XFS_SB_FEAT_INCOMPAT_FTYPE);
+ return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5 &&
+ xfs_sb_has_incompat_feature(sbp, XFS_SB_FEAT_INCOMPAT_FTYPE)) ||
+ (xfs_sb_version_hasmorebits(sbp) &&
+ (sbp->sb_features2 & XFS_SB_VERSION2_FTYPE));
}
/*
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/3] xfsprog: add dirent filetype information for xfs_info
2013-09-19 21:05 [PATCH 0/3] xfsprogs: v4 inode type in directory Mark Tinguely
2013-09-19 21:05 ` [PATCH 1/3] xfsprog: add xfs sb v4 support for dirent filetype field Mark Tinguely
@ 2013-09-19 21:05 ` Mark Tinguely
2013-09-19 22:54 ` Dave Chinner
2013-09-19 21:05 ` [PATCH 3/3] xfsprog: add mkfs.xfs sb v4 support for dirent filetype field Mark Tinguely
2 siblings, 1 reply; 8+ messages in thread
From: Mark Tinguely @ 2013-09-19 21:05 UTC (permalink / raw)
To: xfs
[-- Attachment #1: 2-3-xfsprogs-add-inode-type-field-to-xfs_info.patch --]
[-- Type: text/plain, Size: 5116 bytes --]
Make xfs_info aware of the directory inode type.
Signed-off-by: Mark Tinguely <tinguely@sgi.com>
---
growfs/xfs_growfs.c | 14 +++++++++-----
include/xfs_fs.h | 31 ++++++++++++++++---------------
2 files changed, 25 insertions(+), 20 deletions(-)
Index: b/growfs/xfs_growfs.c
===================================================================
--- a/growfs/xfs_growfs.c
+++ b/growfs/xfs_growfs.c
@@ -55,7 +55,8 @@ report_info(
int attrversion,
int projid32bit,
int crcs_enabled,
- int cimode)
+ int cimode,
+ int ftype_enabled)
{
printf(_(
"meta-data=%-22s isize=%-6u agcount=%u, agsize=%u blks\n"
@@ -63,7 +64,7 @@ report_info(
" =%-22s crc=%u\n"
"data =%-22s bsize=%-6u blocks=%llu, imaxpct=%u\n"
" =%-22s sunit=%-6u swidth=%u blks\n"
- "naming =version %-14u bsize=%-6u ascii-ci=%d\n"
+ "naming =version %-14u bsize=%-6u ascii-ci=%d field=%d\n"
"log =%-22s bsize=%-6u blocks=%u, version=%u\n"
" =%-22s sectsz=%-5u sunit=%u blks, lazy-count=%u\n"
"realtime =%-22s extsz=%-6u blocks=%llu, rtextents=%llu\n"),
@@ -74,7 +75,7 @@ report_info(
"", geo.blocksize, (unsigned long long)geo.datablocks,
geo.imaxpct,
"", geo.sunit, geo.swidth,
- dirversion, geo.dirblocksize, cimode,
+ dirversion, geo.dirblocksize, cimode, ftype_enabled,
isint ? _("internal") : logname ? logname : _("external"),
geo.blocksize, geo.logblocks, logversion,
"", geo.logsectsize, geo.logsunit / geo.blocksize, lazycount,
@@ -121,6 +122,7 @@ main(int argc, char **argv)
libxfs_init_t xi; /* libxfs structure */
int projid32bit;
int crcs_enabled;
+ int ftype_enabled = 0;
progname = basename(argv[0]);
setlocale(LC_ALL, "");
@@ -242,10 +244,12 @@ main(int argc, char **argv)
ci = geo.flags & XFS_FSOP_GEOM_FLAGS_DIRV2CI ? 1 : 0;
projid32bit = geo.flags & XFS_FSOP_GEOM_FLAGS_PROJID32 ? 1 : 0;
crcs_enabled = geo.flags & XFS_FSOP_GEOM_FLAGS_V5SB ? 1 : 0;
+ ftype_enabled = geo.flags & XFS_FSOP_GEOM_FLAGS_FTYPE ? 1 : 0;
if (nflag) {
report_info(geo, datadev, isint, logdev, rtdev,
lazycount, dirversion, logversion,
- attrversion, projid32bit, crcs_enabled, ci);
+ attrversion, projid32bit, crcs_enabled, ci,
+ ftype_enabled);
exit(0);
}
@@ -282,7 +286,7 @@ main(int argc, char **argv)
report_info(geo, datadev, isint, logdev, rtdev,
lazycount, dirversion, logversion,
- attrversion, projid32bit, crcs_enabled, ci);
+ attrversion, projid32bit, crcs_enabled, ci, ftype_enabled);
ddsize = xi.dsize;
dlsize = ( xi.logBBsize? xi.logBBsize :
Index: b/include/xfs_fs.h
===================================================================
--- a/include/xfs_fs.h
+++ b/include/xfs_fs.h
@@ -222,21 +222,22 @@ typedef struct xfs_fsop_resblks {
#define XFS_FSOP_GEOM_VERSION 0
-#define XFS_FSOP_GEOM_FLAGS_ATTR 0x0001 /* attributes in use */
-#define XFS_FSOP_GEOM_FLAGS_NLINK 0x0002 /* 32-bit nlink values */
-#define XFS_FSOP_GEOM_FLAGS_QUOTA 0x0004 /* quotas enabled */
-#define XFS_FSOP_GEOM_FLAGS_IALIGN 0x0008 /* inode alignment */
-#define XFS_FSOP_GEOM_FLAGS_DALIGN 0x0010 /* large data alignment */
-#define XFS_FSOP_GEOM_FLAGS_SHARED 0x0020 /* read-only shared */
-#define XFS_FSOP_GEOM_FLAGS_EXTFLG 0x0040 /* special extent flag */
-#define XFS_FSOP_GEOM_FLAGS_DIRV2 0x0080 /* directory version 2 */
-#define XFS_FSOP_GEOM_FLAGS_LOGV2 0x0100 /* log format version 2 */
-#define XFS_FSOP_GEOM_FLAGS_SECTOR 0x0200 /* sector sizes >1BB */
-#define XFS_FSOP_GEOM_FLAGS_ATTR2 0x0400 /* inline attributes rework */
-#define XFS_FSOP_GEOM_FLAGS_PROJID32 0x0800 /* 32-bit project IDs */
-#define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000 /* ASCII only CI names */
-#define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000 /* lazy superblock counters */
-#define XFS_FSOP_GEOM_FLAGS_V5SB 0x8000 /* version 5 superblock */
+#define XFS_FSOP_GEOM_FLAGS_ATTR 0x00001 /* attributes in use */
+#define XFS_FSOP_GEOM_FLAGS_NLINK 0x00002 /* 32-bit nlink values */
+#define XFS_FSOP_GEOM_FLAGS_QUOTA 0x00004 /* quotas enabled */
+#define XFS_FSOP_GEOM_FLAGS_IALIGN 0x00008 /* inode alignment */
+#define XFS_FSOP_GEOM_FLAGS_DALIGN 0x00010 /* large data alignment */
+#define XFS_FSOP_GEOM_FLAGS_SHARED 0x00020 /* read-only shared */
+#define XFS_FSOP_GEOM_FLAGS_EXTFLG 0x00040 /* special extent flag */
+#define XFS_FSOP_GEOM_FLAGS_DIRV2 0x00080 /* directory version 2 */
+#define XFS_FSOP_GEOM_FLAGS_LOGV2 0x00100 /* log format version 2 */
+#define XFS_FSOP_GEOM_FLAGS_SECTOR 0x00200 /* sector sizes >1BB */
+#define XFS_FSOP_GEOM_FLAGS_ATTR2 0x00400 /* inline attributes rework */
+#define XFS_FSOP_GEOM_FLAGS_PROJID32 0x00800 /* 32-bit project IDs */
+#define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x01000 /* ASCII only CI names */
+#define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x04000 /* lazy superblock counters */
+#define XFS_FSOP_GEOM_FLAGS_V5SB 0x08000 /* version 5 superblock */
+#define XFS_FSOP_GEOM_FLAGS_FTYPE 0x10000 /* inode directory types */
/*
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/3] xfsprog: add mkfs.xfs sb v4 support for dirent filetype field
2013-09-19 21:05 [PATCH 0/3] xfsprogs: v4 inode type in directory Mark Tinguely
2013-09-19 21:05 ` [PATCH 1/3] xfsprog: add xfs sb v4 support for dirent filetype field Mark Tinguely
2013-09-19 21:05 ` [PATCH 2/3] xfsprog: add dirent filetype information for xfs_info Mark Tinguely
@ 2013-09-19 21:05 ` Mark Tinguely
2013-09-19 23:15 ` Dave Chinner
2 siblings, 1 reply; 8+ messages in thread
From: Mark Tinguely @ 2013-09-19 21:05 UTC (permalink / raw)
To: xfs
[-- Attachment #1: 3-3-xfsprog-add-mkfs.xfs-sb-v4-support-for-dirent-filetype-field.patch --]
[-- Type: text/plain, Size: 5906 bytes --]
Add directory inode type feature to mkfs.xfs.
In sb v4, "-n ftype=1" turns on the feature. The feature is still
automatically turned on for sb v5.
Signed-off-by: Mark Tinguely <tinguely@sgi.com>
---
man/man8/mkfs.xfs.8 | 7 +++++++
man/man8/mkfs.xfs.8 | 10 ++++++++++
mkfs/xfs_mkfs.c | 40 +++++++++++++++++++++++++++-------------
mkfs/xfs_mkfs.h | 4 +++-
3 files changed, 40 insertions(+), 14 deletions(-)
Index: b/man/man8/mkfs.xfs.8
===================================================================
--- a/man/man8/mkfs.xfs.8
+++ b/man/man8/mkfs.xfs.8
@@ -517,6 +517,16 @@ option enables ASCII only case-insensiti
are stored in directories using the case they were created with.
.IP
Note: Version 1 directories are not supported.
+.TP
+.BI ftype= value
+Version 4 superblock supports the inode type stored in the directory feature.
+.I value
+can be either 0 or 1.
+With 0 meaning not supported (default) and 1 meaning supported.
+.IP
+Version 5 superblocks automatically support this feature and this
+setting will be ignored.
+.IP
.RE
.TP
.BI \-p " protofile"
Index: b/mkfs/xfs_mkfs.c
===================================================================
--- a/mkfs/xfs_mkfs.c
+++ b/mkfs/xfs_mkfs.c
@@ -147,6 +147,8 @@ char *nopts[] = {
"size",
#define N_VERSION 2
"version",
+#define N_FTYPE 3
+ "ftype",
NULL,
};
@@ -885,6 +887,7 @@ main(
char *dfile;
int dirblocklog;
int dirblocksize;
+ int dirftype;
int dirversion;
char *dsize;
int dsu;
@@ -930,6 +933,7 @@ main(
int nodsflag;
int norsflag;
xfs_alloc_rec_t *nrec;
+ int niflag;
int nsflag;
int nvflag;
int nci;
@@ -976,8 +980,8 @@ main(
loginternal = 1;
logversion = 2;
logagno = logblocks = rtblocks = rtextblocks = 0;
- Nflag = nlflag = nsflag = nvflag = nci = 0;
- dirblocklog = dirblocksize = 0;
+ Nflag = niflag = nlflag = nsflag = nvflag = nci = 0;
+ dirftype = dirblocklog = dirblocksize = 0;
dirversion = XFS_DFL_DIR_VERSION;
qflag = 0;
imaxpct = inodelog = inopblock = isize = 0;
@@ -1533,6 +1537,14 @@ main(
}
nvflag = 1;
break;
+ case N_FTYPE:
+ if (!value || *value == '\0')
+ reqval('n', nopts, N_FTYPE);
+ if (niflag)
+ respec('n', nopts, N_FTYPE);
+ dirftype = atoi(value);
+ niflag = 1;
+ break;
default:
unknown('n', value);
}
@@ -2434,6 +2446,14 @@ _("size %s specified for log subvolume i
}
validate_log_size(logblocks, blocklog, min_logblocks);
+ /*
+ * dirent filetype field always enabled on v5 superblocks
+ */
+ if (crcs_enabled) {
+ sbp->sb_features_incompat = XFS_SB_FEAT_INCOMPAT_FTYPE;
+ dirftype = 1;
+ }
+
if (!qflag || Nflag) {
printf(_(
"meta-data=%-22s isize=%-6d agcount=%lld, agsize=%lld blks\n"
@@ -2441,7 +2461,7 @@ _("size %s specified for log subvolume i
" =%-22s crc=%u\n"
"data =%-22s bsize=%-6u blocks=%llu, imaxpct=%u\n"
" =%-22s sunit=%-6u swidth=%u blks\n"
- "naming =version %-14u bsize=%-6u ascii-ci=%d\n"
+ "naming =version %-14u bsize=%-6u ascii-ci=%d ftype=%d\n"
"log =%-22s bsize=%-6d blocks=%lld, version=%d\n"
" =%-22s sectsz=%-5u sunit=%d blks, lazy-count=%d\n"
"realtime =%-22s extsz=%-6d blocks=%lld, rtextents=%lld\n"),
@@ -2450,7 +2470,7 @@ _("size %s specified for log subvolume i
"", crcs_enabled,
"", blocksize, (long long)dblocks, imaxpct,
"", dsunit, dswidth,
- dirversion, dirblocksize, nci,
+ dirversion, dirblocksize, nci, dirftype,
logfile, 1 << blocklog, (long long)logblocks,
logversion, "", lsectorsize, lsunit, lazy_sb_counters,
rtfile, rtextblocks << blocklog,
@@ -2512,8 +2532,9 @@ _("size %s specified for log subvolume i
sbp->sb_logsectlog = 0;
sbp->sb_logsectsize = 0;
}
+
sbp->sb_features2 = XFS_SB_VERSION2_MKFS(crcs_enabled, lazy_sb_counters,
- attrversion == 2, !projid16bit, 0);
+ attrversion == 2, !projid16bit, 0, dirftype);
sbp->sb_versionnum = XFS_SB_VERSION_MKFS(crcs_enabled, iaflag,
dsunit != 0,
logversion == 2, attrversion == 1,
@@ -2521,13 +2542,6 @@ _("size %s specified for log subvolume i
lsectorsize != BBSIZE),
nci, sbp->sb_features2 != 0);
/*
- * dirent filetype field always enabled on v5 superblocks
- */
- if (crcs_enabled) {
- sbp->sb_features_incompat = XFS_SB_FEAT_INCOMPAT_FTYPE;
- }
-
- /*
* Due to a structure alignment issue, sb_features2 ended up in one
* of two locations, the second "incorrect" location represented by
* the sb_bad_features2 field. To avoid older kernels mounting
@@ -3065,7 +3079,7 @@ usage( void )
sunit=value|su=num,sectlog=n|sectsize=num,\n\
lazy-count=0|1]\n\
/* label */ [-L label (maximum 12 characters)]\n\
-/* naming */ [-n log=n|size=num,version=2|ci]\n\
+/* naming */ [-n log=n|size=num,version=2|ci,ftype=0|1]\n\
/* no-op info only */ [-N]\n\
/* prototype file */ [-p fname]\n\
/* quiet */ [-q]\n\
Index: b/mkfs/xfs_mkfs.h
===================================================================
--- a/mkfs/xfs_mkfs.h
+++ b/mkfs/xfs_mkfs.h
@@ -36,12 +36,14 @@
XFS_DFL_SB_VERSION_BITS | \
0 ) : XFS_SB_VERSION_1 )
-#define XFS_SB_VERSION2_MKFS(crc, lazycount, attr2, projid32bit, parent) (\
+#define XFS_SB_VERSION2_MKFS(crc, lazycount, attr2, projid32bit, parent, \
+ ftype) (\
((lazycount) ? XFS_SB_VERSION2_LAZYSBCOUNTBIT : 0) | \
((attr2) ? XFS_SB_VERSION2_ATTR2BIT : 0) | \
((projid32bit) ? XFS_SB_VERSION2_PROJID32BIT : 0) | \
((parent) ? XFS_SB_VERSION2_PARENTBIT : 0) | \
((crc) ? XFS_SB_VERSION2_CRCBIT : 0) | \
+ ((ftype) ? XFS_SB_VERSION2_FTYPE : 0) | \
0 )
#define XFS_DFL_BLOCKSIZE_LOG 12 /* 4096 byte blocks */
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/3] xfsprog: add xfs sb v4 support for dirent filetype field
2013-09-19 21:05 ` [PATCH 1/3] xfsprog: add xfs sb v4 support for dirent filetype field Mark Tinguely
@ 2013-09-19 22:52 ` Dave Chinner
0 siblings, 0 replies; 8+ messages in thread
From: Dave Chinner @ 2013-09-19 22:52 UTC (permalink / raw)
To: Mark Tinguely; +Cc: xfs
On Thu, Sep 19, 2013 at 04:05:24PM -0500, Mark Tinguely wrote:
> Add xfsprog superblock v4 support for the directory inode type
> in xfs_sb.h.
>
> This support adds a feature bit for version 4 superblocks and
> leaves the original superblock 5 incompatibility bit.
>
> Signed-off-by: Mark Tinguely <tinguely@sgi.com>
> ---
> include/xfs_sb.h | 20 ++++++++++++--------
> include/xfs_sb.h | 10 +++++++---
> 1 file changed, 7 insertions(+), 3 deletions(-)
>
> Index: b/include/xfs_sb.h
> ===================================================================
> --- a/include/xfs_sb.h
> +++ b/include/xfs_sb.h
> @@ -84,11 +84,13 @@ struct xfs_trans;
> #define XFS_SB_VERSION2_PARENTBIT 0x00000010 /* parent pointers */
> #define XFS_SB_VERSION2_PROJID32BIT 0x00000080 /* 32 bit project id */
> #define XFS_SB_VERSION2_CRCBIT 0x00000100 /* metadata CRCs */
> +#define XFS_SB_VERSION2_FTYPE 0x00000200 /* inode type in dir */
>
> #define XFS_SB_VERSION2_OKREALFBITS \
> (XFS_SB_VERSION2_LAZYSBCOUNTBIT | \
> XFS_SB_VERSION2_ATTR2BIT | \
> - XFS_SB_VERSION2_PROJID32BIT)
> + XFS_SB_VERSION2_PROJID32BIT | \
> + XFS_SB_VERSION2_FTYPE)
> #define XFS_SB_VERSION2_OKSASHFBITS \
> (0)
> #define XFS_SB_VERSION2_OKREALBITS \
> @@ -631,8 +633,10 @@ static inline int xfs_sb_version_has_pqu
>
> static inline int xfs_sb_version_hasftype(struct xfs_sb *sbp)
> {
> - return XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5 &&
> - xfs_sb_has_incompat_feature(sbp, XFS_SB_FEAT_INCOMPAT_FTYPE);
> + return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5 &&
> + xfs_sb_has_incompat_feature(sbp, XFS_SB_FEAT_INCOMPAT_FTYPE)) ||
> + (xfs_sb_version_hasmorebits(sbp) &&
> + (sbp->sb_features2 & XFS_SB_VERSION2_FTYPE));
This is kinda inefficient. Seeing as I didn't review the kernel
version, I'll review it now. Expand it out:
return (XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5 &&
xfs_sb_has_incompat_feature(sbp, XFS_SB_FEAT_INCOMPAT_FTYPE)) ||
((XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_5) ||
(XFS_SB_VERSION_NUM(sbp) == XFS_SB_VERSION_4 &&
(sbp->sb_versionnum & XFS_SB_VERSION_MOREBITSBIT))) &&
(sbp->sb_features2 & XFS_SB_VERSION2_FTYPE));
so, really, the check could be refined to:
return XFS_SB_VERSION_NUM(sbp) >= XFS_SB_VERSION_4 &&
(xfs_sb_has_incompat_feature(sbp, XFS_SB_FEAT_INCOMPAT_FTYPE) ||
((sbp->sb_versionnum & XFS_SB_VERSION_MOREBITSBIT) &&
(sbp->sb_features2 & XFS_SB_VERSION2_FTYPE)));
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/3] xfsprog: add dirent filetype information for xfs_info
2013-09-19 21:05 ` [PATCH 2/3] xfsprog: add dirent filetype information for xfs_info Mark Tinguely
@ 2013-09-19 22:54 ` Dave Chinner
0 siblings, 0 replies; 8+ messages in thread
From: Dave Chinner @ 2013-09-19 22:54 UTC (permalink / raw)
To: Mark Tinguely; +Cc: xfs
On Thu, Sep 19, 2013 at 04:05:25PM -0500, Mark Tinguely wrote:
> Make xfs_info aware of the directory inode type.
>
> Signed-off-by: Mark Tinguely <tinguely@sgi.com>
> ---
> growfs/xfs_growfs.c | 14 +++++++++-----
> include/xfs_fs.h | 31 ++++++++++++++++---------------
> 2 files changed, 25 insertions(+), 20 deletions(-)
>
> Index: b/growfs/xfs_growfs.c
> ===================================================================
> --- a/growfs/xfs_growfs.c
> +++ b/growfs/xfs_growfs.c
> @@ -55,7 +55,8 @@ report_info(
> int attrversion,
> int projid32bit,
> int crcs_enabled,
> - int cimode)
> + int cimode,
> + int ftype_enabled)
> {
> printf(_(
> "meta-data=%-22s isize=%-6u agcount=%u, agsize=%u blks\n"
> @@ -63,7 +64,7 @@ report_info(
> " =%-22s crc=%u\n"
> "data =%-22s bsize=%-6u blocks=%llu, imaxpct=%u\n"
> " =%-22s sunit=%-6u swidth=%u blks\n"
> - "naming =version %-14u bsize=%-6u ascii-ci=%d\n"
> + "naming =version %-14u bsize=%-6u ascii-ci=%d field=%d\n"
What does "field" mean? It doesn't describe the feature at all.
"dtype" or "ftype" would be a better description of what is
different in the directory structure...
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 3/3] xfsprog: add mkfs.xfs sb v4 support for dirent filetype field
2013-09-19 21:05 ` [PATCH 3/3] xfsprog: add mkfs.xfs sb v4 support for dirent filetype field Mark Tinguely
@ 2013-09-19 23:15 ` Dave Chinner
0 siblings, 0 replies; 8+ messages in thread
From: Dave Chinner @ 2013-09-19 23:15 UTC (permalink / raw)
To: Mark Tinguely; +Cc: xfs
On Thu, Sep 19, 2013 at 04:05:26PM -0500, Mark Tinguely wrote:
> Add directory inode type feature to mkfs.xfs.
>
> In sb v4, "-n ftype=1" turns on the feature. The feature is still
> automatically turned on for sb v5.
Ok, so you named it "ftype" here. that's what needs to be in the
xfs_info output, and mkfs output....
> Signed-off-by: Mark Tinguely <tinguely@sgi.com>
> ---
> man/man8/mkfs.xfs.8 | 7 +++++++
> man/man8/mkfs.xfs.8 | 10 ++++++++++
> mkfs/xfs_mkfs.c | 40 +++++++++++++++++++++++++++-------------
> mkfs/xfs_mkfs.h | 4 +++-
> 3 files changed, 40 insertions(+), 14 deletions(-)
>
> Index: b/man/man8/mkfs.xfs.8
> ===================================================================
> --- a/man/man8/mkfs.xfs.8
> +++ b/man/man8/mkfs.xfs.8
> @@ -517,6 +517,16 @@ option enables ASCII only case-insensiti
> are stored in directories using the case they were created with.
> .IP
> Note: Version 1 directories are not supported.
> +.TP
> +.BI ftype= value
> +Version 4 superblock supports the inode type stored in the directory feature.
It's a very brief description of the feature. Nobody is really going
to understand it from that. You need to mention that allows the
type of object a directory entry points to to be stored in the
directory structure so that inodes don't have to be read to traverse
the filesystem or determine the type of a directory entry. And that
the inforamtion is returned to readdir(3) and getdents(2), so users
should see the those man poages for how to access the
information....
> +.I value
> +can be either 0 or 1.
> +With 0 meaning not supported (default) and 1 meaning supported.
The value is either 0 or 1, with 1 signifiying that filetype
information will be stored in the directory structure. The default
value is 0.
> +.IP
> +Version 5 superblocks automatically support this feature and this
> +setting will be ignored.
Users don't know what a "version 5 superblock" means, really. So
what this should say is something like this:
"When CRCs are enabled via -m crc=1, the ftype functionality is
always enabled. This feature can not be turned off for such
filesystem configurations."
As it is, trying to turn off ftype on a crc enabled filesystem
should throw an error, not be ignored.
> loginternal = 1;
> logversion = 2;
> logagno = logblocks = rtblocks = rtextblocks = 0;
> - Nflag = nlflag = nsflag = nvflag = nci = 0;
> - dirblocklog = dirblocksize = 0;
> + Nflag = niflag = nlflag = nsflag = nvflag = nci = 0;
> + dirftype = dirblocklog = dirblocksize = 0;
two flags?
Also, can you put them on their own line for initialisation rather
than add more to the existing multi-variable assignments..
> dirversion = XFS_DFL_DIR_VERSION;
> qflag = 0;
> imaxpct = inodelog = inopblock = isize = 0;
> @@ -1533,6 +1537,14 @@ main(
> }
> nvflag = 1;
> break;
> + case N_FTYPE:
> + if (!value || *value == '\0')
> + reqval('n', nopts, N_FTYPE);
> + if (niflag)
> + respec('n', nopts, N_FTYPE);
> + dirftype = atoi(value);
> + niflag = 1;
> + break;
So, niflag indicates that the cli option has been set. Where does
that get used? what does the "i" in niflag mean? Wouldn't
"nftype_flag" be a better name?
And then if it is set, it should be rejected if crcs_enabled is also
set, dumping the usage information...
> default:
> unknown('n', value);
> }
> @@ -2434,6 +2446,14 @@ _("size %s specified for log subvolume i
> }
> validate_log_size(logblocks, blocklog, min_logblocks);
>
> + /*
> + * dirent filetype field always enabled on v5 superblocks
> + */
> + if (crcs_enabled) {
> + sbp->sb_features_incompat = XFS_SB_FEAT_INCOMPAT_FTYPE;
> + dirftype = 1;
> + }
So dirftype is set for crc enabled filesystems....
> +
> if (!qflag || Nflag) {
> printf(_(
> "meta-data=%-22s isize=%-6d agcount=%lld, agsize=%lld blks\n"
> @@ -2441,7 +2461,7 @@ _("size %s specified for log subvolume i
> " =%-22s crc=%u\n"
> "data =%-22s bsize=%-6u blocks=%llu, imaxpct=%u\n"
> " =%-22s sunit=%-6u swidth=%u blks\n"
> - "naming =version %-14u bsize=%-6u ascii-ci=%d\n"
> + "naming =version %-14u bsize=%-6u ascii-ci=%d ftype=%d\n"
Yup, you named it "ftype" here....
> "log =%-22s bsize=%-6d blocks=%lld, version=%d\n"
> " =%-22s sectsz=%-5u sunit=%d blks, lazy-count=%d\n"
> "realtime =%-22s extsz=%-6d blocks=%lld, rtextents=%lld\n"),
> @@ -2450,7 +2470,7 @@ _("size %s specified for log subvolume i
> "", crcs_enabled,
> "", blocksize, (long long)dblocks, imaxpct,
> "", dsunit, dswidth,
> - dirversion, dirblocksize, nci,
> + dirversion, dirblocksize, nci, dirftype,
dirftype is used here for output...
> logfile, 1 << blocklog, (long long)logblocks,
> logversion, "", lsectorsize, lsunit, lazy_sb_counters,
> rtfile, rtextblocks << blocklog,
> @@ -2512,8 +2532,9 @@ _("size %s specified for log subvolume i
> sbp->sb_logsectlog = 0;
> sbp->sb_logsectsize = 0;
> }
> +
> sbp->sb_features2 = XFS_SB_VERSION2_MKFS(crcs_enabled, lazy_sb_counters,
> - attrversion == 2, !projid16bit, 0);
> + attrversion == 2, !projid16bit, 0, dirftype);
and for setting the v4 feature bit.
Hmmm, that maybe a problem - on v5 filesystems that's setting both
the v4 feature and the v5 feature bit. I don't think that is the
right thing to do here. It might be fine for an incompat v5 feature
bit, but if this was a read-only compat feature bit then the v4
feature bit would prevent the v5 feature bit from working correctly.
Hence for new "dual v4/v5 feature bit features", only the relevant
feature bit for the filesystem version should be set.
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/3] xfsprog: add dirent filetype information for xfs_info
2013-10-16 22:36 [PATCH 0/3] xfsprogs: v4 inode type in directory Mark Tinguely
@ 2013-10-16 22:36 ` Mark Tinguely
0 siblings, 0 replies; 8+ messages in thread
From: Mark Tinguely @ 2013-10-16 22:36 UTC (permalink / raw)
To: xfs
[-- Attachment #1: 2-3-xfsprog-add-dirent-filetype-information-for-xfs_info.patch --]
[-- Type: text/plain, Size: 3725 bytes --]
Make xfs_info aware of the directory inode type by using the
XFS_FSOP_GEOM_FLAGS_FTYPE set in the kernel.
Signed-off-by: Mark Tinguely <tinguely@sgi.com>
---
changed the display field to "ftype", same as the mkfs.xfs entry
that made it.
growfs/xfs_growfs.c | 14 +++++++++-----
growfs/xfs_growfs.c | 14 +++++++++-----
include/xfs_fs.h | 3 ++-
2 files changed, 11 insertions(+), 6 deletions(-)
Index: b/growfs/xfs_growfs.c
===================================================================
--- a/growfs/xfs_growfs.c
+++ b/growfs/xfs_growfs.c
@@ -55,7 +55,8 @@ report_info(
int attrversion,
int projid32bit,
int crcs_enabled,
- int cimode)
+ int cimode,
+ int ftype_enabled)
{
printf(_(
"meta-data=%-22s isize=%-6u agcount=%u, agsize=%u blks\n"
@@ -63,7 +64,7 @@ report_info(
" =%-22s crc=%u\n"
"data =%-22s bsize=%-6u blocks=%llu, imaxpct=%u\n"
" =%-22s sunit=%-6u swidth=%u blks\n"
- "naming =version %-14u bsize=%-6u ascii-ci=%d\n"
+ "naming =version %-14u bsize=%-6u ascii-ci=%d ftype=%d\n"
"log =%-22s bsize=%-6u blocks=%u, version=%u\n"
" =%-22s sectsz=%-5u sunit=%u blks, lazy-count=%u\n"
"realtime =%-22s extsz=%-6u blocks=%llu, rtextents=%llu\n"),
@@ -74,7 +75,7 @@ report_info(
"", geo.blocksize, (unsigned long long)geo.datablocks,
geo.imaxpct,
"", geo.sunit, geo.swidth,
- dirversion, geo.dirblocksize, cimode,
+ dirversion, geo.dirblocksize, cimode, ftype_enabled,
isint ? _("internal") : logname ? logname : _("external"),
geo.blocksize, geo.logblocks, logversion,
"", geo.logsectsize, geo.logsunit / geo.blocksize, lazycount,
@@ -121,6 +122,7 @@ main(int argc, char **argv)
libxfs_init_t xi; /* libxfs structure */
int projid32bit;
int crcs_enabled;
+ int ftype_enabled = 0;
progname = basename(argv[0]);
setlocale(LC_ALL, "");
@@ -242,10 +244,12 @@ main(int argc, char **argv)
ci = geo.flags & XFS_FSOP_GEOM_FLAGS_DIRV2CI ? 1 : 0;
projid32bit = geo.flags & XFS_FSOP_GEOM_FLAGS_PROJID32 ? 1 : 0;
crcs_enabled = geo.flags & XFS_FSOP_GEOM_FLAGS_V5SB ? 1 : 0;
+ ftype_enabled = geo.flags & XFS_FSOP_GEOM_FLAGS_FTYPE ? 1 : 0;
if (nflag) {
report_info(geo, datadev, isint, logdev, rtdev,
lazycount, dirversion, logversion,
- attrversion, projid32bit, crcs_enabled, ci);
+ attrversion, projid32bit, crcs_enabled, ci,
+ ftype_enabled);
exit(0);
}
@@ -282,7 +286,7 @@ main(int argc, char **argv)
report_info(geo, datadev, isint, logdev, rtdev,
lazycount, dirversion, logversion,
- attrversion, projid32bit, crcs_enabled, ci);
+ attrversion, projid32bit, crcs_enabled, ci, ftype_enabled);
ddsize = xi.dsize;
dlsize = ( xi.logBBsize? xi.logBBsize :
Index: b/include/xfs_fs.h
===================================================================
--- a/include/xfs_fs.h
+++ b/include/xfs_fs.h
@@ -233,10 +233,11 @@ typedef struct xfs_fsop_resblks {
#define XFS_FSOP_GEOM_FLAGS_LOGV2 0x0100 /* log format version 2 */
#define XFS_FSOP_GEOM_FLAGS_SECTOR 0x0200 /* sector sizes >1BB */
#define XFS_FSOP_GEOM_FLAGS_ATTR2 0x0400 /* inline attributes rework */
-#define XFS_FSOP_GEOM_FLAGS_PROJID32 0x0800 /* 32-bit project IDs */
+#define XFS_FSOP_GEOM_FLAGS_PROJID32 0x0800 /* 32-bit project IDs */
#define XFS_FSOP_GEOM_FLAGS_DIRV2CI 0x1000 /* ASCII only CI names */
#define XFS_FSOP_GEOM_FLAGS_LAZYSB 0x4000 /* lazy superblock counters */
#define XFS_FSOP_GEOM_FLAGS_V5SB 0x8000 /* version 5 superblock */
+#define XFS_FSOP_GEOM_FLAGS_FTYPE 0x10000 /* inode directory types */
/*
_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-10-16 22:47 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-19 21:05 [PATCH 0/3] xfsprogs: v4 inode type in directory Mark Tinguely
2013-09-19 21:05 ` [PATCH 1/3] xfsprog: add xfs sb v4 support for dirent filetype field Mark Tinguely
2013-09-19 22:52 ` Dave Chinner
2013-09-19 21:05 ` [PATCH 2/3] xfsprog: add dirent filetype information for xfs_info Mark Tinguely
2013-09-19 22:54 ` Dave Chinner
2013-09-19 21:05 ` [PATCH 3/3] xfsprog: add mkfs.xfs sb v4 support for dirent filetype field Mark Tinguely
2013-09-19 23:15 ` Dave Chinner
-- strict thread matches above, loose matches on Subject: below --
2013-10-16 22:36 [PATCH 0/3] xfsprogs: v4 inode type in directory Mark Tinguely
2013-10-16 22:36 ` [PATCH 2/3] xfsprog: add dirent filetype information for xfs_info Mark Tinguely
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox