svn commit: r297949 - stable/9/sys/fs/ext2fs

Kevin Lo kevlo at FreeBSD.org
Thu Apr 14 01:20:17 UTC 2016


Author: kevlo
Date: Thu Apr 14 01:20:15 2016
New Revision: 297949
URL: https://svnweb.freebsd.org/changeset/base/297949

Log:
  MFC r297335, r297479, r297695:
  
  - Update superblock and inode structs for ext4.
  - Update comment: Linux does set a randomized generation number of an inode
    on ext2/3/4.  While here use arc4random() instead of random().
  
  Reviewed by:	pfg

Modified:
  stable/9/sys/fs/ext2fs/ext2_alloc.c
  stable/9/sys/fs/ext2fs/ext2_dinode.h
  stable/9/sys/fs/ext2fs/ext2_vfsops.c
  stable/9/sys/fs/ext2fs/ext2fs.h

Modified: stable/9/sys/fs/ext2fs/ext2_alloc.c
==============================================================================
--- stable/9/sys/fs/ext2fs/ext2_alloc.c	Thu Apr 14 01:20:00 2016	(r297948)
+++ stable/9/sys/fs/ext2fs/ext2_alloc.c	Thu Apr 14 01:20:15 2016	(r297949)
@@ -405,10 +405,8 @@ ext2_valloc(struct vnode *pvp, int mode,
 
 	/*
 	 * Set up a new generation number for this inode.
-	 * XXX check if this makes sense in ext2
 	 */
-	if (ip->i_gen == 0 || ++ip->i_gen == 0)
-		ip->i_gen = random() / 2 + 1;
+	ip->i_gen = arc4random();
 
 	vfs_timestamp(&ts);
 	ip->i_birthtime = ts.tv_sec;

Modified: stable/9/sys/fs/ext2fs/ext2_dinode.h
==============================================================================
--- stable/9/sys/fs/ext2fs/ext2_dinode.h	Thu Apr 14 01:20:00 2016	(r297948)
+++ stable/9/sys/fs/ext2fs/ext2_dinode.h	Thu Apr 14 01:20:15 2016	(r297949)
@@ -131,6 +131,7 @@ struct ext2fs_dinode {
 	uint32_t	e2di_crtime;	/* 144: Creation (birth)time */
 	uint32_t	e2di_crtime_extra; /* 148: Extra creation (birth)time */
 	uint32_t	e2di_version_hi;  /* 152: High bits of inode version */
+	uint32_t	e2di_projid;	/* 156: Project ID */
 };
 
 #endif /* !_FS_EXT2FS_EXT2_DINODE_H_ */

Modified: stable/9/sys/fs/ext2fs/ext2_vfsops.c
==============================================================================
--- stable/9/sys/fs/ext2fs/ext2_vfsops.c	Thu Apr 14 01:20:00 2016	(r297948)
+++ stable/9/sys/fs/ext2fs/ext2_vfsops.c	Thu Apr 14 01:20:15 2016	(r297949)
@@ -308,8 +308,8 @@ ext2_check_sb_compat(struct ext2fs *es, 
 }
 
 /*
- * This computes the fields of the  ext2_sb_info structure from the
- * data in the ext2_super_block structure read in.
+ * This computes the fields of the m_ext2fs structure from the
+ * data in the ext2fs structure read in.
  */
 static int
 compute_sb_data(struct vnode *devvp, struct ext2fs *es,
@@ -586,7 +586,7 @@ ext2_mountfs(struct vnode *devvp, struct
 
 	/*
 	 * I don't know whether this is the right strategy. Note that
-	 * we dynamically allocate both an ext2_sb_info and an ext2_super_block
+	 * we dynamically allocate both an m_ext2fs and an ext2fs
 	 * while Linux keeps the super block in a locked buffer.
 	 */
 	ump->um_e2fs = malloc(sizeof(struct m_ext2fs),

Modified: stable/9/sys/fs/ext2fs/ext2fs.h
==============================================================================
--- stable/9/sys/fs/ext2fs/ext2fs.h	Thu Apr 14 01:20:00 2016	(r297948)
+++ stable/9/sys/fs/ext2fs/ext2fs.h	Thu Apr 14 01:20:15 2016	(r297949)
@@ -72,7 +72,7 @@ struct ext2fs {
 	uint32_t  e2fs_first_ino;	/* first non-reserved inode */
 	uint16_t  e2fs_inode_size;	/* size of inode structure */
 	uint16_t  e2fs_block_group_nr;	/* block grp number of this sblk*/
-	uint32_t  e2fs_features_compat; /*  compatible feature set */
+	uint32_t  e2fs_features_compat;	/* compatible feature set */
 	uint32_t  e2fs_features_incompat; /* incompatible feature set */
 	uint32_t  e2fs_features_rocompat; /* RO-compatible feature set */
 	uint8_t	  e2fs_uuid[16];	/* 128-bit uuid for volume */
@@ -88,25 +88,54 @@ struct ext2fs {
 	uint32_t  e3fs_last_orphan;	/* start of list of inodes to delete */
 	uint32_t  e3fs_hash_seed[4];	/* HTREE hash seed */
 	char      e3fs_def_hash_version; /* Default hash version to use */
-	char      e3fs_reserved_char_pad;
+	char      e3fs_jnl_backup_type;
+	uint16_t  e3fs_desc_size;	/* size of group descriptor */
 	uint32_t  e3fs_default_mount_opts;
 	uint32_t  e3fs_first_meta_bg;	/* First metablock block group */
-	uint32_t  e3fs_mkfs_time;      /* when the fs was created */
-	uint32_t  e3fs_jnl_blks[17];   /* backup of the journal inode */
-	uint32_t  e4fs_bcount_hi;      /* block count */
-	uint32_t  e4fs_rbcount_hi;     /* reserved blocks count */
-	uint32_t  e4fs_fbcount_hi;     /* free blocks count */
-	uint16_t  e4fs_min_extra_isize;/* all inodes have at least some bytes */
+	uint32_t  e3fs_mkfs_time;	/* when the fs was created */
+	uint32_t  e3fs_jnl_blks[17];	/* backup of the journal inode */
+	uint32_t  e4fs_bcount_hi;	/* high bits of blocks count */
+	uint32_t  e4fs_rbcount_hi;	/* high bits of reserved blocks count */
+	uint32_t  e4fs_fbcount_hi;	/* high bits of free blocks count */
+	uint16_t  e4fs_min_extra_isize; /* all inodes have at least some bytes */
 	uint16_t  e4fs_want_extra_isize; /* inodes must reserve some bytes */
-	uint32_t  e4fs_flags;	  /* miscellaneous flags */
-	uint16_t  e4fs_raid_stride;    /* RAID stride */
-	uint16_t  e4fs_mmpintv;	/* number of seconds to wait in MMP checking */
-	uint64_t  e4fs_mmpblk;	 /* block for multi-mount protection */
-	uint32_t  e4fs_raid_stripe_wid;/* blocks on all data disks (N * stride) */
-	uint8_t   e4fs_log_gpf;	/* FLEX_BG group size */
-	uint8_t   e4fs_char_pad2;
-	uint16_t  e4fs_pad;
-	uint32_t  reserved2[162];	/* Padding to the end of the block */
+	uint32_t  e4fs_flags;		/* miscellaneous flags */
+	uint16_t  e4fs_raid_stride;	/* RAID stride */
+	uint16_t  e4fs_mmpintv;		/* number of seconds to wait in MMP checking */
+	uint64_t  e4fs_mmpblk;		/* block for multi-mount protection */
+	uint32_t  e4fs_raid_stripe_wid; /* blocks on all data disks (N * stride) */
+	uint8_t   e4fs_log_gpf;		/* FLEX_BG group size */
+	uint8_t   e4fs_chksum_type;	/* metadata checksum algorithm used */
+	uint8_t   e4fs_encrypt;		/* versioning level for encryption */
+	uint8_t   e4fs_reserved_pad;
+	uint64_t  e4fs_kbytes_written;	/* number of lifetime kilobytes */
+	uint32_t  e4fs_snapinum;	/* inode number of active snapshot */
+	uint32_t  e4fs_snapid;		/* sequential ID of active snapshot */
+	uint64_t  e4fs_snaprbcount;	/* reserved blocks for active snapshot */
+	uint32_t  e4fs_snaplist;	/* inode number for on-disk snapshot */
+	uint32_t  e4fs_errcount;	/* number of file system errors */
+	uint32_t  e4fs_first_errtime;	/* first time an error happened */
+	uint32_t  e4fs_first_errino;	/* inode involved in first error */
+	uint64_t  e4fs_first_errblk;	/* block involved of first error */
+	uint8_t   e4fs_first_errfunc[32]; /* function where error happened */
+	uint32_t  e4fs_first_errline;	/* line number where error happened */
+	uint32_t  e4fs_last_errtime;	/* most recent time of an error */
+	uint32_t  e4fs_last_errino;	/* inode involved in last error */
+	uint32_t  e4fs_last_errline;	/* line number where error happened */
+	uint64_t  e4fs_last_errblk;	/* block involved of last error */
+	uint8_t   e4fs_last_errfunc[32]; /* function where error happened */
+	uint8_t   e4fs_mount_opts[64];
+	uint32_t  e4fs_usrquota_inum;	/* inode for tracking user quota */
+	uint32_t  e4fs_grpquota_inum;	/* inode for tracking group quota */
+	uint32_t  e4fs_overhead_clusters; /* overhead blocks/clusters */
+	uint32_t  e4fs_backup_bgs[2];	/* groups with sparse_super2 SBs */
+	uint8_t   e4fs_encrypt_algos[4]; /* encryption algorithms in use */
+	uint8_t   e4fs_encrypt_pw_salt[16]; /* salt used for string2key */
+	uint32_t  e4fs_lpf_ino;		/* location of the lost+found inode */
+	uint32_t  e4fs_proj_quota_inum;	/* inode for tracking project quota */
+	uint32_t  e4fs_chksum_seed;	/* checksum seed */
+	uint32_t  e4fs_reserved[98];	/* padding to the end of the block */
+	uint32_t  e4fs_sbchksum;	/* superblock checksum */
 };
 
 /*


More information about the svn-src-stable-9 mailing list