From: David Chow <davidchow@shaolinmicro.com>
To: Phillip Lougher <phillip@lougher.demon.co.uk>
Cc: linux-fsdevel@vger.kernel.org
Subject: Re: fs block size and PAGE_CACHE_SIZE
Date: Mon, 12 May 2003 01:12:53 +0800 [thread overview]
Message-ID: <3EBE8495.20601@shaolinmicro.com> (raw)
In-Reply-To: 3EB857E7.9090503@lougher.demon.co.uk
Phillip Lougher wrote:
> David Chow wrote:
>
>> Hi all,
>> I am wondering is it possible to implement an fs that has 16k block
>> size on a 4k system which this fs can be used both on IA-32 and IA-64
>> systems. In other words, is it possible (or someone already done) to
>> implement a file system that has 16k block size on a 4k paging system.
>>
>
> Both zisofs and squashfs (http://squashfs.sourceforge.net) use larger
> than 4K blocks. In the case of squashfs, it can uses blocks up to
> 32K. Both of these are compressed read-only filesystems.
>
>> Firstly, I think of working on a readpage() aop on a non aligned page
>> no (in the middle of a block), how could I efficient populate one 16k
>> block to page cache(4 pages) at one readpage() op? Since the fs
>> driver could not really create a mapped page or telling whether a
>> page (page no) is in the page cache or not. From my knowledge, one
>> way of doing this is to use the read_cache_page() callback to tell
>> whether the page is in page cache by knowing wether the callback is
>> triggered. If I simply call read_cache_page() to aligned page in
>> readpage() aop of unaligned pages, even the aligned page is
>> up_to_date afterwards, how would it possible for the readpage()
>> process to return an up_to_date page (guaranteed) for unaligned
>> pages? I thought of locking the page, but the problem is that
>> readpage() is called with the page locked, and call read_cache_page()
>> on a cached aligned page will not trigger an fs read (page cache hit
>> of aligned page doesn't mean an up_to_date for unaligned page). Since
>> my fs implementation would be very inefficient if doing a reading in
>> the middle of a block (compression file systems) or the overhead of
>> reading will be 4 times higher on small page cache size systems. I am
>> pleased to hear any suggestions on such implementations. Thanks.
>
>>
>
> Squashfs in the read_page routine pushes the extra pages (i.e. 3
> extra 4K pages in the case of a 16K block) into the page cache using
> grab_page_nowait(), which returns a page with the appropriate mapping
> to be filled and marked uptodate. To avoid race conditions this
> routine will not sleep if the page is already locked.
The case for sleep or no sleep only works on uni processor systems and
non-preemptive kernel. Since the file system is suppose to work on smp
systems which sleeping or not doesn't really helps. As you know, cases
where simultaneous read to the same block really block my head.
>
> Using read_cache_page() is dangerous, because it sleeps if the page
> you are trying to fill is already locked. When writing squashfs I hit
> the problem where read_page was being called almost simultaneously for
> different pages which were in the same (32K) block. The first
> invocation read the 32K block and locked it, then tried to push the
> pages into the page cache using read_cache_page(). However,
> read_cache_page slept when it tried to push the page that the second
> invocation had locked. The second invocation itself was sleeping
> holding that lock, whilst waiting for the overal 32K block lock .
Thanks for your pointers.
regards,
David Chow
prev parent reply other threads:[~2003-05-11 16:58 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-05-06 17:42 fs block size and PAGE_CACHE_SIZE David Chow
2003-05-06 19:34 ` Szakacsits Szabolcs
2003-05-06 21:08 ` Bryan Henderson
2003-05-07 0:59 ` Phillip Lougher
2003-05-12 1:59 ` David Chow
2003-05-06 21:34 ` Trond Myklebust
[not found] ` <3EBE85E8.50906@shaolinmicro.com>
2003-05-12 0:31 ` Trond Myklebust
2003-05-12 2:07 ` David Chow
2003-05-12 10:32 ` Anton Altaparmakov
2003-05-12 11:33 ` Phillip Lougher
2003-05-12 17:46 ` David Chow
2003-05-07 0:48 ` Phillip Lougher
2003-05-11 17:12 ` David Chow [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3EBE8495.20601@shaolinmicro.com \
--to=davidchow@shaolinmicro.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=phillip@lougher.demon.co.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox