Re: [RFC PATCH] blk-core: remove blk_put_request()

2021-02-24 Thread Chaitanya Kulkarni
On 2/24/21 10:56, Christoph Hellwig wrote:
> On Wed, Feb 24, 2021 at 09:48:21AM -0700, Jens Axboe wrote:
>> Would make sense to rename blk_get_request() to blk_mq_alloc_request()
>> and then we have API symmetry. The get/put don't make sense when there
>> are no references involved.
>>
>> But it's a lot of churn for very little reward, which is always kind
>> of annoying. Especially for the person that has to carry the patches.
> Let's do the following:
>
>  - move the initialize_rq_fn call from blk_get_request into
>blk_mq_alloc_request and make the former a trivial alias for the
>latter
>  - migrate to the blk_mq_* versions on a per-driver/subsystem basis.
>The scsi migration depends on the first item above, so it will have
>to go with that or wait for the next merge window
>  - don't migrate the legacy ide driver, as it is about to be removed and
>has a huge number of blk_get_request calls
>

Okay, thanks for the feedback, will try and get something together.


Re: [RFC PATCH] blk-core: remove blk_put_request()

2021-02-24 Thread Christoph Hellwig
On Wed, Feb 24, 2021 at 09:48:21AM -0700, Jens Axboe wrote:
> Would make sense to rename blk_get_request() to blk_mq_alloc_request()
> and then we have API symmetry. The get/put don't make sense when there
> are no references involved.
> 
> But it's a lot of churn for very little reward, which is always kind
> of annoying. Especially for the person that has to carry the patches.

Let's do the following:

 - move the initialize_rq_fn call from blk_get_request into
   blk_mq_alloc_request and make the former a trivial alias for the
   latter
 - migrate to the blk_mq_* versions on a per-driver/subsystem basis.
   The scsi migration depends on the first item above, so it will have
   to go with that or wait for the next merge window
 - don't migrate the legacy ide driver, as it is about to be removed and
   has a huge number of blk_get_request calls


Re: [RFC PATCH] blk-core: remove blk_put_request()

2021-02-24 Thread Jens Axboe
On 2/24/21 4:53 AM, Stefan Hajnoczi wrote:
> On Mon, Feb 22, 2021 at 01:11:15PM -0800, Chaitanya Kulkarni wrote:
>> The function blk_put_request() is just a wrapper to
>> blk_mq_free_request(), remove the unnecessary wrapper.
>>
>> Any feedback is welcome on this RFC.
>>
>> Signed-off-by: Chaitanya Kulkarni 
>> ---
>>  block/blk-core.c   |  6 --
>>  block/blk-merge.c  |  2 +-
>>  block/bsg-lib.c|  4 ++--
>>  block/bsg.c|  4 ++--
>>  block/scsi_ioctl.c |  6 +++---
>>  drivers/block/paride/pd.c  |  2 +-
>>  drivers/block/pktcdvd.c|  2 +-
>>  drivers/block/virtio_blk.c |  2 +-
>>  drivers/cdrom/cdrom.c  |  4 ++--
>>  drivers/ide/ide-atapi.c|  2 +-
>>  drivers/ide/ide-cd.c   |  4 ++--
>>  drivers/ide/ide-cd_ioctl.c |  2 +-
>>  drivers/ide/ide-devsets.c  |  2 +-
>>  drivers/ide/ide-disk.c |  2 +-
>>  drivers/ide/ide-ioctls.c   |  4 ++--
>>  drivers/ide/ide-park.c |  2 +-
>>  drivers/ide/ide-pm.c   |  4 ++--
>>  drivers/ide/ide-tape.c |  2 +-
>>  drivers/ide/ide-taskfile.c |  2 +-
>>  drivers/md/dm-mpath.c  |  2 +-
>>  drivers/mmc/core/block.c   | 10 +-
>>  drivers/scsi/scsi_error.c  |  2 +-
>>  drivers/scsi/scsi_lib.c|  2 +-
>>  drivers/scsi/sg.c  |  6 +++---
>>  drivers/scsi/st.c  |  4 ++--
>>  drivers/scsi/ufs/ufshcd.c  |  6 +++---
>>  drivers/target/target_core_pscsi.c |  4 ++--
>>  fs/nfsd/blocklayout.c  |  4 ++--
>>  include/linux/blkdev.h |  1 -
>>  29 files changed, 46 insertions(+), 53 deletions(-)
>>
>> diff --git a/block/blk-core.c b/block/blk-core.c
>> index fc60ff208497..1754f5e7cc80 100644
>> --- a/block/blk-core.c
>> +++ b/block/blk-core.c
>> @@ -642,12 +642,6 @@ struct request *blk_get_request(struct request_queue 
>> *q, unsigned int op,
>>  }
>>  EXPORT_SYMBOL(blk_get_request);
>>  
>> -void blk_put_request(struct request *req)
>> -{
>> -blk_mq_free_request(req);
>> -}
>> -EXPORT_SYMBOL(blk_put_request);
> 
> blk_get_request() still exists after this patch. A "get" API usually has
> a corresponding "put" API. I'm not sure this patch helps the consistency
> and clarity of the code.
> 
> If you do go ahead, please update the blk_get_request() doc comment
> explicitly mentioning that blk_mq_free_request() needs to be called.

