* [PATCH] allow to create a minix3fs with a blocksize != 1K
@ 2012-05-09 21:51 Vladimir 'φ-coder/phcoder' Serbinenko
2012-05-09 21:57 ` richard -rw- weinberger
0 siblings, 1 reply; 5+ messages in thread
From: Vladimir 'φ-coder/phcoder' Serbinenko @ 2012-05-09 21:51 UTC (permalink / raw)
To: linux-kernel
[-- Attachment #1.1: Type: text/plain, Size: 122 bytes --]
Have used it to test minixfs support with various block sizes.
--
Regards
Vladimir 'φ-coder/phcoder' Serbinenko
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: minix-block.diff --]
[-- Type: text/x-diff; name="minix-block.diff", Size: 9608 bytes --]
diff --git a/disk-utils/fsck.minix.c b/disk-utils/fsck.minix.c
index 139ab7a..7d1a737 100644
--- a/disk-utils/fsck.minix.c
+++ b/disk-utils/fsck.minix.c
@@ -497,9 +497,11 @@ write_super_block(void) {
else
Super.s_state &= ~MINIX_ERROR_FS;
- if (MINIX_BLOCK_SIZE != lseek(IN, MINIX_BLOCK_SIZE, SEEK_SET))
+ if (MINIX_SUPERBLOCK_OFFSET != lseek(IN, MINIX_SUPERBLOCK_OFFSET,
+ SEEK_SET))
die(_("seek failed in write_super_block"));
- if (MINIX_BLOCK_SIZE != write(IN, super_block_buffer, MINIX_BLOCK_SIZE))
+ if (MINIX_SUPERBLOCK_SIZE != write(IN, super_block_buffer,
+ MINIX_SUPERBLOCK_SIZE))
die(_("unable to write super-block"));
return;
}
@@ -543,33 +545,41 @@ get_dirsize(void) {
/* use defaults */
}
+int MINIX_BLOCK_SIZE = 0;
+
static void
read_superblock(void) {
- if (MINIX_BLOCK_SIZE != lseek(IN, MINIX_BLOCK_SIZE, SEEK_SET))
+ if (MINIX_SUPERBLOCK_OFFSET != lseek(IN, MINIX_SUPERBLOCK_OFFSET,
+ SEEK_SET))
die(_("seek failed"));
- super_block_buffer = calloc(1, MINIX_BLOCK_SIZE);
+ super_block_buffer = calloc(1, MINIX_SUPERBLOCK_SIZE);
if (!super_block_buffer)
die(_("unable to alloc buffer for superblock"));
- if (MINIX_BLOCK_SIZE != read(IN, super_block_buffer, MINIX_BLOCK_SIZE))
+ if (MINIX_SUPERBLOCK_SIZE
+ != read(IN, super_block_buffer, MINIX_SUPERBLOCK_SIZE))
die(_("unable to read super block"));
if (MAGIC == MINIX_SUPER_MAGIC) {
namelen = 14;
dirsize = 16;
fs_version = 1;
+ MINIX_BLOCK_SIZE = MINIX12_BLOCK_SIZE;
} else if (MAGIC == MINIX_SUPER_MAGIC2) {
namelen = 30;
dirsize = 32;
fs_version = 1;
+ MINIX_BLOCK_SIZE = MINIX12_BLOCK_SIZE;
} else if (MAGIC == MINIX2_SUPER_MAGIC) {
namelen = 14;
dirsize = 16;
fs_version = 2;
+ MINIX_BLOCK_SIZE = MINIX12_BLOCK_SIZE;
} else if (MAGIC == MINIX2_SUPER_MAGIC2) {
namelen = 30;
dirsize = 32;
fs_version = 2;
+ MINIX_BLOCK_SIZE = MINIX12_BLOCK_SIZE;
} else
die(_("bad magic number in super-block"));
if (get_zone_size() != 0 || MINIX_BLOCK_SIZE != 1024)
@@ -812,7 +822,7 @@ add_zone2(unsigned int *znr, int *corrected) {
static void
add_zone_ind(unsigned short *znr, int *corrected) {
- static char blk[MINIX_BLOCK_SIZE];
+ static char blk[MAX_MINIX_BLOCK_SIZE];
int i, chg_blk = 0;
int block;
@@ -828,7 +838,7 @@ add_zone_ind(unsigned short *znr, int *corrected) {
static void
add_zone_ind2(unsigned int *znr, int *corrected) {
- static char blk[MINIX_BLOCK_SIZE];
+ static char blk[MAX_MINIX_BLOCK_SIZE];
int i, chg_blk = 0;
int block;
@@ -844,7 +854,7 @@ add_zone_ind2(unsigned int *znr, int *corrected) {
static void
add_zone_dind(unsigned short *znr, int *corrected) {
- static char blk[MINIX_BLOCK_SIZE];
+ static char blk[MAX_MINIX_BLOCK_SIZE];
int i, blk_chg = 0;
int block;
@@ -860,7 +870,7 @@ add_zone_dind(unsigned short *znr, int *corrected) {
static void
add_zone_dind2(unsigned int *znr, int *corrected) {
- static char blk[MINIX_BLOCK_SIZE];
+ static char blk[MAX_MINIX_BLOCK_SIZE];
int i, blk_chg = 0;
int block;
@@ -876,7 +886,7 @@ add_zone_dind2(unsigned int *znr, int *corrected) {
static void
add_zone_tind2(unsigned int *znr, int *corrected) {
- static char blk[MINIX_BLOCK_SIZE];
+ static char blk[MAX_MINIX_BLOCK_SIZE];
int i, blk_chg = 0;
int block;
@@ -929,7 +939,7 @@ check_zones2(unsigned int i) {
static void
check_file(struct minix_inode *dir, unsigned int offset) {
- static char blk[MINIX_BLOCK_SIZE];
+ static char blk[MAX_MINIX_BLOCK_SIZE];
struct minix_inode *inode;
unsigned int ino;
char *name;
@@ -997,7 +1007,7 @@ check_file(struct minix_inode *dir, unsigned int offset) {
static void
check_file2(struct minix2_inode *dir, unsigned int offset) {
- static char blk[MINIX_BLOCK_SIZE];
+ static char blk[MAX_MINIX_BLOCK_SIZE];
struct minix2_inode *inode;
unsigned long ino;
char *name;
diff --git a/disk-utils/minix_programs.h b/disk-utils/minix_programs.h
index 4af1a34..8fced46 100644
--- a/disk-utils/minix_programs.h
+++ b/disk-utils/minix_programs.h
@@ -8,6 +8,7 @@
*/
extern int fs_version;
extern char *super_block_buffer;
+extern int MINIX_BLOCK_SIZE;
#define Super (*(struct minix_super_block *) super_block_buffer)
#define Super3 (*(struct minix3_super_block *) super_block_buffer)
diff --git a/disk-utils/mkfs.minix.c b/disk-utils/mkfs.minix.c
index 051cd5f..fd68fc9 100644
--- a/disk-utils/mkfs.minix.c
+++ b/disk-utils/mkfs.minix.c
@@ -123,7 +123,7 @@ static size_t namelen = 30;
static size_t dirsize = 32;
static int magic = MINIX_SUPER_MAGIC2;
-static char root_block[MINIX_BLOCK_SIZE];
+static char root_block[MAX_MINIX_BLOCK_SIZE];
static char boot_block_buffer[512];
@@ -146,7 +146,7 @@ static char *zone_map;
static void __attribute__((__noreturn__))
usage(void) {
- errx(MKFS_EX_USAGE, _("Usage: %s [-c | -l filename] [-nXX] [-iXX] /dev/name [blocks]"),
+ errx(MKFS_EX_USAGE, _("Usage: %s [-c | -l filename] [-nXX] [-BXX] [-iXX] /dev/name [blocks]"),
program_name);
}
@@ -189,6 +189,13 @@ static void write_tables(void) {
unsigned long imaps = get_nimaps();
unsigned long zmaps = get_nzmaps();
unsigned long buffsz = get_inode_buffer_size();
+ unsigned pad;
+ char padbuffer[2 * MINIX_BLOCK_SIZE];
+
+ memset (padbuffer, 0, 2 * MINIX_BLOCK_SIZE);
+
+ pad = 2 * MINIX_BLOCK_SIZE - (MINIX_SUPERBLOCK_OFFSET
+ + MINIX_SUPERBLOCK_SIZE);
/* Mark the super block valid. */
super_set_state();
@@ -198,12 +205,16 @@ static void write_tables(void) {
" in write_tables"), device_name);
if (write_all(DEV, boot_block_buffer, 512))
err(MKFS_EX_ERROR, _("%s: unable to clear boot sector"), device_name);
- if (MINIX_BLOCK_SIZE != lseek(DEV, MINIX_BLOCK_SIZE, SEEK_SET))
+ if (MINIX_SUPERBLOCK_OFFSET != lseek(DEV, MINIX_SUPERBLOCK_OFFSET,
+ SEEK_SET))
err(MKFS_EX_ERROR, _("%s: seek failed in write_tables"), device_name);
- if (write_all(DEV, super_block_buffer, MINIX_BLOCK_SIZE))
+ if (write_all(DEV, super_block_buffer, MINIX_SUPERBLOCK_SIZE))
err(MKFS_EX_ERROR, _("%s: unable to write super-block"), device_name);
+ if (write_all(DEV, padbuffer, pad))
+ err(MKFS_EX_ERROR, _("%s: unable to write super-block"), device_name);
+
if (write_all(DEV, inode_map, imaps * MINIX_BLOCK_SIZE))
err(MKFS_EX_ERROR, _("%s: unable to write inode map"), device_name);
@@ -588,7 +600,7 @@ static void alarm_intr(int alnum __attribute__ ((__unused__))) {
static void check_blocks(void) {
int try,got;
- static char buffer[MINIX_BLOCK_SIZE * TEST_BUFFER_BLOCKS];
+ static char buffer[MAX_MINIX_BLOCK_SIZE * TEST_BUFFER_BLOCKS];
unsigned long zones = get_nzones();
unsigned long first_zone = get_first_zone();
@@ -646,6 +658,8 @@ static void get_list_blocks(char *filename) {
printf(_("one bad block\n"));
}
+int MINIX_BLOCK_SIZE = 0;
+
int main(int argc, char ** argv) {
int i;
char * tmp;
@@ -653,6 +667,8 @@ int main(int argc, char ** argv) {
char * listfile = NULL;
char * p;
+ MINIX_BLOCK_SIZE = MINIX12_BLOCK_SIZE;
+
if (argc && *argv)
program_name = *argv;
if ((p = strrchr(program_name, '/')) != NULL)
@@ -675,8 +691,13 @@ int main(int argc, char ** argv) {
errx(MKFS_EX_ERROR, _("%s: bad inode size"), device_name);
opterr = 0;
- while ((i = getopt(argc, argv, "ci:l:n:v123")) != -1)
+ while ((i = getopt(argc, argv, "ci:l:n:v123B:")) != -1)
switch (i) {
+ case 'B':
+ MINIX_BLOCK_SIZE = strtoul(optarg,&tmp,0);
+ if (*tmp)
+ usage();
+ break;
case 'c':
check=1; break;
case 'i':
@@ -727,6 +748,13 @@ int main(int argc, char ** argv) {
}
}
+ if (fs_version != 3 && MINIX_BLOCK_SIZE != MINIX12_BLOCK_SIZE)
+ usage();
+
+ if (MINIX_BLOCK_SIZE % 512 || MINIX_BLOCK_SIZE < 1024
+ || MINIX_BLOCK_SIZE >= 65536)
+ usage();
+
if (!device_name) {
usage();
}
diff --git a/include/minix.h b/include/minix.h
index 57be239..059c050 100644
--- a/include/minix.h
+++ b/include/minix.h
@@ -60,12 +60,13 @@ struct minix3_super_block {
*/
#define MINIX_MAXPARTITIONS 4
-#define MINIX_BLOCK_SIZE_BITS 10
-#define MINIX_BLOCK_SIZE (1 << MINIX_BLOCK_SIZE_BITS)
-
#define MINIX_NAME_MAX 255 /* # chars in a file name */
#define MINIX_MAX_INODES 65535
+#define MAX_MINIX_BLOCK_SIZE 65536
+#define MINIX12_BLOCK_SIZE 1024
+#define MINIX_SUPERBLOCK_OFFSET 1024
+#define MINIX_SUPERBLOCK_SIZE 512
#define MINIX_INODES_PER_BLOCK ((MINIX_BLOCK_SIZE)/(sizeof (struct minix_inode)))
#define MINIX2_INODES_PER_BLOCK ((MINIX_BLOCK_SIZE)/(sizeof (struct minix2_inode)))
diff --git a/libblkid/src/superblocks/minix.c b/libblkid/src/superblocks/minix.c
index 54e7139..7bf9089 100644
--- a/libblkid/src/superblocks/minix.c
+++ b/libblkid/src/superblocks/minix.c
@@ -45,9 +45,9 @@ static int probe_minix(blkid_probe pr, const struct blkid_idmag *mag)
zones = version == 2 ? sb->s_zones : sb->s_nzones;
/* sanity checks to be sure that the FS is really minix */
- if (sb->s_imap_blocks * MINIX_BLOCK_SIZE * 8 < sb->s_ninodes + 1)
+ if (sb->s_imap_blocks * MINIX12_BLOCK_SIZE * 8 < sb->s_ninodes + 1)
return -1;
- if (sb->s_zmap_blocks * MINIX_BLOCK_SIZE * 8 < zones - sb->s_firstdatazone + 1)
+ if (sb->s_zmap_blocks * MINIX12_BLOCK_SIZE * 8 < zones - sb->s_firstdatazone + 1)
return -1;
} else if (version == 3) {
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 294 bytes --]
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] allow to create a minix3fs with a blocksize != 1K
2012-05-09 21:51 [PATCH] allow to create a minix3fs with a blocksize != 1K Vladimir 'φ-coder/phcoder' Serbinenko
@ 2012-05-09 21:57 ` richard -rw- weinberger
2012-05-09 22:04 ` Vladimir 'φ-coder/phcoder' Serbinenko
0 siblings, 1 reply; 5+ messages in thread
From: richard -rw- weinberger @ 2012-05-09 21:57 UTC (permalink / raw)
To: Vladimir 'φ-coder/phcoder' Serbinenko; +Cc: linux-kernel
On Wed, May 9, 2012 at 11:51 PM, Vladimir 'φ-coder/phcoder' Serbinenko
<phcoder@gmail.com> wrote:
> Have used it to test minixfs support with various block sizes.
>
Isn't this patch against disk-utils?
Why are you sending it to linux-kernel@..?
--
Thanks,
//richard
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] allow to create a minix3fs with a blocksize != 1K
2012-05-09 21:57 ` richard -rw- weinberger
@ 2012-05-09 22:04 ` Vladimir 'φ-coder/phcoder' Serbinenko
2012-05-09 22:08 ` richard -rw- weinberger
0 siblings, 1 reply; 5+ messages in thread
From: Vladimir 'φ-coder/phcoder' Serbinenko @ 2012-05-09 22:04 UTC (permalink / raw)
To: richard -rw- weinberger; +Cc: linux-kernel
[-- Attachment #1: Type: text/plain, Size: 799 bytes --]
On 09.05.2012 23:57, richard -rw- weinberger wrote:
> On Wed, May 9, 2012 at 11:51 PM, Vladimir 'φ-coder/phcoder' Serbinenko
> <phcoder@gmail.com> wrote:
>> Have used it to test minixfs support with various block sizes.
>>
> Isn't this patch against disk-utils?
> Why are you sending it to linux-kernel@..?
Yes, I've already noticed this and resent it to the util-linux list.
Do you know if linux-kernel is the right list for my other patches like
wrong minixfs block allocation check or AFFS race condition? It seems
they've all been ignored.
I have few other bugfixes or feature improvements for lesser filesystems
but I don't want to send them unless I feel like the patches are going
to somewhere else than /dev/null.
--
Regards
Vladimir 'φ-coder/phcoder' Serbinenko
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 294 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] allow to create a minix3fs with a blocksize != 1K
2012-05-09 22:04 ` Vladimir 'φ-coder/phcoder' Serbinenko
@ 2012-05-09 22:08 ` richard -rw- weinberger
2012-05-09 22:20 ` Vladimir 'φ-coder/phcoder' Serbinenko
0 siblings, 1 reply; 5+ messages in thread
From: richard -rw- weinberger @ 2012-05-09 22:08 UTC (permalink / raw)
To: Vladimir 'φ-coder/phcoder' Serbinenko; +Cc: linux-kernel
On Thu, May 10, 2012 at 12:04 AM, Vladimir 'φ-coder/phcoder'
Serbinenko <phcoder@gmail.com> wrote:
> Yes, I've already noticed this and resent it to the util-linux list.
> Do you know if linux-kernel is the right list for my other patches like
> wrong minixfs block allocation check or AFFS race condition? It seems
> they've all been ignored.
Not really.
At least send them to linux-fsdevel too.
Please read MAINTAINERS and Documentation/SubmittingPatches and
use checkpatch.pl/get_maintainer.pl.
--
Thanks,
//richard
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] allow to create a minix3fs with a blocksize != 1K
2012-05-09 22:08 ` richard -rw- weinberger
@ 2012-05-09 22:20 ` Vladimir 'φ-coder/phcoder' Serbinenko
0 siblings, 0 replies; 5+ messages in thread
From: Vladimir 'φ-coder/phcoder' Serbinenko @ 2012-05-09 22:20 UTC (permalink / raw)
To: richard -rw- weinberger; +Cc: linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1982 bytes --]
On 10.05.2012 00:08, richard -rw- weinberger wrote:
> On Thu, May 10, 2012 at 12:04 AM, Vladimir 'φ-coder/phcoder'
> Serbinenko <phcoder@gmail.com> wrote:
>> Yes, I've already noticed this and resent it to the util-linux list.
>> Do you know if linux-kernel is the right list for my other patches like
>> wrong minixfs block allocation check or AFFS race condition? It seems
>> they've all been ignored.
> Not really.
> At least send them to linux-fsdevel too.
Done
> Please read MAINTAINERS and Documentation/SubmittingPatches and
> use checkpatch.pl/get_maintainer.pl.
get_maintainer pointed to this list for minix and ufs (output at the end
of message). And for UFS the maintainer e-mail is likely to be abandoned
(mail.ru e-mails were popular in 90's but are mostly abandoned now). If
noone answers the patches on linux-fsdevel I'll try CC maintainers directly.
Will read files when time permits.
Thank you very much for the info.
$ ./scripts/get_maintainer.pl -f fs/ufs/
Evgeniy Dushistov <dushistov@mail.ru> (maintainer:UFS FILESYSTEM)
linux-kernel@vger.kernel.org (open list)
$ ./scripts/get_maintainer.pl -f fs/affs/
Al Viro <viro@zeniv.linux.org.uk> (commit_signer:9/11=82%)
Sage Weil <sage@newdream.net> (commit_signer:3/11=27%)
Christoph Hellwig <hch@lst.de> (commit_signer:3/11=27%)
Miklos Szeredi <mszeredi@suse.cz> (commit_signer:2/11=18%)
Josef Bacik <josef@redhat.com> (commit_signer:1/11=9%)
linux-fsdevel@vger.kernel.org (open list:AFFS FILE SYSTEM)
linux-kernel@vger.kernel.org (open list)
$ ./scripts/get_maintainer.pl -f fs/minix/
Al Viro <viro@zeniv.linux.org.uk> (commit_signer:14/16=88%)
Sage Weil <sage@newdream.net> (commit_signer:3/16=19%)
Christoph Hellwig <hch@lst.de> (commit_signer:3/16=19%)
Josh Boyer <jwboyer@redhat.com> (commit_signer:2/16=12%)
Miklos Szeredi <mszeredi@suse.cz> (commit_signer:1/16=6%)
linux-kernel@vger.kernel.org (open list)
--
Regards
Vladimir 'φ-coder/phcoder' Serbinenko
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 294 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-05-09 22:20 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-09 21:51 [PATCH] allow to create a minix3fs with a blocksize != 1K Vladimir 'φ-coder/phcoder' Serbinenko
2012-05-09 21:57 ` richard -rw- weinberger
2012-05-09 22:04 ` Vladimir 'φ-coder/phcoder' Serbinenko
2012-05-09 22:08 ` richard -rw- weinberger
2012-05-09 22:20 ` Vladimir 'φ-coder/phcoder' Serbinenko
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox