lkml.org 
[lkml]   [2013]   [Nov]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
SubjectRe: [PATCH] bio: fix argument of __bio_add_page() for max_sectors > 0xffff
From
2013/11/19 Jens Axboe <axboe@kernel.dk>:
> On 11/18/2013 06:11 AM, Akinobu Mita wrote:
>> The data type of max_sectors and max_hw_sectors in queue settings are
>> unsigned int. But these values are passed to __bio_add_page() as an
>> argument whose data type is unsigned short. In the worst case such as
>> max_sectors is 0x10000, bio_add_page() can't add a page and IOs can't
>> proceed.
>
> Thanks, added. Even at 512b sectors, 0xffff sectors would be a huuuuge
> page. So I don't think we'd ever see this bug hit, iirc huge pages are
> still broken down for IO. But it's better to be safe...

I hit this when I was trying to change the data type of max_sectors in
scsi host settings from 16-bit to 32-bit.

BTW, I found that BLKSECTGET only returns 16-bit of max_sectors. Should
we need the change like below?

case BLKSECTGET:
- return put_ushort(arg, queue_max_sectors(bdev_get_queue(bdev)));
+ max_sectors = min(0xffff,
+ queue_max_sectors(bdev_get_queue(bdev)));
+ return put_ushort(arg, max_sectors);


\
 
 \ /
  Last update: 2013-11-19 01:21    [W:0.112 / U:0.052 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site