• Nicolai Stange's avatar
    block: fix unintended fallthrough in generic_make_request_checks() · 58886785
    Nicolai Stange authored
    Since commit e73c23ff ("block: add async variant of
    blkdev_issue_zeroout") messages like the following show up:
    
      EXT4-fs (dm-1): Delayed block allocation failed for inode 2368848 at
                      logical offset 0 with max blocks 1 with error 95
      EXT4-fs (dm-1): This should not happen!! Data will be lost
    
    Due to the following fallthrough introduced with
    commit 2d253440 ("block: Define zoned block device operations"),
    generic_make_request_checks() would accept a REQ_OP_WRITE_SAME bio only
    if the block device supports "write same" *and* is a zoned one:
    
      switch (bio_op(bio)) {
      [...]
      case REQ_OP_WRITE_SAME:
            if (!bdev_write_same(bio->bi_bdev))
                    goto not_supported;
      case REQ_OP_ZONE_REPORT:
      case REQ_OP_ZONE_RESET:
                    if (!bdev_is_zoned(bio->bi_bdev))
                            goto not_supported;
                    break;
      [...]
      }
    
    Thus, although the bio setup as done by __blkdev_issue_write_same() from
    commit e73c23ff ("block: add async variant of blkdev_issue_zeroout")
    would succeed, its actual submission would not, resulting in the
    EOPNOTSUPP == 95.
    
    Fix this by removing the fallthrough which, due to the lack of an explicit
    comment, seems to be unintended anyway.
    
    Fixes: e73c23ff ("block: add async variant of blkdev_issue_zeroout")
    Fixes: 2d253440 ("block: Define zoned block device operations")
    Signed-off-by: default avatarNicolai Stange <nicstange@gmail.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    58886785
blk-core.c 93 KB