Re: [PATCH 07/10] bfq-iosched: fix NULL ioc check in bfq_get_rq_private

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

 



> Il giorno 16 giu 2017, alle ore 18:15, Christoph Hellwig <hch@xxxxxx> ha scritto:
> 
> icq_to_bic is a container_of operation, so we need to check for NULL
> before it.  Also move the check outside the spinlock while we're at
> it.
> 
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> ---
> block/bfq-iosched.c | 15 +++++----------
> 1 file changed, 5 insertions(+), 10 deletions(-)
> 
> diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c
> index 4f69e39c2f89..f037b005faa1 100644
> --- a/block/bfq-iosched.c
> +++ b/block/bfq-iosched.c
> @@ -4398,16 +4398,17 @@ static int bfq_get_rq_private(struct request_queue *q, struct request *rq,
> 			      struct bio *bio)
> {
> 	struct bfq_data *bfqd = q->elevator->elevator_data;
> -	struct bfq_io_cq *bic = icq_to_bic(rq->elv.icq);
> +	struct bfq_io_cq *bic;
> 	const int is_sync = rq_is_sync(rq);
> 	struct bfq_queue *bfqq;
> 	bool new_queue = false;
> 	bool split = false;
> 
> -	spin_lock_irq(&bfqd->lock);

Thanks for taking a step I feared here (basically for cowardice) ...

> +	if (!rq->elv.icq)
> +		return 1;
> +	bic = icq_to_bic(rq->elv.icq);
> 
> -	if (!bic)
> -		goto queue_fail;
> +	spin_lock_irq(&bfqd->lock);
> 
> 	bfq_check_ioprio_change(bic, bio);
> 
> @@ -4465,13 +4466,7 @@ static int bfq_get_rq_private(struct request_queue *q, struct request *rq,
> 		bfq_handle_burst(bfqd, bfqq);
> 
> 	spin_unlock_irq(&bfqd->lock);
> -
> 	return 0;
> -
> -queue_fail:
> -	spin_unlock_irq(&bfqd->lock);
> -
> -	return 1;
> }
> 
> static void bfq_idle_slice_timer_body(struct bfq_queue *bfqq)
> -- 
> 2.11.0
> 

Acked-by: Paolo Valente <paolo.valente@xxxxxxxxxx>





[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