Would make sense to rename blk_get_request() to blk_mq_alloc_request()
and then we have API symmetry. The get/put don't make sense when there
are no references involved.

But it's a lot of churn for very little reward, which is always kind
of annoying. Especially for the person that has to carry the patches.

-- 
Jens Axboe



Re: [RFC PATCH] blk-core: remove blk_put_request()

2021-02-24 Thread Stefan Hajnoczi
On Mon, Feb 22, 2021 at 01:11:15PM -0800, Chaitanya Kulkarni wrote:
> The function blk_put_request() is just a wrapper to
> blk_mq_free_request(), remove the unnecessary wrapper.
> 
> Any feedback is welcome on this RFC.
> 
> Signed-off-by: Chaitanya Kulkarni 
> ---
>  block/blk-core.c   |  6 --
>  block/blk-merge.c  |  2 +-
>  block/bsg-lib.c|  4 ++--
>  block/bsg.c|  4 ++--
>  block/scsi_ioctl.c |  6 +++---
>  drivers/block/paride/pd.c  |  2 +-
>  drivers/block/pktcdvd.c|  2 +-
>  drivers/block/virtio_blk.c |  2 +-
>  drivers/cdrom/cdrom.c  |  4 ++--
>  drivers/ide/ide-atapi.c|  2 +-
>  drivers/ide/ide-cd.c   |  4 ++--
>  drivers/ide/ide-cd_ioctl.c |  2 +-
>  drivers/ide/ide-devsets.c  |  2 +-
>  drivers/ide/ide-disk.c |  2 +-
>  drivers/ide/ide-ioctls.c   |  4 ++--
>  drivers/ide/ide-park.c |  2 +-
>  drivers/ide/ide-pm.c   |  4 ++--
>  drivers/ide/ide-tape.c |  2 +-
>  drivers/ide/ide-taskfile.c |  2 +-
>  drivers/md/dm-mpath.c  |  2 +-
>  drivers/mmc/core/block.c   | 10 +-
>  drivers/scsi/scsi_error.c  |  2 +-
>  drivers/scsi/scsi_lib.c|  2 +-
>  drivers/scsi/sg.c  |  6 +++---
>  drivers/scsi/st.c  |  4 ++--
>  drivers/scsi/ufs/ufshcd.c  |  6 +++---
>  drivers/target/target_core_pscsi.c |  4 ++--
>  fs/nfsd/blocklayout.c  |  4 ++--
>  include/linux/blkdev.h |  1 -
>  29 files changed, 46 insertions(+), 53 deletions(-)
> 
> diff --git a/block/blk-core.c b/block/blk-core.c
> index fc60ff208497..1754f5e7cc80 100644
> --- a/block/blk-core.c
> +++ b/block/blk-core.c
> @@ -642,12 +642,6 @@ struct request *blk_get_request(struct request_queue *q, 
> unsigned int op,
>  }
>  EXPORT_SYMBOL(blk_get_request);
>  
> -void blk_put_request(struct request *req)
> -{
> - blk_mq_free_request(req);
> -}
> -EXPORT_SYMBOL(blk_put_request);

blk_get_request() still exists after this patch. A "get" API usually has
a corresponding "put" API. I'm not sure this patch helps the consistency
and clarity of the code.

If you do go ahead, please update the blk_get_request() doc comment
explicitly mentioning that blk_mq_free_request() needs to be called.

Stefan


signature.asc
Description: PGP signature


[RFC PATCH] blk-core: remove blk_put_request()

2021-02-22 Thread Chaitanya Kulkarni
The function blk_put_request() is just a wrapper to
blk_mq_free_request(), remove the unnecessary wrapper.

Any feedback is welcome on this RFC.

