All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael Chan" <mchan@broadcom.com>
To: Mike Christie <michaelc@cs.wisc.edu>
Cc: "open-iscsi@googlegroups.com" <open-iscsi@googlegroups.com>,
	"davem@davemloft.net" <davem@davemloft.net>,
	"James.Bottomley@HansenPartnership.com"
	<James.Bottomley@HansenPartnership.com>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"linux-scsi@vger.kernel.org" <linux-scsi@vger.kernel.org>,
	Karen Xie <kxie@chelsio.com>,
	Anil Veerabhadrappa <anilgv@broadcom.com>,
	Benjamin Li <benli@broadcom.com>
Subject: Re: [PATCH 4/4] bnx2i: Add bnx2i iSCSI driver.
Date: Tue, 19 May 2009 13:47:19 -0700	[thread overview]
Message-ID: <1242766039.10180.178.camel@HP1> (raw)
In-Reply-To: <4A12C08A.1080600@cs.wisc.edu>


On Tue, 2009-05-19 at 07:22 -0700, Mike Christie wrote:
> Michael Chan wrote:
> > 
> > Here are the more generic NETLINK_ISCSI messages and the iscsi transport
> > code to support them, please review.
> > 
> > diff --git a/drivers/scsi/scsi_transport_iscsi.c b/drivers/scsi/scsi_transport_iscsi.c
> > index d69a53a..60cb6cb 100644
> > --- a/drivers/scsi/scsi_transport_iscsi.c
> > +++ b/drivers/scsi/scsi_transport_iscsi.c
> > @@ -995,6 +995,39 @@ int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr,
> >  }
> >  EXPORT_SYMBOL_GPL(iscsi_recv_pdu);
> >  
> > +int iscsi_offload_mesg(struct Scsi_Host *shost,
> > +		       struct iscsi_transport *transport, uint32_t type,
> > +		       char *data, uint16_t data_size)
> > +{
> > +	struct nlmsghdr	*nlh;
> > +	struct sk_buff *skb;
> > +	struct iscsi_uevent *ev;
> > +	int len = NLMSG_SPACE(sizeof(*ev) + data_size);
> > +
> > +	skb = alloc_skb(len, GFP_ATOMIC);
> > +	if (!skb) {
> > +		printk(KERN_ERR "can not deliver iscsi offload message:OOM\n");
> > +		return -ENOMEM;
> > +	}
> > +
> > +	nlh = __nlmsg_put(skb, 0, 0, 0, (len - sizeof(*nlh)), 0);
> > +	ev = NLMSG_DATA(nlh);
> > +	memset(ev, 0, sizeof(*ev));
> > +	ev->type = type;
> > +	ev->transport_handle = iscsi_handle(transport);
> > +	switch (type) {
> > +	case ISCSI_KEVENT_PATH_REQ:
> > +		ev->r.req_path.host_no = shost->host_no;
> > +	case ISCSI_KEVENT_IF_DOWN:
> > +		ev->r.notify_if_down.host_no = shost->host_no;
> > +	}
> > +
> > +	memcpy((char*)ev + sizeof(*ev), data, data_size);
> > +
> > +	return iscsi_broadcast_skb(skb, GFP_KERNEL);
> 
> 
> You can sync up what the gfp flag used here and for the alloc_skb call 
> above. If you have process context, you probably want to use GFP_NOIO, 
> because this could be called for reconnect for a disk in use.
> 
> If you do not have process context then you would need to use GFP_ATOMIC.
> 
> 

We have process context, but I think we should make it more general for
other future drivers and use GFP_ATOMIC.

> > +}
> > +EXPORT_SYMBOL_GPL(iscsi_offload_mesg);
> > +
> >  void iscsi_conn_error_event(struct iscsi_cls_conn *conn, enum iscsi_err error)
> >  {
> >  	struct nlmsghdr	*nlh;
> > @@ -1393,6 +1426,30 @@ iscsi_set_host_param(struct iscsi_transport *transport,
> >  }
> >  
> >  static int
> > +iscsi_set_path(struct iscsi_transport *transport, struct iscsi_uevent *ev)
> > +{
> > +	struct Scsi_Host *shost;
> > +	struct iscsi_path *params;
> > +	int err;
> > +
> > +	if (!transport->set_path)
> > +		return -ENOSYS;
> > +
> > +	shost = scsi_host_lookup(ev->u.set_path.host_no);
> > +	if (!shost) {
> > +		printk(KERN_ERR "set path could not find host no %u\n",
> > +		       ev->u.set_path.host_no);
> > +		return -ENODEV;
> > +	}
> > +
> > +	params = (struct iscsi_path *)((char*)ev + sizeof(*ev));
> > +	err = transport->set_path(shost, params);
> > +				      
> > +	scsi_host_put(shost);
> > +	return err;
> > +}
> > +
> > +static int
> >  iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
> >  {
> >  	int err = 0;
> > @@ -1411,7 +1468,8 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
> >  	if (!try_module_get(transport->owner))
> >  		return -EINVAL;
> >  
> > -	priv->daemon_pid = NETLINK_CREDS(skb)->pid;
> > +	if (nlh->nlmsg_type != ISCSI_UEVENT_PATH_UPDATE)
> > +		priv->daemon_pid = NETLINK_CREDS(skb)->pid;
> >  
> 
> Instead of using broadcast above and in some other places and then doing 
> this check, could we just use multicast groups or something else? The 
> events from iscsid could be in one group and then events for uip would 
> be in another?

We need to do this check because we don't want the daemon_pid to be
overwritten with a pid that is not iscsid's.  If it was overwritten,
unicast NETLINK_ISCSI messages will not reach iscsid.

We can use multicast group 2 for the new messages if you prefer.  This
way, I think iscsid will not receive the new messages since it is only
listening on group 1.  The pid check will still be needed though.

> 
> Or is it more common to do it like this or will it break compat with 
> other tools if we change it?
> 



  reply	other threads:[~2009-05-19 20:47 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-01 20:00 [PATCH 0/4] Add bnx2 iscsi support Michael Chan
2009-05-01 20:00 ` [PATCH 1/4] bnx2: Add support for CNIC driver Michael Chan
     [not found] ` <1241208039-6813-1-git-send-email-mchan-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2009-05-01 20:00   ` [PATCH 2/4] cnic: Add new " Michael Chan
2009-05-01 20:00 ` [PATCH 3/4] iscsi class, libiscsi: Add net config Michael Chan
     [not found]   ` <1241208039-6813-4-git-send-email-mchan-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2009-05-06 16:40     ` Mike Christie
2009-05-06 16:42       ` Michael Chan
2009-06-08 17:56   ` James Bottomley
2009-06-08 17:59     ` Michael Chan
2009-06-08 18:13       ` James Bottomley
2009-06-08 18:07     ` Mike Christie
     [not found]       ` <4A2D5374.3030503-hcNo3dDEHLuVc3sceRu5cw@public.gmane.org>
2009-06-08 20:07         ` Hans de Goede
2009-06-08 20:06           ` Michael Chan
2009-06-08 20:24           ` Mike Christie
2009-06-08 20:27             ` Hans de Goede
2009-05-01 20:00 ` [PATCH 4/4] bnx2i: Add bnx2i iSCSI driver Michael Chan
2009-05-06 16:48   ` Mike Christie
2009-05-06 23:02     ` Karen Xie
2009-05-06 23:02       ` Karen Xie
2009-05-07 17:03     ` Michael Chan
2009-05-07 21:01       ` Mike Christie
2009-05-19  1:50         ` Michael Chan
2009-05-19 14:22           ` Mike Christie
2009-05-19 20:47             ` Michael Chan [this message]
2009-05-19 21:58               ` Mike Christie
2009-05-20 16:58                 ` Michael Chan
2009-05-20 19:57                   ` Mike Christie
     [not found]                     ` <4A14608F.6070800-hcNo3dDEHLuVc3sceRu5cw@public.gmane.org>
2009-05-20 22:22                       ` Michael Chan
2009-05-20 22:51                         ` Mike Christie
  -- strict thread matches above, loose matches on Subject: below --
2009-06-09  1:14 [PATCH 0/4] Add Broadcom " Michael Chan
     [not found] ` <1244510084-4457-1-git-send-email-mchan-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2009-06-09  1:14   ` [PATCH 4/4] bnx2i: Add " Michael Chan
2009-05-23 21:11 [PATCH 0/4] Add bnx2i driver Michael Chan
2009-05-23 21:11 ` [PATCH 4/4] bnx2i: Add bnx2i iSCSI driver Michael Chan
2009-05-26 16:37   ` Grant Grundler
2009-05-26 16:49     ` Michael Chan
2009-05-26 17:03       ` Grant Grundler
2009-04-24  0:22 [PATCH 0/4] Add bnx2 iSCSI support Michael Chan
     [not found] ` <1240532563-23048-1-git-send-email-mchan-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2009-04-24  0:22   ` [PATCH 4/4] bnx2i: Add bnx2i iSCSI driver Michael Chan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1242766039.10180.178.camel@HP1 \
    --to=mchan@broadcom.com \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=anilgv@broadcom.com \
    --cc=benli@broadcom.com \
    --cc=davem@davemloft.net \
    --cc=kxie@chelsio.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=michaelc@cs.wisc.edu \
    --cc=netdev@vger.kernel.org \
    --cc=open-iscsi@googlegroups.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.