[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-btrfs
Subject: Re: Re: [PATCH 01/18] btrfs: Remove u64 conversion for PAGE_CACHE_SIZE
From: Zhaolei <zhaolei () cn ! fujitsu ! com>
Date: 2010-03-31 4:04:14
Message-ID: 4BB2C9BE.6000402 () cn ! fujitsu ! com
[Download RAW message or body]
Chris Mason wrote:
> On Thu, Mar 25, 2010 at 08:27:26PM +0800, Miao Xie wrote:
>> From: Zhao Lei <zhaolei@cn.fujitsu.com>
>>
>> We don't need to convert PAGE_CACHE_SIZE to u64 in bit operation.
>
> For code like this:
>
> u64 size = (some number that doesn't fit in 32 bits)
>
> if (size & (PAGE_CACHE_SIZE - 1)) {
> }
>
> The answer should be the same either way. But if the code gets
> switched:
>
> start = size & ~(PAGE_CACHE_SIZE - 1);
>
> Some arches are going to get the wrong answer here. We had a few bugs
> like this early on and I went through and casted everything to be
> consistent. While this patch is correct, I would rather leave the casts
> to avoid subtle problems later on as the code changes.
>
> -chris
Hello, chris
Thanks for your explain.
I got your meaning.
But at least, we should make code unify:
// with u64:
[root@localhost btrfs]# grep '((u64)PAGE_CACHE_SIZE - 1)' *
compression.c: WARN_ON(start & ((u64)PAGE_CACHE_SIZE - 1));
extent_io.c: size_t start_offset = eb->start & ((u64)PAGE_CACHE_SIZE - 1);
extent_io.c: size_t start_offset = eb->start & ((u64)PAGE_CACHE_SIZE - 1);
extent_io.c: size_t start_offset = eb->start & ((u64)PAGE_CACHE_SIZE - 1);
extent_io.c: size_t start_offset = eb->start & ((u64)PAGE_CACHE_SIZE - 1);
extent_io.c: size_t start_offset = eb->start & ((u64)PAGE_CACHE_SIZE - 1);
extent_io.c: size_t start_offset = dst->start & ((u64)PAGE_CACHE_SIZE - 1);
extent_io.c: size_t start_offset = dst->start & ((u64)PAGE_CACHE_SIZE - 1);
extent_io.c: size_t start_offset = dst->start & ((u64)PAGE_CACHE_SIZE - 1);
// without u64:
[root@localhost btrfs]# grep '(PAGE_CACHE_SIZE - 1)' *
compression.c: size_t zero_offset = isize & (PAGE_CACHE_SIZE - 1);
extent_io.c: unsigned long offset = (*start) & (PAGE_CACHE_SIZE - 1);
extent_io.c: size_t zero_offset = last_byte & (PAGE_CACHE_SIZE - 1);
extent_io.c: pg_offset = i_size & (PAGE_CACHE_SIZE - 1);
extent_io.c: block_off_start = block_start & (PAGE_CACHE_SIZE - 1);
extent_io.c: page_offset = block_start & (PAGE_CACHE_SIZE - 1);
extent_io.c: if ((i == 0 && (eb->start & (PAGE_CACHE_SIZE - 1))) ||
extent_io.c: ((eb->start + eb->len) & (PAGE_CACHE_SIZE - 1)))) {
extent_io.c: size_t offset = start & (PAGE_CACHE_SIZE - 1);
file.c: int offset = pos & (PAGE_CACHE_SIZE - 1);
file.c: if ((pos & (PAGE_CACHE_SIZE - 1))) {
file.c: if ((pos + count) & (PAGE_CACHE_SIZE - 1)) {
file.c: size_t offset = pos & (PAGE_CACHE_SIZE - 1);
file-item.c: memcpy(eb_token + ((unsigned long)item & (PAGE_CACHE_SIZE - 1)),
inode.c: offset = start & (PAGE_CACHE_SIZE - 1);
inode.c: (PAGE_CACHE_SIZE - 1);
inode.c: ~(PAGE_CACHE_SIZE - 1);
inode.c: if ((end & (PAGE_CACHE_SIZE - 1)) == 0)
Thanks
Zhaolei
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic