mount: fix the wrongly stored fs creation time
No binary (build failed)
—
(log yok)
| @@ -406,25 +406,43 @@ struct ext2_super_block { | |
| * Performance hints. Directory preallocation should only | |
| * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on. | |
| */ | |
| - | uint8_t s_prealloc_blocks; /* Nr of blocks to try to preallocate*/ |
| - | uint8_t s_prealloc_dir_blocks; /* Nr to preallocate for dirs */ |
| + | uint8_t s_prealloc_blocks; /* Nr of blocks to try to preallocate*/ |
| + | uint8_t s_prealloc_dir_blocks; /* Nr to preallocate for dirs */ |
| uint16_t s_reserved_gdt_blocks; /* Per group table for online growth */ | |
| /* | |
| * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set. | |
| */ | |
| - | uint8_t s_journal_uuid[16]; /* uuid of journal superblock */ |
| - | uint32_t s_journal_inum; /* inode number of journal file */ |
| + | /*D0*/ uint8_t s_journal_uuid[16]; /* uuid of journal superblock */ |
| + | /*E0*/ uint32_t s_journal_inum; /* inode number of journal file */ |
| uint32_t s_journal_dev; /* device number of journal file */ | |
| uint32_t s_last_orphan; /* start of list of inodes to delete */ | |
| uint32_t s_hash_seed[4]; /* HTREE hash seed */ | |
| uint8_t s_def_hash_version; /* Default hash version to use */ | |
| uint8_t s_jnl_backup_type; /* Default type of journal backup */ | |
| uint16_t s_reserved_word_pad; | |
| - | uint32_t s_default_mount_opts; |
| + | /*100*/ uint32_t s_default_mount_opts; |
| uint32_t s_first_meta_bg; /* First metablock group */ | |
| + | /* ext3 additions */ |
| uint32_t s_mkfs_time; /* When the filesystem was created */ | |
| uint32_t s_jnl_blocks[17]; /* Backup of the journal inode */ | |
| - | uint32_t s_reserved[172]; /* Padding to the end of the block */ |
| + | /* 64bit support valid if EXT4_FEATURE_COMPAT_64BIT */ |
| + | /*150*/ uint32_t s_blocks_count_hi; /* Blocks count */ |
| + | uint32_t s_r_blocks_count_hi; /* Reserved blocks count */ |
| + | uint32_t s_free_blocks_count_hi; /* Free blocks count */ |
| + | uint16_t s_min_extra_isize; /* All inodes have at least # bytes */ |
| + | uint16_t s_want_extra_isize; /* New inodes should reserve # bytes */ |
| + | uint32_t s_flags; /* Miscellaneous flags */ |
| + | uint16_t s_raid_stride; /* RAID stride */ |
| + | uint16_t s_mmp_interval; /* # seconds to wait in MMP checking */ |
| + | uint64_t s_mmp_block; /* Block for multi-mount protection */ |
| + | uint32_t s_raid_stripe_width; /* blocks on all data disks (N*stride)*/ |
| + | uint8_t s_log_groups_per_flex; /* FLEX_BG group size */ |
| + | uint8_t s_reserved_char_pad2; |
| + | uint16_t s_reserved_pad; |
| + | uint32_t s_reserved[162]; /* Padding to the end of the block */ |
| + | }; |
| + | struct BUG_ext2_super_block { |
| + | char bug[sizeof(struct ext2_super_block) == 1024 ? 1 : -1]; |
| }; | |
| /* | |
| @@ -36,7 +36,8 @@ testing "mount -o remount,mand" \ | |
| "mount -o loop mount.image1m $testdir "\ | |
| "&& grep -Fc $testdir </proc/mounts "\ | |
| "&& mount -o remount,mand $testdir "\ | |
| - | "&& grep -F $testdir </proc/mounts | grep -c '[, ]mand[, ]'" \ |
| + | "&& grep -F $testdir </proc/mounts | grep -c '[, ]mand[, ]'"\ |
| + | "|| grep -F $testdir </proc/mounts" \ |
| "1\n""1\n" \ | |
| "" "" | |
| @@ -83,4 +84,28 @@ b | |
| "" "" | |
| SKIP= | |
| + | |
| + | testing "mount RO loop" "\ |
| + | exec 2>&1 |
| + | umount -d mount.dir 2>/dev/null |
| + | rmdir mount.dir 2>/dev/null |
| + | mkdir -p mount.dir |
| + | ( |
| + | cd mount.dir || { echo 'cd error'; exit 1; } |
| + | mkdir z1 z2 || { echo 'mkdir error'; exit 1; } |
| + | mount -t tmpfs tmpfs z1 || { echo 'mount tmpfs error'; exit 1; } |
| + | dd if=/dev/zero of=z1/e2img count=10 bs=1M 2>/dev/null || { echo 'dd error'; exit 1; } |
| + | mke2fs -F z1/e2img 2>/dev/null >&2 || { echo 'mke2fs error'; exit 1; } |
| + | mount -r -o loop -t ext2 z1/e2img z2 || { echo 'mount -r -o loop error'; exit 1; } |
| + | mount -o remount,ro z1 || { echo 'mount -o remount,ro error'; exit 1; } |
| + | ) |
| + | umount -d mount.dir/z2 |
| + | ##losetup -d /dev/loop* |
| + | umount -d mount.dir/z1 |
| + | rm -rf mount.dir |
| + | echo DONE |
| + | " \ |
| + | "DONE\n" "" "" |
| + | |
| + | |
| exit $FAILCOUNT | |
| @@ -53,11 +53,6 @@ | |
| #define ENABLE_FEATURE_MKFS_EXT2_RESERVED_GDT 0 | |
| #define ENABLE_FEATURE_MKFS_EXT2_DIR_INDEX 1 | |
| - | // from e2fsprogs |
| - | #define s_reserved_gdt_blocks s_padding1 |
| - | #define s_mkfs_time s_reserved[0] |
| - | #define s_flags s_reserved[22] |
| - | |
| #define EXT2_HASH_HALF_MD4 1 | |
| #define EXT2_FLAGS_SIGNED_HASH 0x0001 | |
| #define EXT2_FLAGS_UNSIGNED_HASH 0x0002 | |
| @@ -482,8 +477,10 @@ int mkfs_ext2_main(int argc UNUSED_PARAM, char **argv) | |
| STORE_LE(sb->s_magic, EXT2_SUPER_MAGIC); | |
| STORE_LE(sb->s_inode_size, inodesize); | |
| // set "Required extra isize" and "Desired extra isize" fields to 28 | |
| - | if (inodesize != sizeof(*inode)) |
| - | STORE_LE(sb->s_reserved[21], 0x001C001C); |
| + | if (inodesize != sizeof(*inode)) { |
| + | STORE_LE(sb->s_min_extra_isize, 0x001c); |
| + | STORE_LE(sb->s_want_extra_isize, 0x001c); |
| + | } |
| STORE_LE(sb->s_first_ino, EXT2_GOOD_OLD_FIRST_INO); | |
| STORE_LE(sb->s_log_block_size, blocksize_log2 - EXT2_MIN_BLOCK_LOG_SIZE); | |
| STORE_LE(sb->s_log_frag_size, blocksize_log2 - EXT2_MIN_BLOCK_LOG_SIZE); | |