@@ -1204,13 +1204,12 @@ static int null_transfer(struct nullb *nullb, struct page *page,
return err;
}
-static int null_handle_rq(struct nullb_cmd *cmd)
+static int null_handle_rq(struct nullb_cmd *cmd, sector_t sector)
{
struct request *rq = cmd->rq;
struct nullb *nullb = cmd->nq->dev->nullb;
int err;
unsigned int len;
- sector_t sector = blk_rq_pos(rq);
struct req_iterator iter;
struct bio_vec bvec;
@@ -1231,13 +1230,12 @@ static int null_handle_rq(struct nullb_cmd *cmd)
return 0;
}
-static int null_handle_bio(struct nullb_cmd *cmd)
+static int null_handle_bio(struct nullb_cmd *cmd, sector_t sector)
{
struct bio *bio = cmd->bio;
struct nullb *nullb = cmd->nq->dev->nullb;
int err;
unsigned int len;
- sector_t sector = bio->bi_iter.bi_sector;
struct bio_vec bvec;
struct bvec_iter iter;
@@ -1320,9 +1318,9 @@ static inline blk_status_t null_handle_memory_backed(struct nullb_cmd *cmd,
return null_handle_discard(dev, sector, nr_sectors);
if (dev->queue_mode == NULL_Q_BIO)
- err = null_handle_bio(cmd);
+ err = null_handle_bio(cmd, sector);
else
- err = null_handle_rq(cmd);
+ err = null_handle_rq(cmd, sector);
return errno_to_blk_status(err);
}
This is a preparation patch to add support for power_of_2 emulation in the null_blk driver. Currently, the sector value from null_handle_memory_backend is not forwarded to the lower layer functions such as null_handle_rq and null_handle_bio but instead they are fetched again from the request or the bio respectively. This behaviour will not work when zone size emulation is enabled. Instead of fetching the sector value again from the request or bio, pass down the sector value from null_handle_memory_backend to null_handle_rq/bio. Signed-off-by: Pankaj Raghav <p.raghav@samsung.com> --- drivers/block/null_blk/main.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-)