Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 20 Dec 2012 02:22:36 +0000 (UTC)
From:      "Pedro F. Giffuni" <pfg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r244475 - head/sys/fs/ext2fs
Message-ID:  <201212200222.qBK2Mall046842@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: pfg
Date: Thu Dec 20 02:22:36 2012
New Revision: 244475
URL: http://svnweb.freebsd.org/changeset/base/244475

Log:
  More constant renaming in preparation for newer features.
  
  We also try to make better use of the fs flags instead of
  trying adapt the code according to the fs structures. In
  the case of subsecond timestamps and birthtime we now
  check that the feature is explicitly enabled: previously
  we only checked that the reserved space was available and
  silently wrote them.
  
  This approach is much safer, especially if the filesystem
  happens to use embedded inodes or support EAs.
  
  Discussed with:	Zheng Liu
  MFC after:	5 days

Modified:
  head/sys/fs/ext2fs/ext2_dinode.h
  head/sys/fs/ext2fs/ext2_inode_cnv.c
  head/sys/fs/ext2fs/ext2_vfsops.c
  head/sys/fs/ext2fs/ext2fs.h

Modified: head/sys/fs/ext2fs/ext2_dinode.h
==============================================================================
--- head/sys/fs/ext2fs/ext2_dinode.h	Thu Dec 20 00:57:24 2012	(r244474)
+++ head/sys/fs/ext2fs/ext2_dinode.h	Thu Dec 20 02:22:36 2012	(r244475)
@@ -60,15 +60,16 @@
 #define EXT2_APPEND		0x00000020 /* writes to file may only append */
 #define EXT2_NODUMP		0x00000040	/* do not dump file */
 #define EXT2_NOATIME		0x00000080	/* do not update atime */
-#define EXT2_INDEX		0x00001000 	/* hash-indexed directory */
-#define EXT2_IMAGIC		0x00002000 	/* AFS directory */
-#define EXT2_JOURNAL_DATA		0x00004000 /* file data should be journaled */
-#define EXT2_NOTAIL		0x00008000 /* file tail should not be merged */
-#define EXT2_DIRSYNC		0x00010000	/* dirsync behaviour */
-#define EXT2_TOPDIR		0x00020000 /* Top of directory hierarchies*/
-#define EXT2_HUGE_FILE		0x00040000	/* Set to each huge file */
-#define EXT2_EXTENTS		0x00080000	/* Inode uses extents */
-#define EXT2_EOFBLOCKS		0x00400000 /* Blocks allocated beyond EOF */
+
+#define EXT4_INDEX		0x00001000 	/* hash-indexed directory */
+#define EXT4_IMAGIC		0x00002000 	/* AFS directory */
+#define EXT4_JOURNAL_DATA	0x00004000 /* file data should be journaled */
+#define EXT4_NOTAIL		0x00008000 /* file tail should not be merged */
+#define EXT4_DIRSYNC		0x00010000	/* dirsync behaviour */
+#define EXT4_TOPDIR		0x00020000 /* Top of directory hierarchies*/
+#define EXT4_HUGE_FILE		0x00040000	/* Set to each huge file */
+#define EXT4_EXTENTS		0x00080000	/* Inode uses extents */
+#define EXT4_EOFBLOCKS		0x00400000 /* Blocks allocated beyond EOF */
 
 /*
  * Definitions for nanosecond timestamps.
@@ -78,8 +79,7 @@
 #define EXT3_EPOCH_MASK	((1 << EXT3_EPOCH_BITS) - 1)
 #define EXT3_NSEC_MASK	(~0UL << EXT3_EPOCH_BITS)
 
-#define E2DI_HAS_XTIME(ip)	(EXT2_INODE_SIZE((ip)->i_e2fs) > \
-				    E2FS_REV0_INODE_SIZE)
+#define E2DI_HAS_XTIME(ip)	(EXT2_HAS_RO_COMPAT_FEATURE(ip->i_e2fs, EXT2F_ROCOMPAT_EXTRA_ISIZE))
 
 /*
  * Structure of an inode on the disk

Modified: head/sys/fs/ext2fs/ext2_inode_cnv.c
==============================================================================
--- head/sys/fs/ext2fs/ext2_inode_cnv.c	Thu Dec 20 00:57:24 2012	(r244474)
+++ head/sys/fs/ext2fs/ext2_inode_cnv.c	Thu Dec 20 02:22:36 2012	(r244475)
@@ -27,17 +27,18 @@
  */
 #include <sys/param.h>
 #include <sys/systm.h>
