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

Re: [PATCH v2] nbd: Fix NULL pointer in flush_workqueue



…
> +++ b/drivers/block/nbd.c
> @@ -2011,12 +2011,14 @@ static int nbd_genl_disconnect(struct sk_buff *skb, struct genl_info *info)
>  		       index);
>  		return -EINVAL;
>  	}
> +	mutex_lock(&nbd->config_lock);
>  	if (!refcount_inc_not_zero(&nbd->refs)) {
> -		mutex_unlock(&nbd_index_mutex);
> -		printk(KERN_ERR "nbd: device at index %d is going down\n",
> -		       index);
> -		return -EINVAL;
> +		goto unlock;
>  	}
> +	if (!nbd->recv_workq) {
> +		goto unlock;
> +	}

How do you think about to use the following patch variant
(so that unwanted curly brackets would be avoided for proposed single statements
in two if branches)?

+	mutex_lock(&nbd->config_lock);
-	if (!refcount_inc_not_zero(&nbd->refs)) {
+	if (!refcount_inc_not_zero(&nbd->refs) || !nbd->recv_workq) {
+		mutex_unlock(&nbd->config_lock);
 		mutex_unlock(&nbd_index_mutex);
 		printk(KERN_ERR "nbd: device at index %d is going down\n",
 		       index);
 		return -EINVAL;
 	}


By the way:
Would you like to replace the following two statements by the statement
“goto put_nbd;” in another update step for this function implementation?

		nbd_put(nbd);
		return 0;


Regards,
Markus


Reply to: