On Wed, 2010-07-28 at 16:59 -0600, Moger, Babu wrote: > This patch releases the refcounts when activate is complete in alua handler. > > Signed-off-by: Babu Moger <babu.moger@xxxxxxx> > --- > --- linux-2.6.35-rc5/drivers/scsi/device_handler/scsi_dh_alua.c.orig 2010-07-23 05:58:39.000000000 -0500 > +++ linux-2.6.35-rc5/drivers/scsi/device_handler/scsi_dh_alua.c 2010-07-23 06:00:54.000000000 -0500 > @@ -287,6 +287,8 @@ done: > h->callback_fn(h->callback_data, err); > h->callback_fn = h->callback_data = NULL; > } > + kref_put(&h->sdev->scsi_dh_data->kref, scsi_dh_handler_cleanup); > + put_device(&h->sdev->sdev_gendev); > return; > } > > @@ -684,6 +686,8 @@ static int alua_activate(struct scsi_dev > out: > if (fn) > fn(data, err); > + kref_put(&sdev->scsi_dh_data->kref, scsi_dh_handler_cleanup); > + put_device(&sdev->sdev_gendev); This sequence is asking for trouble: having to remember to release two separate references at once. Logically what should happen is that the reference seems to be on scsi_dh_data->sdev, so it should be taken when that's initialised and put in scsi_dh_handler_cleanup ... so no-one has to worry about forgetting it. James -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel