Mike Christie wrote:
> 
> Resend it and then let's send it to James with the other iscsi patches 
> for 2.6.26. Thanks.
> 

See attached. I did it so we could get this out.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"open-iscsi" group.
To post to this group, send email to open-iscsi@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at http://groups.google.com/group/open-iscsi
-~----------~----~----~----~------~----~------~--~---

>From d702f811401fd0d8ea7386b85d748420b235fd2e Mon Sep 17 00:00:00 2001
From: Mike Christie <[EMAIL PROTECTED]>
Date: Wed, 16 Apr 2008 11:40:27 -0500
Subject: [PATCH 4/4] iscsi class: Notify when transport is unloaded

>From Erez:
When a transport (e.g. iscsi_tcp, ib_iser) is unloaded, a notification
must be sent to userspace. This will allow the userspace code to release
all transport related resources.

Minor gfp cleanup by Mike Christie.

Signed-off-by: Erez Zilber <[EMAIL PROTECTED]>
Signed-off-by: Mike Christie <[EMAIL PROTECTED]>
---
 drivers/scsi/scsi_transport_iscsi.c |   28 ++++++++++++++++++++++++++++
 include/scsi/iscsi_if.h             |    7 ++++---
 2 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
index ca7bb6f..ad48845 100644
--- a/drivers/scsi/scsi_transport_iscsi.c
+++ b/drivers/scsi/scsi_transport_iscsi.c
@@ -1671,6 +1671,32 @@ free_priv:
 }
 EXPORT_SYMBOL_GPL(iscsi_register_transport);
 
+void iscsi_trans_error(struct iscsi_transport *tt)
+{
+	struct nlmsghdr *nlh;
+	struct sk_buff *skb;
+	struct iscsi_uevent *ev;
+	int len = NLMSG_SPACE(sizeof(*ev));
+	struct iscsi_internal *priv;
+
+	priv = iscsi_if_transport_lookup(tt);
+	if (!priv)
+		return;
+
+	skb = alloc_skb(len, GFP_KERNEL);
+	if (!skb) {
+		printk(KERN_ERR "iscsi: gracefully ignored transport error\n");
+		return;
+	}
+
+	nlh = __nlmsg_put(skb, priv->daemon_pid, 0, 0, (len - sizeof(*nlh)), 0);
+	ev = NLMSG_DATA(nlh);
+	ev->transport_handle = iscsi_handle(tt);
+	ev->type = ISCSI_KEVENT_TRANS_ERROR;
+
+	iscsi_broadcast_skb(skb, GFP_KERNEL);
+}
+
 int iscsi_unregister_transport(struct iscsi_transport *tt)
 {
 	struct iscsi_internal *priv;
@@ -1680,6 +1706,8 @@ int iscsi_unregister_transport(struct iscsi_transport *tt)
 
 	mutex_lock(&rx_queue_mutex);
 
+	iscsi_trans_error(tt);
+
 	priv = iscsi_if_transport_lookup(tt);
 	BUG_ON (!priv);
 
diff --git a/include/scsi/iscsi_if.h b/include/scsi/iscsi_if.h
index e19e584..d9b297a 100644
--- a/include/scsi/iscsi_if.h
+++ b/include/scsi/iscsi_if.h
@@ -55,9 +55,10 @@ enum iscsi_uevent_e {
 	ISCSI_KEVENT_RECV_PDU		= KEVENT_BASE + 1,
 	ISCSI_KEVENT_CONN_ERROR		= KEVENT_BASE + 2,
 	ISCSI_KEVENT_IF_ERROR		= KEVENT_BASE + 3,
-	ISCSI_KEVENT_DESTROY_SESSION	= KEVENT_BASE + 4,
-	ISCSI_KEVENT_UNBIND_SESSION	= KEVENT_BASE + 5,
-	ISCSI_KEVENT_CREATE_SESSION	= KEVENT_BASE + 6,
+	ISCSI_KEVENT_TRANS_ERROR	= KEVENT_BASE + 4,
+	ISCSI_KEVENT_DESTROY_SESSION	= KEVENT_BASE + 5,
+	ISCSI_KEVENT_UNBIND_SESSION	= KEVENT_BASE + 6,
+	ISCSI_KEVENT_CREATE_SESSION	= KEVENT_BASE + 7,
 };
 
 enum iscsi_tgt_dscvr {
-- 
1.5.4.1

Reply via email to