From: majianpeng <majianpeng@gmail.com>
To: "Christoph Hellwig" <hch@infradead.org>,
fengguang.wu <fengguang.wu@intel.com>
Cc: "Andrew Morton" <akpm@linux-foundation.org>,
viro <viro@ZenIV.linux.org.uk>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>,
linux-mm <linux-mm@kvack.org>
Subject: Re: Re: [RFC] block_dev:Fix bug when read/write block-device which is larger than 16TB in 32bit-OS.
Date: Fri, 27 Jul 2012 13:38:51 +0800 [thread overview]
Message-ID: <201207271338486719122@gmail.com> (raw)
In-Reply-To: 20120724134838.GA26102@infradead.org
On 2012-07-24 21:48 Christoph Hellwig <hch@infradead.org> Wrote:
>On Tue, Jul 24, 2012 at 08:44:27PM +0800, majianpeng wrote:
>> On 2012-05-29 16:56 majianpeng <majianpeng@gmail.com> Wrote:
>> >The size of block-device is larger than 16TB, and the os is 32bit.
>> >If the offset of read/write is larger then 16TB. The index of address_space will
>> >overflow and supply data from low offset instead.
>
>We can't support > 16TB block device on 32-bit systems with 4k page
>size, just like we can't support files that large.
>
>For filesystems the s_maxbytes limit of MAX_LFS_FILESIZE takes care of
>that, but it seems like we miss that check for block devices.
>
>The proper fix is to add that check (either via s_maxbytes or by
>checking MAX_LFS_FILESIZE) to generic_write_checks and
>generic_file_aio_read (or a block device specific wrapper)
>
/* Page cache limit. The filesystems should put that into their s_maxbytes
limits, otherwise bad things can happen in VM. */
#if BITS_PER_LONG==32
#define MAX_LFS_FILESIZE (((u64)PAGE_CACHE_SIZE << (BITS_PER_LONG-1))-1)
#elif BITS_PER_LONG==64
#define MAX_LFS_FILESIZE 0x7fffffffffffffffUL
#endif
If we used MAX_LFS_FILESIZE to limit the block-device, so in 32bit-os, the size of block is
only 8T -1.
But in function do_generic_file_read():
>>index = *ppos >> PAGE_CACHE_SHIFT;
index is unsigned long type. So the ppos can 16T -1.
But the comment said:
>>/* Page cache limit. The filesystems should put that into their s_maxbytes
>> limits, otherwise bad things can happen in VM. */
Why ?
Thanks !
prev parent reply other threads:[~2012-07-27 5:38 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-29 8:56 [RFC] block_dev:Fix bug when read/write block-device which is larger than 16TB in 32bit-OS majianpeng
2012-07-24 12:44 ` majianpeng
2012-07-24 13:48 ` Christoph Hellwig
2012-07-26 5:22 ` majianpeng
2012-07-27 5:38 ` majianpeng [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=201207271338486719122@gmail.com \
--to=majianpeng@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=fengguang.wu@intel.com \
--cc=hch@infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=viro@ZenIV.linux.org.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.