• J
    block: fix max discard sectors limit · 871dd928
    James Bottomley 提交于
    linux-v3.8-rc1 and later support for plug for blkdev_issue_discard with
    commit 0cfbcafc
    (block: add plug for blkdev_issue_discard )
    
    For example,
    1) DISCARD rq-1 with size size 4GB
    2) DISCARD rq-2 with size size 1GB
    
    If these 2 discard requests get merged, final request size will be 5GB.
    
    In this case, request's __data_len field may overflow as it can store
    max 4GB(unsigned int).
    
    This issue was observed while doing mkfs.f2fs on 5GB SD card:
    https://lkml.org/lkml/2013/4/1/292
    
    Info: sector size = 512
    Info: total sectors = 11370496 (in 512bytes)
    Info: zone aligned segment0 blkaddr: 512
    [  257.789764] blk_update_request: bio idx 0 >= vcnt 0
    
    mkfs process gets stuck in D state and I see the following in the dmesg:
    
    [  257.789733] __end_that: dev mmcblk0: type=1, flags=122c8081
    [  257.789764]   sector 4194304, nr/cnr 2981888/4294959104
    [  257.789764]   bio df3840c0, biotail df3848c0, buffer   (null), len
    1526726656
    [  257.789764] blk_update_request: bio idx 0 >= vcnt 0
    [  257.794921] request botched: dev mmcblk0: type=1, flags=122c8081
    [  257.794921]   sector 4194304, nr/cnr 2981888/4294959104
    [  257.794921]   bio df3840c0, biotail df3848c0, buffer   (null), len
    1526726656
    
    This patch fixes this issue.
    Reported-by: NMax Filippov <jcmvbkbc@gmail.com>
    Signed-off-by: NJames Bottomley <JBottomley@Parallels.com>
    Signed-off-by: NNamjae Jeon <namjae.jeon@samsung.com>
    Tested-by: NMax Filippov <jcmvbkbc@gmail.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: NJens Axboe <axboe@kernel.dk>
    871dd928
blkdev.h 44.6 KB