* mtdblock mount issue
@ 2008-02-04 14:19 Max Stirling
2008-02-06 16:20 ` Adams Richard-W36112
2008-02-07 16:28 ` Sergei Sharonov
0 siblings, 2 replies; 5+ messages in thread
From: Max Stirling @ 2008-02-04 14:19 UTC (permalink / raw)
To: linux-mtd
[-- Attachment #1: Type: text/plain, Size: 3381 bytes --]
Hi,
I am trying to mount a cramfs partition from flash. I have the low level
driver written and MTDBLOCK_RO module is enabled in MTD,
My mount fails with invalid argument error.
/mount: Mounting /dev/mtdblock on /home/crfs failed: Invalid argument/
I am using a 512 byte NAND flash 16byte spare.
I can find cramfs in /proc/filesytems and the mtdblock is under
/proc/devices.
I had enabled a few debug statements in the mtdblock_ro and the low
level nand driver code. I find that the mount is reading 32 pages after
which it fails with invalid argument. Below is the log.
If you see the log below, the flow of code is
cramfs_read ==> do_blktrans_request ==> mtdblock_readsect ==>
mt_read(my low level read function which returns success)
I even dumped the hex of the data being read by my low level driver
module and found to match the cramfs image that I wrote to the flash.
######################*LOG*##########################
/home # mkdir crfs
/home # cat /proc/devices | grep mtdblock
31 mtdblock
/home # cat proc/filesystems | grep cramfs
cramfs
/home #
/home # mknod /dev/mtdblock b 31 0
/home # mount -t cramfs /dev/mtdblock /home/crfs
mount: /dev/mtdblock is write-protected, mounting read-only
cramfs_read
do_blktrans_request nsect:8 block:0
mtdblock_readsect
mt_read offset:0
mt_read status:0
mtdblock_readsect
mt_read offset:512
mt_read status:0
mtdblock_readsect
mt_read offset:1024
mt_read status:0
mtdblock_readsect
mt_read offset:1536
mt_read status:0
mtdblock_readsect
mt_read offset:2048
mt_read status:0
mtdblock_readsect
mt_read offset:2560
mt_read status:0
mtdblock_readsect
mt_read offset:3072
mt_read status:0
mtdblock_readsect
mt_read offset:3584
mt_read status:0
do_blktrans_request nsect:8 block:0
mtdblock_readsect
mt_read offset:4096
mt_read status:0
mtdblock_readsect
mt_read offset:4608
mt_read status:0
mtdblock_readsect
mt_read offset:5120
mt_read status:0
mtdblock_readsect
mt_read offset:5632
mt_read status:0
mtdblock_readsect
mt_read offset:6144
mt_read status:0
mtdblock_readsect
mt_read offset:6656
mt_read status:0
mtdblock_readsect
mt_read offset:7168
mt_read status:0
mtdblock_readsect
mt_read offset:7680
mt_read status:0
do_blktrans_request nsect:8 block:0
mtdblock_readsect
mt_read offset:8192
mt_read status:0
mtdblock_readsect
mt_read offset:8704
mt_read status:0
mtdblock_readsect
mt_read offset:9216
mt_read status:0
mtdblock_readsect
mt_read offset:9728
mt_read status:0
mtdblock_readsect
mt_read offset:10240
mt_read status:0
mtdblock_readsect
mt_read offset:10752
mt_read status:0
mtdblock_readsect
mt_read offset:11264
mt_read status:0
mtdblock_readsect
mt_read offset:11776
mt_read status:0
do_blktrans_request nsect:8 block:0
mtdblock_readsect
mt_read offset:12288
mt_read status:0
mtdblock_readsect
mt_read offset:12800
mt_read status:0
mtdblock_readsect
mt_read offset:13312
mt_read status:0
mtdblock_readsect
mt_read offset:13824
mt_read status:0
mtdblock_readsect
mt_read offset:14336
mt_read status:0
mtdblock_readsect
mt_read offset:14848
mt_read status:0
mtdblock_readsect
mt_read offset:15360
mt_read status:0
mtdblock_readsect
mt_read offset:15872
mt_read status:0
cramfs_read
mount: Mounting /dev/mtdblock on /home/crfs failed: Invalid argument
/home #
########################################################
I hope I have provided the maximum information. Looking forward for some
help.
[-- Attachment #2: vicky_irobot.vcf --]
[-- Type: text/x-vcard, Size: 48 bytes --]
begin:vcard
fn:M S
n:S;M
version:2.1
end:vcard
^ permalink raw reply [flat|nested] 5+ messages in thread* RE: mtdblock mount issue
2008-02-04 14:19 mtdblock mount issue Max Stirling
@ 2008-02-06 16:20 ` Adams Richard-W36112
2008-02-07 6:16 ` Max Stirling
2008-02-07 16:28 ` Sergei Sharonov
1 sibling, 1 reply; 5+ messages in thread
From: Adams Richard-W36112 @ 2008-02-06 16:20 UTC (permalink / raw)
To: Max Stirling, linux-mtd
> -----Original Message-----
> From: linux-mtd-bounces@lists.infradead.org
> [mailto:linux-mtd-bounces@lists.infradead.org] On Behalf Of
> Max Stirling
> Sent: Monday, February 04, 2008 6:20 AM
> To: linux-mtd@lists.infradead.org
> Subject: mtdblock mount issue
>
> Hi,
>
> I am trying to mount a cramfs partition from flash. I have
> the low level driver written and MTDBLOCK_RO module is enabled in MTD,
>
> My mount fails with invalid argument error.
>
> /mount: Mounting /dev/mtdblock on /home/crfs failed: Invalid argument/
>
> I am using a 512 byte NAND flash 16byte spare.
>
> I can find cramfs in /proc/filesytems and the mtdblock is
> under /proc/devices.
>
> I had enabled a few debug statements in the mtdblock_ro and
> the low level nand driver code. I find that the mount is
> reading 32 pages after which it fails with invalid argument.
> Below is the log.
>
> If you see the log below, the flow of code is
>
> cramfs_read ==> do_blktrans_request ==> mtdblock_readsect
> ==> mt_read(my low level read function which returns success)
>
> I even dumped the hex of the data being read by my low level
> driver module and found to match the cramfs image that I
> wrote to the flash.
>
>
> ######################*LOG*##########################
>
> /home # mkdir crfs
> /home # cat /proc/devices | grep mtdblock
> 31 mtdblock
> /home # cat proc/filesystems | grep cramfs
> cramfs
> /home #
> /home # mknod /dev/mtdblock b 31 0
> /home # mount -t cramfs /dev/mtdblock /home/crfs
> mount: /dev/mtdblock is write-protected, mounting read-only
> cramfs_read
> do_blktrans_request nsect:8 block:0
> mtdblock_readsect
> mt_read offset:0
> mt_read status:0
> mtdblock_readsect
> mt_read offset:512
> mt_read status:0
> mtdblock_readsect
> mt_read offset:1024
> mt_read status:0
> mtdblock_readsect
> mt_read offset:1536
> mt_read status:0
> mtdblock_readsect
> mt_read offset:2048
> mt_read status:0
> mtdblock_readsect
> mt_read offset:2560
> mt_read status:0
> mtdblock_readsect
> mt_read offset:3072
> mt_read status:0
> mtdblock_readsect
> mt_read offset:3584
> mt_read status:0
> do_blktrans_request nsect:8 block:0
> mtdblock_readsect
> mt_read offset:4096
> mt_read status:0
> mtdblock_readsect
> mt_read offset:4608
> mt_read status:0
> mtdblock_readsect
> mt_read offset:5120
> mt_read status:0
> mtdblock_readsect
> mt_read offset:5632
> mt_read status:0
> mtdblock_readsect
> mt_read offset:6144
> mt_read status:0
> mtdblock_readsect
> mt_read offset:6656
> mt_read status:0
> mtdblock_readsect
> mt_read offset:7168
> mt_read status:0
> mtdblock_readsect
> mt_read offset:7680
> mt_read status:0
> do_blktrans_request nsect:8 block:0
> mtdblock_readsect
> mt_read offset:8192
> mt_read status:0
> mtdblock_readsect
> mt_read offset:8704
> mt_read status:0
> mtdblock_readsect
> mt_read offset:9216
> mt_read status:0
> mtdblock_readsect
> mt_read offset:9728
> mt_read status:0
> mtdblock_readsect
> mt_read offset:10240
> mt_read status:0
> mtdblock_readsect
> mt_read offset:10752
> mt_read status:0
> mtdblock_readsect
> mt_read offset:11264
> mt_read status:0
> mtdblock_readsect
> mt_read offset:11776
> mt_read status:0
> do_blktrans_request nsect:8 block:0
> mtdblock_readsect
> mt_read offset:12288
> mt_read status:0
> mtdblock_readsect
> mt_read offset:12800
> mt_read status:0
> mtdblock_readsect
> mt_read offset:13312
> mt_read status:0
> mtdblock_readsect
> mt_read offset:13824
> mt_read status:0
> mtdblock_readsect
> mt_read offset:14336
> mt_read status:0
> mtdblock_readsect
> mt_read offset:14848
> mt_read status:0
> mtdblock_readsect
> mt_read offset:15360
> mt_read status:0
> mtdblock_readsect
> mt_read offset:15872
> mt_read status:0
> cramfs_read
> mount: Mounting /dev/mtdblock on /home/crfs failed: Invalid argument
> /home #
>
> ########################################################
>
>
> I hope I have provided the maximum information. Looking
> forward for some
> help.
>
You need to mount the file system as read only. I believe I've seen this
error when I've mounted a squashfs (also a read only file system)
without specifying the read only option.
Try this command:
mount /dev/mtdblock /home/crfs -t cramfs -o ro
Rick
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: mtdblock mount issue
2008-02-06 16:20 ` Adams Richard-W36112
@ 2008-02-07 6:16 ` Max Stirling
0 siblings, 0 replies; 5+ messages in thread
From: Max Stirling @ 2008-02-07 6:16 UTC (permalink / raw)
To: Adams Richard-W36112; +Cc: linux-mtd
Adams Richard-W36112 wrote:
>> -----Original Message-----
>> From: linux-mtd-bounces@lists.infradead.org
>> [mailto:linux-mtd-bounces@lists.infradead.org] On Behalf Of
>> Max Stirling
>> Sent: Monday, February 04, 2008 6:20 AM
>> To: linux-mtd@lists.infradead.org
>> Subject: mtdblock mount issue
>>
>> Hi,
>>
>> I am trying to mount a cramfs partition from flash. I have
>> the low level driver written and MTDBLOCK_RO module is enabled in MTD,
>>
>> My mount fails with invalid argument error.
>>
>> /mount: Mounting /dev/mtdblock on /home/crfs failed: Invalid argument/
>>
>> I am using a 512 byte NAND flash 16byte spare.
>>
>> I can find cramfs in /proc/filesytems and the mtdblock is
>> under /proc/devices.
>>
>> I had enabled a few debug statements in the mtdblock_ro and
>> the low level nand driver code. I find that the mount is
>> reading 32 pages after which it fails with invalid argument.
>> Below is the log.
>>
>> If you see the log below, the flow of code is
>>
>> cramfs_read ==> do_blktrans_request ==> mtdblock_readsect
>> ==> mt_read(my low level read function which returns success)
>>
>> I even dumped the hex of the data being read by my low level
>> driver module and found to match the cramfs image that I
>> wrote to the flash.
>>
>>
>> ######################*LOG*##########################
>>
>> /home # mkdir crfs
>> /home # cat /proc/devices | grep mtdblock
>> 31 mtdblock
>> /home # cat proc/filesystems | grep cramfs
>> cramfs
>> /home #
>> /home # mknod /dev/mtdblock b 31 0
>> /home # mount -t cramfs /dev/mtdblock /home/crfs
>> mount: /dev/mtdblock is write-protected, mounting read-only
>> cramfs_read
>> do_blktrans_request nsect:8 block:0
>> mtdblock_readsect
>> mt_read offset:0
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:512
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:1024
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:1536
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:2048
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:2560
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:3072
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:3584
>> mt_read status:0
>> do_blktrans_request nsect:8 block:0
>> mtdblock_readsect
>> mt_read offset:4096
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:4608
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:5120
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:5632
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:6144
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:6656
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:7168
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:7680
>> mt_read status:0
>> do_blktrans_request nsect:8 block:0
>> mtdblock_readsect
>> mt_read offset:8192
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:8704
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:9216
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:9728
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:10240
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:10752
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:11264
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:11776
>> mt_read status:0
>> do_blktrans_request nsect:8 block:0
>> mtdblock_readsect
>> mt_read offset:12288
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:12800
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:13312
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:13824
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:14336
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:14848
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:15360
>> mt_read status:0
>> mtdblock_readsect
>> mt_read offset:15872
>> mt_read status:0
>> cramfs_read
>> mount: Mounting /dev/mtdblock on /home/crfs failed: Invalid argument
>> /home #
>>
>> ########################################################
>>
>>
>> I hope I have provided the maximum information. Looking
>> forward for some
>> help.
>>
>>
>
> You need to mount the file system as read only. I believe I've seen this
> error when I've mounted a squashfs (also a read only file system)
> without specifying the read only option.
>
> Try this command:
> mount /dev/mtdblock /home/crfs -t cramfs -o ro
>
> Rick
>
Thanks mate. After some debugging I found that in cramfs_read function
it calls read_cache_page and the returned superblock magic is not
correct from cramfs_read.
I am not sure whatz gone wrong since in my low level driver code I
dumped the data that is being copied to the buffer that readsect from
block_ro passed and the magic was right there.
Have to dig into what might be causing this wrong data to be returned by
read_cache_page. One more thing that I noticed was that for every run
the magic in the page that read_cache_page returns is different !!!
I am using linux kernel 2.6.10, the latest kernel calls
read_mapping_page_async in cramfs_read. Not sure if this was a fix to
what I have been seeing or something wrong here.
--
Max Stirling
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: mtdblock mount issue
2008-02-04 14:19 mtdblock mount issue Max Stirling
2008-02-06 16:20 ` Adams Richard-W36112
@ 2008-02-07 16:28 ` Sergei Sharonov
2008-02-08 10:31 ` Max Stirling
1 sibling, 1 reply; 5+ messages in thread
From: Sergei Sharonov @ 2008-02-07 16:28 UTC (permalink / raw)
To: linux-mtd
> I am trying to mount a cramfs partition from flash.
A word of warning. CRAMFS is broken in kernels < 2.6.18. As far as I can tell,
under heavy load (e.g. reading multiple files in parallel that are not cached)
it may fail with decompression errors. I think the issue is not exactly with
cramfs but with some interaction with page cache. Backporting just cramfs files
to 2.6.15 did not help. If you have drop_caches interface (kernel > 2.6.16 or
just backport it) it is easy to reproduce. Otherwise it happens _very_
infrequently because most of the time files are already cached. However the
consequences are severe - corrupted executables, etc.
Here is a script to reproduce the problem:
===============================================
# Copy large file from cramfs to tmpfs
cp /bin/smbd /tmp/
# First concurrent access to files/directories
while [ 1 ]; do cat /bin/* > /dev/null; done &
# Second concurrent access to test file and cache flush
for((i=0;i<99999;i++)) do echo -n "cycle=$i ";
cmp /bin/smbd /tmp/smbd ;
echo 3 > /proc/sys/vm/drop_caches ;
done
===============================================
Note that /bin is in cramfs. smbd can be any large file.
I've also seen statements that drop_caches interface is not 100% reliable.
Nevertheless I have experienced decompression errors even without forcing
cache purge.
Above script has caused failures on PowerPC/2.6.16 and ARM9/2.6.15.
2.6.18 and 2.6.23 seem ok.
Regards,
Sergei
P.S. Yes, cramfs has little to do with MTD but since ppl here use it with flash
I felt it was a good idea to post this warning.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: mtdblock mount issue
2008-02-07 16:28 ` Sergei Sharonov
@ 2008-02-08 10:31 ` Max Stirling
0 siblings, 0 replies; 5+ messages in thread
From: Max Stirling @ 2008-02-08 10:31 UTC (permalink / raw)
To: Sergei Sharonov; +Cc: linux-mtd
[-- Attachment #1: Type: text/plain, Size: 2166 bytes --]
Sergei Sharonov wrote:
>> I am trying to mount a cramfs partition from flash.
>>
>
> A word of warning. CRAMFS is broken in kernels < 2.6.18. As far as I can tell,
> under heavy load (e.g. reading multiple files in parallel that are not cached)
> it may fail with decompression errors. I think the issue is not exactly with
> cramfs but with some interaction with page cache. Backporting just cramfs files
> to 2.6.15 did not help. If you have drop_caches interface (kernel > 2.6.16 or
> just backport it) it is easy to reproduce. Otherwise it happens _very_
> infrequently because most of the time files are already cached. However the
> consequences are severe - corrupted executables, etc.
> Here is a script to reproduce the problem:
>
> ===============================================
> # Copy large file from cramfs to tmpfs
> cp /bin/smbd /tmp/
>
> # First concurrent access to files/directories
> while [ 1 ]; do cat /bin/* > /dev/null; done &
>
> # Second concurrent access to test file and cache flush
> for((i=0;i<99999;i++)) do echo -n "cycle=$i ";
> cmp /bin/smbd /tmp/smbd ;
> echo 3 > /proc/sys/vm/drop_caches ;
> done
> ===============================================
>
> Note that /bin is in cramfs. smbd can be any large file.
> I've also seen statements that drop_caches interface is not 100% reliable.
> Nevertheless I have experienced decompression errors even without forcing
> cache purge.
> Above script has caused failures on PowerPC/2.6.16 and ARM9/2.6.15.
> 2.6.18 and 2.6.23 seem ok.
>
> Regards,
>
> Sergei
>
> P.S. Yes, cramfs has little to do with MTD but since ppl here use it with flash
> I felt it was a good idea to post this warning.
>
>
> ______________________________________________________
> Linux MTD discussion mailing list
> http://lists.infradead.org/mailman/listinfo/linux-mtd/
>
thanks for the info. I think I will check out squashfs then.
But before that I wanted to fix the issue that I am seeing. There might
be something wrong in my implementation?
BTW I thought this was the right mailing list, since I am trying to
mount cramfs image using MTD. Can you point me to the right mailing list?
[-- Attachment #2: vicky_irobot.vcf --]
[-- Type: text/x-vcard, Size: 48 bytes --]
begin:vcard
fn:M S
n:S;M
version:2.1
end:vcard
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2008-02-08 10:33 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-04 14:19 mtdblock mount issue Max Stirling
2008-02-06 16:20 ` Adams Richard-W36112
2008-02-07 6:16 ` Max Stirling
2008-02-07 16:28 ` Sergei Sharonov
2008-02-08 10:31 ` Max Stirling
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox