Message ID | 20250414112554.3025113-8-ming.lei@redhat.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | ublk: simplify & improve IO canceling | expand |
On Mon, Apr 14, 2025 at 07:25:48PM +0800, Ming Lei wrote: > Remove __ublk_quiesce_dev() and open code for updating device state as > QUIESCED. > > We needn't to drain inflight requests in __ublk_quiesce_dev() any more, > because all inflight requests are aborted in ublk char device release > handler. > > Also we needn't to set ->canceling in __ublk_quiesce_dev() any more > because it is done unconditionally now in ublk_ch_release(). > > Signed-off-by: Ming Lei <ming.lei@redhat.com> Reviewed-by: Uday Shankar <ushankar@purestorage.com> > --- > drivers/block/ublk_drv.c | 22 +--------------------- > 1 file changed, 1 insertion(+), 21 deletions(-) > > diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c > index e02f205f6da4..f827c2ef00a9 100644 > --- a/drivers/block/ublk_drv.c > +++ b/drivers/block/ublk_drv.c > @@ -209,7 +209,6 @@ struct ublk_params_header { > > static void ublk_stop_dev_unlocked(struct ublk_device *ub); > static void ublk_abort_queue(struct ublk_device *ub, struct ublk_queue *ubq); > -static void __ublk_quiesce_dev(struct ublk_device *ub); > static inline struct request *__ublk_check_and_get_req(struct ublk_device *ub, > struct ublk_queue *ubq, int tag, size_t offset); > static inline unsigned int ublk_req_build_flags(struct request *req); > @@ -1589,11 +1588,8 @@ static int ublk_ch_release(struct inode *inode, struct file *filp) > /* > * keep request queue as quiesced for queuing new IO > * during QUIESCED state > - * > - * request queue will be unquiesced in ending > - * recovery, see ublk_ctrl_end_recovery > */ > - __ublk_quiesce_dev(ub); > + ub->dev_info.state = UBLK_S_DEV_QUIESCED; > } else { > ub->dev_info.state = UBLK_S_DEV_FAIL_IO; > for (i = 0; i < ub->dev_info.nr_hw_queues; i++) > @@ -1839,22 +1835,6 @@ static void ublk_wait_tagset_rqs_idle(struct ublk_device *ub) > } > } > > -/* Now all inflight requests have been aborted */ > -static void __ublk_quiesce_dev(struct ublk_device *ub) > -{ > - int i; > - > - pr_devel("%s: quiesce ub: dev_id %d state %s\n", > - __func__, ub->dev_info.dev_id, > - ub->dev_info.state == UBLK_S_DEV_LIVE ? > - "LIVE" : "QUIESCED"); > - /* mark every queue as canceling */ > - for (i = 0; i < ub->dev_info.nr_hw_queues; i++) > - ublk_get_queue(ub, i)->canceling = true; > - ublk_wait_tagset_rqs_idle(ub); > - ub->dev_info.state = UBLK_S_DEV_QUIESCED; > -} > - > static void ublk_force_abort_dev(struct ublk_device *ub) > { > int i; > -- > 2.47.0 >
diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index e02f205f6da4..f827c2ef00a9 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -209,7 +209,6 @@ struct ublk_params_header { static void ublk_stop_dev_unlocked(struct ublk_device *ub); static void ublk_abort_queue(struct ublk_device *ub, struct ublk_queue *ubq); -static void __ublk_quiesce_dev(struct ublk_device *ub); static inline struct request *__ublk_check_and_get_req(struct ublk_device *ub, struct ublk_queue *ubq, int tag, size_t offset); static inline unsigned int ublk_req_build_flags(struct request *req); @@ -1589,11 +1588,8 @@ static int ublk_ch_release(struct inode *inode, struct file *filp) /* * keep request queue as quiesced for queuing new IO * during QUIESCED state - * - * request queue will be unquiesced in ending - * recovery, see ublk_ctrl_end_recovery */ - __ublk_quiesce_dev(ub); + ub->dev_info.state = UBLK_S_DEV_QUIESCED; } else { ub->dev_info.state = UBLK_S_DEV_FAIL_IO; for (i = 0; i < ub->dev_info.nr_hw_queues; i++) @@ -1839,22 +1835,6 @@ static void ublk_wait_tagset_rqs_idle(struct ublk_device *ub) } } -/* Now all inflight requests have been aborted */ -static void __ublk_quiesce_dev(struct ublk_device *ub) -{ - int i; - - pr_devel("%s: quiesce ub: dev_id %d state %s\n", - __func__, ub->dev_info.dev_id, - ub->dev_info.state == UBLK_S_DEV_LIVE ? - "LIVE" : "QUIESCED"); - /* mark every queue as canceling */ - for (i = 0; i < ub->dev_info.nr_hw_queues; i++) - ublk_get_queue(ub, i)->canceling = true; - ublk_wait_tagset_rqs_idle(ub); - ub->dev_info.state = UBLK_S_DEV_QUIESCED; -} - static void ublk_force_abort_dev(struct ublk_device *ub) { int i;
Remove __ublk_quiesce_dev() and open code for updating device state as QUIESCED. We needn't to drain inflight requests in __ublk_quiesce_dev() any more, because all inflight requests are aborted in ublk char device release handler. Also we needn't to set ->canceling in __ublk_quiesce_dev() any more because it is done unconditionally now in ublk_ch_release(). Signed-off-by: Ming Lei <ming.lei@redhat.com> --- drivers/block/ublk_drv.c | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-)