On Fri, Oct 9, 2009 at 11:16 AM, Prasad Joshi <[email protected]> wrote:
> Thanks Manish,
>
> The issue was with filesystem creation. It was not getting created
> properly. I used dumpe2fs command to verify the file system. Actually
> Superblock was written correctly but, few other fields like free block
> and free inode list etc were incorrect
>
> It seems to be working properly now
> # dumpe2fs /dev/ftl
> ...
> ...
> Group 0: (Blocks 0-65527)
> Primary superblock at 0, Group descriptors at 1-1
> Reserved GDT blocks at 2-8
> Block bitmap at 9 (+9), Inode bitmap at 10 (+10)
> Inode table at 11-1034 (+11)
> 64489 free blocks, 32757 free inodes, 2 directories
> Free blocks: 1039-65527
> Free inodes: 12-32768
> Group 1: (Blocks 65528-131055)
> Backup superblock at 65528, Group descriptors at 65529-65529
> Reserved GDT blocks at 65530-65536
> Block bitmap at 65537 (+9), Inode bitmap at 65538 (+10)
> Inode table at 65539-66562 (+11)
> 64493 free blocks, 32768 free inodes, 0 directories
> Free blocks: 66563-131055
> Free inodes: 32769-65536
>
> # mount
> ...
> ...
> /dev/ftl on /mntpt type ext2 (rw,relatime,errors=continue)
>
>
> The other problem which I am facing is with the blocksize.
>
> mkfs allows ext2 file system be created with blocksize=8192,
> overriding the default 4096. But, when I try to mount the file system
> it fails
>
> # mkfs -t ext2 -b 8192 /dev/ftl
> Warning: blocksize 8192 not usable on most systems.
> mke2fs 1.41.4 (27-Jan-2009)
> mkfs.ext2: 8192-byte blocks too big for system (max 4096)
> Proceed anyway? (y,n) y
> Warning: 8192-byte blocks too big for system (max 4096), forced to continue
> warning: 16 blocks unused.
>
> Filesystem label=
> OS type: Linux
> Block size=8192 (log=3)
> Fragment size=8192 (log=3)
> 65536 inodes, 131056 blocks
> ....
> ....
>
> # mount -t ext2 /dev/ftl /mntpt
> [54658.092031] EXT2-fs: blocksize too small for device.
> mount: mounting /dev/ftl on /mntpt failed: Invalid argument
>
> I tried specifying blocksize with the mount command, but it also fails
>
> # mount -t ext2 /dev/ftl /mntpt -o blocksize=8192
> mount: mounting /dev/ftl on /mntpt failed: Invalid argument
>
> The above command fails in parsing the options passed to the command
>
> The section "Mount options for ext2" of mount manpage does not mention
> blocksize option.
Yes, there is no "blocksize" option in ext2. For a list of valid
options see "tokens" table in ext2/super.c
>
> Is there anyway I can create ext2 filesystem with blocksize 8192?
No ... as far as I know.
Man page of mke2fs says :
-b block-size
Specify the size of blocks in bytes. Valid block-size
values are 1024, 2048 and 4096 bytes per block.
And the kernel code says :
int sb_set_blocksize(struct super_block *sb, int size)
{
if (set_blocksize(sb->s_bdev, size))
return 0;
/* If we get here, we know size is power of two
* and it's value is between 512 and PAGE_SIZE */
sb->s_blocksize = size;
sb->s_blocksize_bits = blksize_bits(size);
return sb->s_blocksize;
}
and the PAGE_SIZE is 4096.
Reiserfs supports blocksizes of 8192 , but its man page says :-
-b | --block-size N
N is block size in bytes. It may only be set to a power
of 2 within the 512-8192 interval. Note
that current versions of the kernel ( 2.6.19 ) do NOT
support any size other than 4096.
But is there any specific reason you want to use block sizes of 8192 ?
>
> Thanks and Regards,
> Prasad
>
> On Thu, Oct 8, 2009 at 6:41 PM, Manish Katiyar <[email protected]> wrote:
>> On Thu, Oct 8, 2009 at 12:38 PM, Prasad Joshi <[email protected]>
>> wrote:
>>> Hi,
>>>
>>> I am working on translation layer for flash. For the purpose testing I am
>>> using a disk file to simulate the flash behavior. So every read and write on
>>> the block device finally goes to a disk file, something similar to loop
>>> device, but in addition maintaining the flash property.
>>>
>>> I am able to create the file system on the device (/dev/ftl) but when I try
>>> to mount the device it fails with error "Invalid Argument".
>>
>> From the code I can see -EINVAL can be returned at lot of places. You
>> need to see dmesg to see the message which can help tracing.
>>
>>>
>>> I thought it is failing to read the super block of the file systems, but it
>>> seems like it did not fail in superblock read
>>>
>>> # strace -o out mount -t ext2 /dev/ftl /mntpt/
>>> [ 175.192033] Opening the device.
>>> [ 175.193599] IftlIoRead: offset=0x400 Length=0x400
>>> [ 175.193875] OffsetWithinPage: 400
>>> [ 175.195104] Read pos=1002535424, length=8192
>>> [ 175.195474] 0000 0001 0000 0004 3333 0000 eea5 0003 fff5 0000 0000 0000
>>> 0002 0000 0002 0000 8000 0000 8000 0000 2000 0000 0000 0000 8a9e 4acd 0000
>>> 0020 ef53 0001 0001 0000 8a9e 4acd 4e00 00ed 0000 0000 0001 0000 0000 0000
>>> 000b 0000 0100 0000 0038 0000 0002 0000 0003 0000 a037 8e0c d6b3 de11 abb8
>>> 0635 bff9 2b36 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
>>> 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
>>> 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
>>> 0000 003f 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
>>> 0000 a037 8f0c d6b3 de11 abb8 0635 bff9 2b36 0001 0000 0000 0000 0000 0000
>>> 8a9e 4acd 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
>>> 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
>>> 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 001c 001c 0001
>>> 0000 0000 0000 0000 0000 0000 0000 0000 0000 [ 175.215929] Closing the
>>> device.
>>> mount: mounting /dev/ftl on /mntpt/ failed: Invalid argument
>>>
>>> I tried printing the data in hex format just to make sure proper ext2 magic
>>> code in present in the superblock read from the flash device. "ef53" is the
>>> magic code of ext2 superblock, ftl device is correctly reading the magic
>>> code
>>>
>>> # cat out
>>> execve("/bin/mount", ["mount", "-t", "ext2", "/dev/ftl", "/mntpt/"], [/* 4
>>> vars */]) = 0
>>> uname({sys="Linux", node="(none)", ...}) = 0
>>> brk(0) = 0x72f000
>>> brk(0x72ff40) = 0x72ff40
>>> arch_prctl(ARCH_SET_FS, 0x72f880) = 0
>>> open("/dev/urandom", O_RDONLY) = -1 ENOENT (No such file or
>>> directory)
>>> brk(0x750f40) = 0x750f40
>>> brk(0x751000) = 0x751000
>>> getuid() = 0
>>> getuid() = 0
>>> geteuid() = 0
>>> stat("/dev/ftl", {st_mode=S_IFBLK|0644, st_rdev=makedev(254, 0), ...}) = 0
>>> mount("/dev/ftl", "/mntpt/", "ext2", MS_SILENT, "") = -1 EINVAL (Invalid
>>> argument)
>>> vfork() = 869
>>> --- SIGCHLD (Child exited) @ 0 (0) ---
>>> write(2, "mount: mounting /dev/ftl on /mntp"..., 61) = 61
>>> exit_group(-1) = ?
>>>
>>> What could be the reason of failure of mount?
>>>
>>> Thanks and Regards,
>>> Prasad
>>>
>>>
>>
>>
>>
>> --
>> Thanks -
>> Manish
>> ==================================
>> [$\*.^ -- I miss being one of them
>> ==================================
>>
>
--
Thanks -
Manish
==================================
[$\*.^ -- I miss being one of them
==================================
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to [email protected]
Please read the FAQ at http://kernelnewbies.org/FAQ