]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/scsi/scsi_transport_iscsi.c
[libata] Update docs to reflect current driver API
[linux-2.6-omap-h63xx.git] / drivers / scsi / scsi_transport_iscsi.c
index 448fd78777f9dfac54e3c15ee2d12f7e4c29c8a8..2730d507e585e511bf368b2d67428a3a516643bd 100644 (file)
@@ -38,10 +38,6 @@ struct iscsi_internal {
        struct scsi_transport_template t;
        struct iscsi_transport *iscsi_transport;
        struct list_head list;
-       /*
-        * List of sessions for this transport
-        */
-       struct list_head sessions;
        /*
         * based on transport capabilities, at register time we set these
         * bits to tell the transport class it wants attributes displayed
@@ -489,7 +485,7 @@ static inline struct list_head *skb_to_lh(struct sk_buff *skb)
 }
 
 static void*
-mempool_zone_alloc_skb(unsigned int gfp_mask, void *pool_data)
+mempool_zone_alloc_skb(gfp_t gfp_mask, void *pool_data)
 {
        struct mempool_zone *zone = pool_data;
 
@@ -846,9 +842,6 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
        struct iscsi_cls_session *session;
        struct iscsi_cls_conn *conn;
 
-       if (NETLINK_CREDS(skb)->uid)
-               return -EPERM;
-
        priv = iscsi_if_transport_lookup(iscsi_ptr(ev->transport_handle));
        if (!priv)
                return -EINVAL;
@@ -857,8 +850,6 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
        if (!try_module_get(transport->owner))
                return -EINVAL;
 
-       daemon_pid = NETLINK_CREDS(skb)->pid;
-
        switch (nlh->nlmsg_type) {
        case ISCSI_UEVENT_CREATE_SESSION:
                err = iscsi_if_create_session(priv, ev);
@@ -934,7 +925,7 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
 
 /* Get message from skb (based on rtnetlink_rcv_skb).  Each message is
  * processed by iscsi_if_recv_msg.  Malformed skbs with wrong length are
- * discarded silently.  */
+ * or invalid creds discarded silently.  */
 static void
 iscsi_if_rx(struct sock *sk, int len)
 {
@@ -942,6 +933,12 @@ iscsi_if_rx(struct sock *sk, int len)
 
        mutex_lock(&rx_queue_mutex);
        while ((skb = skb_dequeue(&sk->sk_receive_queue)) != NULL) {
+               if (NETLINK_CREDS(skb)->uid) {
+                       skb_pull(skb, skb->len);
+                       goto free_skb;
+               }
+               daemon_pid = NETLINK_CREDS(skb)->pid;
+
                while (skb->len >= NLMSG_SPACE(0)) {
                        int err;
                        uint32_t rlen;
@@ -953,10 +950,12 @@ iscsi_if_rx(struct sock *sk, int len)
                            skb->len < nlh->nlmsg_len) {
                                break;
                        }
+
                        ev = NLMSG_DATA(nlh);
                        rlen = NLMSG_ALIGN(nlh->nlmsg_len);
                        if (rlen > skb->len)
                                rlen = skb->len;
+
                        err = iscsi_if_recv_msg(skb, nlh);
                        if (err) {
                                ev->type = ISCSI_KEVENT_IF_ERROR;
@@ -980,6 +979,7 @@ iscsi_if_rx(struct sock *sk, int len)
                        } while (err < 0 && err != -ECONNREFUSED);
                        skb_pull(skb, rlen);
                }
+free_skb:
                kfree_skb(skb);
        }
        mutex_unlock(&rx_queue_mutex);
@@ -1117,12 +1117,10 @@ iscsi_register_transport(struct iscsi_transport *tt)
        if (priv)
                return NULL;
 
-       priv = kmalloc(sizeof(*priv), GFP_KERNEL);
+       priv = kzalloc(sizeof(*priv), GFP_KERNEL);
        if (!priv)
                return NULL;
-       memset(priv, 0, sizeof(*priv));
        INIT_LIST_HEAD(&priv->list);
-       INIT_LIST_HEAD(&priv->sessions);
        priv->iscsi_transport = tt;
 
        priv->cdev.class = &iscsi_transport_class;