Signed-off-by: Robert Love <[EMAIL PROTECTED]>
---

 drivers/scsi/libfc/fc_ns.c |   41 +++++++++++++++++++++++------------------
 1 files changed, 23 insertions(+), 18 deletions(-)

diff --git a/drivers/scsi/libfc/fc_ns.c b/drivers/scsi/libfc/fc_ns.c
index c58d131..d6a0725 100644
--- a/drivers/scsi/libfc/fc_ns.c
+++ b/drivers/scsi/libfc/fc_ns.c
@@ -48,7 +48,7 @@ static void fc_ns_gpn_id_req(struct work_struct *);
 static void fc_ns_gpn_id_resp(struct fc_seq *, struct fc_frame *, void *);
 static void fc_ns_gpn_id_error(struct fc_ns_port *rp, struct fc_frame *fp);
 
-static int fc_ns_gnn_id_req(struct fc_lport *, struct fc_ns_port *);
+static void fc_ns_gnn_id_req(struct work_struct *work);
 static void fc_ns_gnn_id_resp(struct fc_seq *, struct fc_frame *, void *);
 static void fc_ns_gnn_id_error(struct fc_ns_port *, struct fc_frame *);
 static void fc_ns_enter_reg_pn(struct fc_lport *lp);
@@ -762,14 +762,16 @@ static int fc_ns_gpn_ft_parse(struct fc_lport *lp, void 
*buf, size_t len)
                dp = kzalloc(sizeof(*dp), GFP_KERNEL);
                if (!dp)
                        break;
+
                dp->lp = lp;
                dp->ids.port_id = ntoh24(np->fp_fid);
                dp->ids.port_name = ntohll(np->fp_wwpn);
                dp->ids.node_name = -1;
                dp->ids.roles = FC_RPORT_ROLE_UNKNOWN;
-               error = fc_ns_gnn_id_req(lp, dp);
-               if (error)
-                       break;
+
+               INIT_WORK(&dp->rport_create_work, fc_ns_gnn_id_req);
+               schedule_work(&dp->rport_create_work);
+
                if (np->fp_flags & FC_NS_FID_LAST) {
                        fc_ns_disc_done(lp);
                        len = 0;
@@ -979,7 +981,9 @@ static void fc_ns_gpn_id_resp(struct fc_seq *sp, struct 
fc_frame *fp,
                        break;
                }
                dp->ids.port_name = ntohll(cp->wwn);
-               fc_ns_gnn_id_req(lp, dp);
+
+               INIT_WORK(&dp->rport_create_work, fc_ns_gnn_id_req);
+               schedule_work(&dp->rport_create_work);
                break;
        case FC_FS_RJT:
                fc_ns_restart(lp);
@@ -1163,20 +1167,24 @@ EXPORT_SYMBOL(fc_ns_init);
  * @lp: Fibre Channel host port instance
  * @dp: Temporary discovery port for holding IDs and world wide names
  *
+ * XXX- Is the following statement still true?
  * The remote port is held by the caller for us.
  */
-static int fc_ns_gnn_id_req(struct fc_lport *lp, struct fc_ns_port *dp)
+static void fc_ns_gnn_id_req(struct work_struct *work)
 {
+       struct fc_ns_port *dp = container_of(work,
+                                            struct fc_ns_port,
+                                            rport_create_work);
+       struct fc_lport *lp = dp->lp;
        struct fc_frame *fp;
        struct req {
                struct fc_ct_hdr ct;
                struct fc_ns_fid fid;
        } *cp;
-       int error = 0;
 
        fp = fc_frame_alloc(lp, sizeof(*cp));
-       if (fp == NULL)
-               return -ENOMEM;
+       if (!fp)
+               return;
 
        cp = fc_frame_payload_get(fp, sizeof(*cp));
        fc_ns_fill_dns_hdr(lp, &cp->ct, FC_NS_GNN_ID, sizeof(cp->fid));
@@ -1185,15 +1193,12 @@ static int fc_ns_gnn_id_req(struct fc_lport *lp, struct 
fc_ns_port *dp)
        WARN_ON(!fc_lport_test_ready(lp));
 
        fc_frame_setup(fp, FC_RCTL_DD_UNSOL_CTL, FC_TYPE_CT);
-       if (!lp->tt.exch_seq_send(lp, fp,
-                                 fc_ns_gnn_id_resp,
-                                 dp, lp->e_d_tov,
-                                 lp->fid,
-                                 lp->dns_rp->port_id,
-                                 FC_FC_SEQ_INIT | FC_FC_END_SEQ))
-               error = -ENOMEM;
-
-       return error;
+       lp->tt.exch_seq_send(lp, fp,
+                            fc_ns_gnn_id_resp,
+                            dp, lp->e_d_tov,
+                            lp->fid,
+                            lp->dns_rp->port_id,
+                            FC_FC_SEQ_INIT | FC_FC_END_SEQ);
 }
 
 /**

_______________________________________________
devel mailing list
[email protected]
http://www.open-fcoe.org/mailman/listinfo/devel

Reply via email to