Messages in this thread | | | Date | Mon, 2 Jul 2018 09:55:43 +0200 | From | Jan Kara <> | Subject | Re: [PATCH 2/3] fs/ext2/inode: Fix a type cast error for fsdax |
| |
On Mon 02-07-18 14:23:42, Huaisheng Ye wrote: > ---- On Mon, 02 Jul 2018 03:26:00 +0800 Al Viro <viro@ZenIV.linux.org.uk> wrote ---- > > On Sun, Jul 01, 2018 at 02:18:47PM +0800, Huaisheng Ye wrote: > > > From: Huaisheng Ye <yehs1@lenovo.com> > > > > > > The type of offset within struct iomap is loff_t, which represents > > > file offset of mapping. > > > > > > In ext2_iomap_begin, iomap->offset shall be given a type cast as > > > loff_t instead of u64. > > > > Why is it an error? loff_t is uniformly typedefed to long long. > > In which case the second variant is different from the first one > > *and* does not step into nasal demon territory? > > Sorry for my inaccuracy. > The type of iomap->offset is loff_t, is it better to cast first_block > to loff_t, then do the left shift operation?
I think what Al meant is that in the kernel loff_t is 64-bit anyway and furthermore it is signed which means most people have to look up C standard to remember how right shift is (un)defined if it would overflow ;). So this does not really make the code any more readable. Rather on contrary...
Honza
> > > > > > - iomap->offset = (u64)first_block << blkbits; > > > + iomap->offset = (loff_t)first_block << blkbits; > > > > --- > Cheers, > Huaisheng > > -- Jan Kara <jack@suse.com> SUSE Labs, CR
| |