Messages in this thread | | | Date | Thu, 31 Jul 2014 10:13:15 -0400 | From | Matthew Wilcox <> | Subject | Re: [PATCH v8 04/22] Change direct_access calling convention |
| |
On Thu, Jul 31, 2014 at 01:11:42PM +0300, Boaz Harrosh wrote: > >>> + if (size < 0) > >> > >> if(size < PAGE_SIZE), No? > > > > No, absolutely not. PAGE_SIZE is unsigned long, which (if I understand > > my C integer promotions correctly) means that 'size' gets promoted to > > an unsigned long, and we compare them unsigned, so errors will never be > > caught by this check. > > Good point I agree that you need a cast ie. > > if(size < (long)PAGE_SIZE) > > The reason I'm saying this is because of a bug I actually hit when > playing with partitioning and fdisk, it came out that the last partition's > size was not page aligned, and code that checked for (< 0) crashed because > prd returned the last two sectors of the partition, since your API is sector > based this can happen for you here, before you are memseting a PAGE_SIZE > you need to test there is space, No?
Not in ext2/ext4. It requires block size == PAGE_SIZE, so it's never going to request the last partial block in a partition.
| |