Re: [PATCH] blk-mq: don't leak preempt counter/q_usage_counter when allocating rq failed

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Aug 01, 2017 at 09:18:23AM -0600, Jens Axboe wrote:
> On 07/14/2017 02:41 AM, Ming Lei wrote:
> > From: Ming Lei <minlei@xxxxxxxxxx>
> > 
> > When blk_mq_get_request() failed, preempt counter isn't
> > released, and blk_mq_make_request() doesn't release the counter
> > too.
> > 
> > This patch fixes the issue, and makes sure that preempt counter
> > is only held if rq is allocated successfully. The same policy is
> > applied on .q_usage_counter too.
> 
> Can you replace the 'get_cpu' bool with just a ctx, and change
> the logic to put it if set? I think that would be cleaner to read,
> generally I hate bool 'do_something' variables that are set. It's
> much cleaner to have:
> 
> if (likely(!data->ctx))
> 	data->ctx = local_ctx = blk_mq_get_ctx(q);
> 
> and have the put case be
> 
> if (local_ctx)
> 	blk_mq_put_ctx(local_ctx);
> 
> Either that, or at least just have blk_mq_get_request() do:
> 
> drop_ctx = data->ctx == NULL;
> 
> instead. The 'get_cpu' naming is confusing, we're worried about dropping
> the sw queue here, the fact that it's related to get/put_cpu() need not
> bubble up here.

Good point, V2 is sent out with this change. Thanks your suggestion!

-- 
Ming



[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux