summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarel Zak2011-11-28 10:23:04 +0100
committerKarel Zak2011-11-28 10:23:04 +0100
commit5018dc3d864e784b5a7d30408937b9dc002d7f49 (patch)
tree2efca53815604f2027027037eb2ef381fda0c482
parentlibmount: fix compiler warning [-Wimplicit-function-declaration] (diff)
parentmkfs.minix: The total number of zones is limited to 65536 only on V1 filesystems (diff)
downloadkernel-qcow2-util-linux-5018dc3d864e784b5a7d30408937b9dc002d7f49.tar.gz
kernel-qcow2-util-linux-5018dc3d864e784b5a7d30408937b9dc002d7f49.tar.xz
kernel-qcow2-util-linux-5018dc3d864e784b5a7d30408937b9dc002d7f49.zip
Merge branch 'master' of https://github.com/maurizio-lombardi/util-linux
* 'master' of https://github.com/maurizio-lombardi/util-linux: mkfs.minix: The total number of zones is limited to 65536 only on V1 filesystems mkfs.minix: Some bug fixes: mkfs.minix: The s_blocksize field of the MinixV3 superblock must be initialized with a valid block size, not the total number of blocks of the device! mkfs.minix: inode numbers are 32-bit wide in V3 filesystems mkfs.minix: In Minix V3 filesystems the maximum filename lenght is 60 chars and the dirsize is 64 bytes. mkfs.minix: Fix super_set_nzones() mkfs.minix: remove redundant code
-rw-r--r--disk-utils/mkfs.minix.c53
1 files changed, 34 insertions, 19 deletions
diff --git a/disk-utils/mkfs.minix.c b/disk-utils/mkfs.minix.c
index 257bf8899..9c926106f 100644
--- a/disk-utils/mkfs.minix.c
+++ b/disk-utils/mkfs.minix.c
@@ -121,7 +121,6 @@ static int badblocks;
static size_t namelen = 30;
static size_t dirsize = 32;
static int magic = MINIX_SUPER_MAGIC2;
-static int version2;
static char root_block[MINIX_BLOCK_SIZE];
@@ -180,6 +179,8 @@ static void super_set_state(void)
Super.s_state |= MINIX_VALID_FS;
Super.s_state &= ~MINIX_ERROR_FS;
break;
+ default: /* v3 */
+ break;
}
}
@@ -398,8 +399,7 @@ static void make_root_inode_v2_v3 (void) {
inode->i_size = 3 * dirsize;
else {
root_block[2 * dirsize] = '\0';
- if (fs_version == 2)
- inode->i_size = 2 * dirsize;
+ inode->i_size = 2 * dirsize;
}
inode->i_mode = S_IFDIR + 0755;
@@ -420,6 +420,8 @@ static void super_set_nzones(void)
{
switch (fs_version) {
case 3:
+ Super3.s_zones = BLOCKS;
+ break;
case 2:
Super.s_zones = BLOCKS;
break;
@@ -487,7 +489,7 @@ static void setup_tables(void) {
if (fs_version == 3) {
Super3.s_log_zone_size = 0;
- Super3.s_blocksize = BLOCKS;
+ Super3.s_blocksize = MINIX_BLOCK_SIZE;
}
else {
Super.s_log_zone_size = 0;
@@ -509,12 +511,14 @@ static void setup_tables(void) {
else
inodes = ((inodes + MINIX_INODES_PER_BLOCK - 1) &
~(MINIX_INODES_PER_BLOCK - 1));
- if (inodes > MINIX_MAX_INODES)
- inodes = MINIX_MAX_INODES;
+
if (fs_version == 3)
Super3.s_ninodes = inodes;
- else
+ else {
Super.s_ninodes = inodes;
+ if (inodes > MINIX_MAX_INODES)
+ inodes = MINIX_MAX_INODES;
+ }
super_set_map_blocks(inodes);
imaps = get_nimaps();
@@ -697,10 +701,11 @@ int main(int argc, char ** argv) {
case '2':
case 'v': /* kept for backwards compatiblitly */
fs_version = 2;
- version2 = 1;
break;
case '3':
fs_version = 3;
+ namelen = 60;
+ dirsize = 64;
break;
default:
usage();
@@ -725,14 +730,25 @@ int main(int argc, char ** argv) {
}
check_mount(); /* is it already mounted? */
tmp = root_block;
- *(short *)tmp = 1;
- strcpy(tmp+2,".");
- tmp += dirsize;
- *(short *)tmp = 1;
- strcpy(tmp+2,"..");
- tmp += dirsize;
- *(short *)tmp = 2;
- strcpy(tmp+2,".badblocks");
+ if (fs_version == 3) {
+ *(uint32_t *)tmp = 1;
+ strcpy(tmp+4,".");
+ tmp += dirsize;
+ *(uint32_t *)tmp = 1;
+ strcpy(tmp+4,"..");
+ tmp += dirsize;
+ *(uint32_t *)tmp = 2;
+ strcpy(tmp+4, ".badblocks");
+ } else {
+ *(uint16_t *)tmp = 1;
+ strcpy(tmp+2,".");
+ tmp += dirsize;
+ *(uint16_t *)tmp = 1;
+ strcpy(tmp+2,"..");
+ tmp += dirsize;
+ *(uint16_t *)tmp = 2;
+ strcpy(tmp+2, ".badblocks");
+ }
if (stat(device_name, &statbuf) < 0)
err(MKFS_ERROR, _("%s: stat failed"), device_name);
if (S_ISBLK(statbuf.st_mode))
@@ -772,13 +788,12 @@ int main(int argc, char ** argv) {
if (fs_version == 3)
magic = MINIX3_SUPER_MAGIC;
-
- if (fs_version == 2) {
+ else if (fs_version == 2) {
if (namelen == 14)
magic = MINIX2_SUPER_MAGIC;
else
magic = MINIX2_SUPER_MAGIC2;
- } else
+ } else /* fs_version == 1 */
if (BLOCKS > MINIX_MAX_INODES)
BLOCKS = MINIX_MAX_INODES;
setup_tables();