dm: support REQ_OP_WRITE_ZEROES
Copy & paste from the REQ_OP_WRITE_SAME code. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Hannes Reinecke <hare@suse.com> Signed-off-by: Jens Axboe <axboe@fb.com>
This commit is contained in:

committed by
Jens Axboe

parent
0f5d690f7b
commit
ac62d6208a
@@ -312,9 +312,12 @@ static void do_region(int op, int op_flags, unsigned region,
|
||||
*/
|
||||
if (op == REQ_OP_DISCARD)
|
||||
special_cmd_max_sectors = q->limits.max_discard_sectors;
|
||||
else if (op == REQ_OP_WRITE_ZEROES)
|
||||
special_cmd_max_sectors = q->limits.max_write_zeroes_sectors;
|
||||
else if (op == REQ_OP_WRITE_SAME)
|
||||
special_cmd_max_sectors = q->limits.max_write_same_sectors;
|
||||
if ((op == REQ_OP_DISCARD || op == REQ_OP_WRITE_SAME) &&
|
||||
if ((op == REQ_OP_DISCARD || op == REQ_OP_WRITE_ZEROES ||
|
||||
op == REQ_OP_WRITE_SAME) &&
|
||||
special_cmd_max_sectors == 0) {
|
||||
dec_count(io, region, -EOPNOTSUPP);
|
||||
return;
|
||||
@@ -330,6 +333,7 @@ static void do_region(int op, int op_flags, unsigned region,
|
||||
*/
|
||||
switch (op) {
|
||||
case REQ_OP_DISCARD:
|
||||
case REQ_OP_WRITE_ZEROES:
|
||||
num_bvecs = 0;
|
||||
break;
|
||||
case REQ_OP_WRITE_SAME:
|
||||
@@ -347,7 +351,7 @@ static void do_region(int op, int op_flags, unsigned region,
|
||||
bio_set_op_attrs(bio, op, op_flags);
|
||||
store_io_and_region_in_bio(bio, io, region);
|
||||
|
||||
if (op == REQ_OP_DISCARD) {
|
||||
if (op == REQ_OP_DISCARD || op == REQ_OP_WRITE_ZEROES) {
|
||||
num_sectors = min_t(sector_t, special_cmd_max_sectors, remaining);
|
||||
bio->bi_iter.bi_size = num_sectors << SECTOR_SHIFT;
|
||||
remaining -= num_sectors;
|
||||
|
Reference in New Issue
Block a user