@@ -1107,28 +1107,36 @@ static int null_transfer(struct nullb *nullb, struct page *page,
return err;
}
+static inline bool null_handle_special_op(struct nullb *nullb, sector_t sector,
+ unsigned int bytes, enum req_opf op)
+{
+ switch (op) {
+ case REQ_OP_DISCARD:
+ null_handle_discard(nullb, sector, bytes);
+ return true;
+ case REQ_OP_WRITE_ZEROES:
+ null_handle_write_zeroes(nullb, sector, bytes);
+ return true;
+ default:
+ break;
+ }
+ return false;
+}
+
static int null_handle_rq(struct nullb_cmd *cmd)
{
struct request *rq = cmd->rq;
struct nullb *nullb = cmd->nq->dev->nullb;
int err;
- unsigned int len;
+ unsigned int len = blk_rq_bytes(rq);
sector_t sector;
struct req_iterator iter;
struct bio_vec bvec;
sector = blk_rq_pos(rq);
- switch (req_op(rq)) {
- case REQ_OP_DISCARD:
- null_handle_discard(nullb, sector, blk_rq_bytes(rq));
+ if (null_handle_special_op(nullb, sector, len, req_op(rq)))
return 0;
- case REQ_OP_WRITE_ZEROES:
- null_handle_write_zeroes(nullb, sector, blk_rq_bytes(rq));
- return 0;
- default:
- break;
- }
spin_lock_irq(&nullb->lock);
rq_for_each_segment(bvec, rq, iter) {
@@ -1149,27 +1157,18 @@ static int null_handle_rq(struct nullb_cmd *cmd)
static int null_handle_bio(struct nullb_cmd *cmd)
{
- unsigned int blk_bio_bytes = bio_sectors(cmd->bio) << SECTOR_SHIFT;
+ unsigned int len = bio_sectors(cmd->bio) << SECTOR_SHIFT;
struct bio *bio = cmd->bio;
struct nullb *nullb = cmd->nq->dev->nullb;
int err;
- unsigned int len;
sector_t sector;
struct bio_vec bvec;
struct bvec_iter iter;
sector = bio->bi_iter.bi_sector;
- switch (bio_op(bio)) {
- case REQ_OP_DISCARD:
- null_handle_discard(nullb, sector, blk_bio_bytes);
+ if (null_handle_special_op(nullb, sector, len, bio_op(bio)))
return 0;
- case REQ_OP_WRITE_ZEROES:
- null_handle_write_zeroes(nullb, sector, blk_bio_bytes);
- return 0;
- default:
- break;
- }
spin_lock_irq(&nullb->lock);
bio_for_each_segment(bvec, bio, iter) {
Now that we have support for more than on special operations REQ_OP_DISCARD and REQ_OP_WRITE_ZEROES create a helper to isolate the code common code. Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com> --- drivers/block/null_blk_main.c | 41 +++++++++++++++++------------------ 1 file changed, 20 insertions(+), 21 deletions(-)