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