aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/scsi_transport_iscsi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/scsi_transport_iscsi.c')
-rw-r--r--drivers/scsi/scsi_transport_iscsi.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
index 1ba98d255fac..59287601bd41 100644
--- a/drivers/scsi/scsi_transport_iscsi.c
+++ b/drivers/scsi/scsi_transport_iscsi.c
@@ -945,15 +945,26 @@ static int
945iscsi_tgt_dscvr(struct iscsi_transport *transport, 945iscsi_tgt_dscvr(struct iscsi_transport *transport,
946 struct iscsi_uevent *ev) 946 struct iscsi_uevent *ev)
947{ 947{
948 struct Scsi_Host *shost;
948 struct sockaddr *dst_addr; 949 struct sockaddr *dst_addr;
950 int err;
949 951
950 if (!transport->tgt_dscvr) 952 if (!transport->tgt_dscvr)
951 return -EINVAL; 953 return -EINVAL;
952 954
955 shost = scsi_host_lookup(ev->u.tgt_dscvr.host_no);
956 if (IS_ERR(shost)) {
957 printk(KERN_ERR "target discovery could not find host no %u\n",
958 ev->u.tgt_dscvr.host_no);
959 return -ENODEV;
960 }
961
962
953 dst_addr = (struct sockaddr *)((char*)ev + sizeof(*ev)); 963 dst_addr = (struct sockaddr *)((char*)ev + sizeof(*ev));
954 return transport->tgt_dscvr(ev->u.tgt_dscvr.type, 964 err = transport->tgt_dscvr(shost, ev->u.tgt_dscvr.type,
955 ev->u.tgt_dscvr.host_no, 965 ev->u.tgt_dscvr.enable, dst_addr);
956 ev->u.tgt_dscvr.enable, dst_addr); 966 scsi_host_put(shost);
967 return err;
957} 968}
958 969
959static int 970static int