Signed-off-by: Chaitanya Kulkarni 
---
 block/blk-core.c   |  6 --
 block/blk-merge.c  |  2 +-
 block/bsg-lib.c|  4 ++--
 block/bsg.c|  4 ++--
 block/scsi_ioctl.c |  6 +++---
 drivers/block/paride/pd.c  |  2 +-
 drivers/block/pktcdvd.c|  2 +-
 drivers/block/virtio_blk.c |  2 +-
 drivers/cdrom/cdrom.c  |  4 ++--
 drivers/ide/ide-atapi.c|  2 +-
 drivers/ide/ide-cd.c   |  4 ++--
 drivers/ide/ide-cd_ioctl.c |  2 +-
 drivers/ide/ide-devsets.c  |  2 +-
 drivers/ide/ide-disk.c |  2 +-
 drivers/ide/ide-ioctls.c   |  4 ++--
 drivers/ide/ide-park.c |  2 +-
 drivers/ide/ide-pm.c   |  4 ++--
 drivers/ide/ide-tape.c |  2 +-
 drivers/ide/ide-taskfile.c |  2 +-
 drivers/md/dm-mpath.c  |  2 +-
 drivers/mmc/core/block.c   | 10 +-
 drivers/scsi/scsi_error.c  |  2 +-
 drivers/scsi/scsi_lib.c|  2 +-
 drivers/scsi/sg.c  |  6 +++---
 drivers/scsi/st.c  |  4 ++--
 drivers/scsi/ufs/ufshcd.c  |  6 +++---
 drivers/target/target_core_pscsi.c |  4 ++--
 fs/nfsd/blocklayout.c  |  4 ++--
 include/linux/blkdev.h |  1 -
 29 files changed, 46 insertions(+), 53 deletions(-)

diff --git a/block/blk-core.c b/block/blk-core.c
index fc60ff208497..1754f5e7cc80 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -642,12 +642,6 @@ struct request *blk_get_request(struct request_queue *q, 
unsigned int op,
 }
 EXPORT_SYMBOL(blk_get_request);
 
-void blk_put_request(struct request *req)
-{
-   blk_mq_free_request(req);
-}
-EXPORT_SYMBOL(blk_put_request);
-
 static void handle_bad_sector(struct bio *bio, sector_t maxsector)
 {
char b[BDEVNAME_SIZE];
diff --git a/block/blk-merge.c b/block/blk-merge.c
index ffb4aa0ea68b..f3493ee243fd 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -845,7 +845,7 @@ int blk_attempt_req_merge(struct request_queue *q, struct 
request *rq,
 
free = attempt_merge(q, rq, next);
if (free) {
-   blk_put_request(free);
+   blk_mq_free_request(free);
return 1;
}
 
diff --git a/block/bsg-lib.c b/block/bsg-lib.c
index 330fede77271..8ea2b33783fb 100644
--- a/block/bsg-lib.c
+++ b/block/bsg-lib.c
@@ -67,7 +67,7 @@ static int bsg_transport_fill_hdr(struct request *rq, struct 
sg_io_v4 *hdr,
 
 out_free_bidi_rq:
if (job->bidi_rq)
-   blk_put_request(job->bidi_rq);
+   blk_mq_free_request(job->bidi_rq);
 out:
kfree(job->request);
return ret;
@@ -128,7 +128,7 @@ static void bsg_transport_free_rq(struct request *rq)
 
if (job->bidi_rq) {
blk_rq_unmap_user(job->bidi_bio);
-   blk_put_request(job->bidi_rq);
+   blk_mq_free_request(job->bidi_rq);
}
 
kfree(job->request);
diff --git a/block/bsg.c b/block/bsg.c
index bd10922d5cbb..4ddc84aebecf 100644
--- a/block/bsg.c
+++ b/block/bsg.c
@@ -158,7 +158,7 @@ static int bsg_sg_io(struct request_queue *q, fmode_t mode, 
void __user *uarg)
 
ret = q->bsg_dev.ops->fill_hdr(rq, , mode);
if (ret) {
-   blk_put_request(rq);
+   blk_mq_free_request(rq);
return ret;
}
 
@@ -189,7 +189,7 @@ static int bsg_sg_io(struct request_queue *q, fmode_t mode, 
void __user *uarg)
 
 out_free_rq:
rq->q->bsg_dev.ops->free_rq(rq);
-   blk_put_request(rq);
+   blk_mq_free_request(rq);
if (!ret && copy_to_user(uarg, , sizeof(hdr)))
return -EFAULT;
return ret;
diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c
index 6599bac0a78c..52cd3fd924fc 100644
--- a/block/scsi_ioctl.c
+++ b/block/scsi_ioctl.c
@@ -366,7 +366,7 @@ static int sg_io(struct request_queue *q, struct gendisk 
*bd_disk,
 out_free_cdb:
scsi_req_free_cmd(req);
 out_put_request:
-   blk_put_request(rq);
+   blk_mq_free_request(rq);
return ret;
 }
 
@@ -509,7 +509,7 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk 
*disk, fmode_t mode,
}

 error:
-   blk_put_request(rq);
+   blk_mq_free_request(rq);
 
 error_free_buffer:
kfree(buffer);
@@ -534,7 +534,7 @@ static int __blk_send_generic(struct request_queue *q, 
struct gendisk *bd_disk,
scsi_req(rq)->cmd_len = 6;
blk_execute_rq(bd_disk, rq, 0);
err = scsi_req(rq)->result ? -EIO : 0;
-   blk_put_request(rq);
+   blk_mq_free_request(rq);
 
return err;
 }
diff --git a/drivers/block/paride/pd.c b/drivers/block/paride/pd.c
index 897acda20ac8..381fc0cf0b35 100644
--- a/drivers/block/paride/pd.c
+++