On Wed, May 23, 2018 at 02:19:40PM +0200, Christoph Hellwig wrote:
> -static void hctx_unlock(struct blk_mq_hw_ctx *hctx, int srcu_idx)
> -     __releases(hctx->srcu)
> -{
> -     if (!(hctx->flags & BLK_MQ_F_BLOCKING))
> -             rcu_read_unlock();
> -     else
> -             srcu_read_unlock(hctx->srcu, srcu_idx);
> -}
> -
> -static void hctx_lock(struct blk_mq_hw_ctx *hctx, int *srcu_idx)
> -     __acquires(hctx->srcu)
> -{
> -     if (!(hctx->flags & BLK_MQ_F_BLOCKING)) {
> -             /* shut up gcc false positive */
> -             *srcu_idx = 0;
> -             rcu_read_lock();
> -     } else
> -             *srcu_idx = srcu_read_lock(hctx->srcu);
> -}

I may have too ambitious on removing hctx_lock. That's actually nothing
to do with the completion issues, but it is necessary for quiesce to
work reliably. Otherwise, I still think there is some promise to the
reset of the approach.

Reply via email to