diff options
Diffstat (limited to 'drivers/scsi/device_handler/scsi_dh_alua.c')
| -rw-r--r-- | drivers/scsi/device_handler/scsi_dh_alua.c | 5 | 
1 files changed, 4 insertions, 1 deletions
| diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c b/drivers/scsi/device_handler/scsi_dh_alua.c index 241829e59668..7bb20684e9fa 100644 --- a/drivers/scsi/device_handler/scsi_dh_alua.c +++ b/drivers/scsi/device_handler/scsi_dh_alua.c @@ -793,6 +793,7 @@ static void alua_rtpg_work(struct work_struct *work)  		WARN_ON(pg->flags & ALUA_PG_RUN_RTPG);  		WARN_ON(pg->flags & ALUA_PG_RUN_STPG);  		spin_unlock_irqrestore(&pg->lock, flags); +		kref_put(&pg->kref, release_port_group);  		return;  	}  	if (pg->flags & ALUA_SYNC_STPG) @@ -890,6 +891,7 @@ static void alua_rtpg_queue(struct alua_port_group *pg,  		/* Do not queue if the worker is already running */  		if (!(pg->flags & ALUA_PG_RUNNING)) {  			kref_get(&pg->kref); +			sdev = NULL;  			start_queue = 1;  		}  	} @@ -901,7 +903,8 @@ static void alua_rtpg_queue(struct alua_port_group *pg,  	if (start_queue &&  	    !queue_delayed_work(alua_wq, &pg->rtpg_work,  				msecs_to_jiffies(ALUA_RTPG_DELAY_MSECS))) { -		scsi_device_put(sdev); +		if (sdev) +			scsi_device_put(sdev);  		kref_put(&pg->kref, release_port_group);  	}  } |