+#include <sys/endian.h>
 #include <sys/lock.h>
 #include <sys/stat.h>
 #include <sys/vnode.h>
 
 #include <fs/ext2fs/inode.h>
 #include <fs/ext2fs/ext2fs.h>
-#include <fs/ext2fs/ext2_extern.h>
 #include <fs/ext2fs/ext2_dinode.h>
+#include <fs/ext2fs/ext2_extern.h>
 
 #define XTIME_TO_NSEC(x)	((x & EXT3_NSEC_MASK) >> 2)
-#define NSEC_TO_XTIME(t)	((t << 2) & EXT3_NSEC_MASK)
+#define NSEC_TO_XTIME(t)	(le32toh(t << 2) & EXT3_NSEC_MASK)
 
 void
 ext2_print_inode( in )

Modified: head/sys/fs/ext2fs/ext2_vfsops.c
==============================================================================
--- head/sys/fs/ext2fs/ext2_vfsops.c	Thu Dec 20 00:57:24 2012	(r244474)
+++ head/sys/fs/ext2fs/ext2_vfsops.c	Thu Dec 20 02:22:36 2012	(r244475)
@@ -349,7 +349,7 @@ compute_sb_data(struct vnode *devvp, str
 		}
 	}
 	/* Check for extra isize in big inodes. */
-	if (EXT2_HAS_RO_COMPAT_FEATURE(fs, EXT4F_ROCOMPAT_EXTRA_ISIZE) &&
+	if (EXT2_HAS_RO_COMPAT_FEATURE(fs, EXT2F_ROCOMPAT_EXTRA_ISIZE) &&
 	    EXT2_INODE_SIZE(fs) < sizeof(struct ext2fs_dinode)) {
 		printf("ext2fs: no space for extra inode timestamps\n");
 		return (EINVAL);

Modified: head/sys/fs/ext2fs/ext2fs.h
==============================================================================
--- head/sys/fs/ext2fs/ext2fs.h	Thu Dec 20 00:57:24 2012	(r244474)
+++ head/sys/fs/ext2fs/ext2fs.h	Thu Dec 20 02:22:36 2012	(r244475)
@@ -215,18 +215,18 @@ struct m_ext2fs {
 #define EXT2F_ROCOMPAT_SPARSESUPER	0x0001
 #define EXT2F_ROCOMPAT_LARGEFILE	0x0002
 #define EXT2F_ROCOMPAT_BTREE_DIR	0x0004
-#define EXT4F_ROCOMPAT_HUGE_FILE	0x0008
-#define EXT4F_ROCOMPAT_GDT_CSUM		0x0010
-#define EXT4F_ROCOMPAT_DIR_NLINK	0x0020
-#define EXT4F_ROCOMPAT_EXTRA_ISIZE	0x0040
+#define EXT2F_ROCOMPAT_HUGE_FILE	0x0008
+#define EXT2F_ROCOMPAT_GDT_CSUM		0x0010
+#define EXT2F_ROCOMPAT_DIR_NLINK	0x0020
+#define EXT2F_ROCOMPAT_EXTRA_ISIZE	0x0040
 
 #define EXT2F_INCOMPAT_COMP		0x0001
 #define EXT2F_INCOMPAT_FTYPE		0x0002
-#define EXT4F_INCOMPAT_META_BG		0x0010
-#define EXT4F_INCOMPAT_EXTENTS		0x0040
-#define EXT4F_INCOMPAT_64BIT		0x0080
-#define EXT4F_INCOMPAT_MMP		0x0100
-#define EXT4F_INCOMPAT_FLEX_BG		0x0200
+#define EXT2F_INCOMPAT_META_BG		0x0010
+#define EXT2F_INCOMPAT_EXTENTS		0x0040
+#define EXT2F_INCOMPAT_64BIT		0x0080
+#define EXT2F_INCOMPAT_MMP		0x0100
+#define EXT2F_INCOMPAT_FLEX_BG		0x0200
 
 /*
  * Features supported in this implementation
@@ -239,7 +239,7 @@ struct m_ext2fs {
 #define EXT2F_COMPAT_SUPP		0x0000
 #define EXT2F_ROCOMPAT_SUPP		(EXT2F_ROCOMPAT_SPARSESUPER | \
 					 EXT2F_ROCOMPAT_LARGEFILE | \
-					 EXT4F_ROCOMPAT_EXTRA_ISIZE)
+					 EXT2F_ROCOMPAT_EXTRA_ISIZE)
 #define EXT2F_INCOMPAT_SUPP		EXT2F_INCOMPAT_FTYPE
 
 /* Assume that user mode programs are passing in an ext2fs superblock, not



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201212200222.qBK2Mall046842>