mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
block: implement splitting of REQ_OP_WRITE_ZEROES bios
Copy and past the REQ_OP_WRITE_SAME code to prepare to implementations that limit the write zeroes size. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:
parent
1d62ac1363
commit
885fa13f65
@ -54,6 +54,20 @@ static struct bio *blk_bio_discard_split(struct request_queue *q,
|
|||||||
return bio_split(bio, split_sectors, GFP_NOIO, bs);
|
return bio_split(bio, split_sectors, GFP_NOIO, bs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct bio *blk_bio_write_zeroes_split(struct request_queue *q,
|
||||||
|
struct bio *bio, struct bio_set *bs, unsigned *nsegs)
|
||||||
|
{
|
||||||
|
*nsegs = 1;
|
||||||
|
|
||||||
|
if (!q->limits.max_write_zeroes_sectors)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (bio_sectors(bio) <= q->limits.max_write_zeroes_sectors)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return bio_split(bio, q->limits.max_write_zeroes_sectors, GFP_NOIO, bs);
|
||||||
|
}
|
||||||
|
|
||||||
static struct bio *blk_bio_write_same_split(struct request_queue *q,
|
static struct bio *blk_bio_write_same_split(struct request_queue *q,
|
||||||
struct bio *bio,
|
struct bio *bio,
|
||||||
struct bio_set *bs,
|
struct bio_set *bs,
|
||||||
@ -200,8 +214,7 @@ void blk_queue_split(struct request_queue *q, struct bio **bio,
|
|||||||
split = blk_bio_discard_split(q, *bio, bs, &nsegs);
|
split = blk_bio_discard_split(q, *bio, bs, &nsegs);
|
||||||
break;
|
break;
|
||||||
case REQ_OP_WRITE_ZEROES:
|
case REQ_OP_WRITE_ZEROES:
|
||||||
split = NULL;
|
split = blk_bio_write_zeroes_split(q, *bio, bs, &nsegs);
|
||||||
nsegs = (*bio)->bi_phys_segments;
|
|
||||||
break;
|
break;
|
||||||
case REQ_OP_WRITE_SAME:
|
case REQ_OP_WRITE_SAME:
|
||||||
split = blk_bio_write_same_split(q, *bio, bs, &nsegs);
|
split = blk_bio_write_same_split(q, *bio, bs, &nsegs);
|
||||||
|
Loading…
Reference in New Issue
Block a user