• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/scsi/libfc/

Lines Matching defs:disc

30  * The disc mutex is can be locked when acquiring rport locks, but may not
58 * @disc: The discovery job to stop remote ports on
63 void fc_disc_stop_rports(struct fc_disc *disc)
68 lport = fc_disc_lport(disc);
70 mutex_lock(&disc->disc_mutex);
71 list_for_each_entry_rcu(rdata, &disc->rports, peers)
73 mutex_unlock(&disc->disc_mutex);
78 * @disc: The discovery object to which the RSCN applies
84 static void fc_disc_recv_rscn_req(struct fc_disc *disc, struct fc_frame *fp)
97 lport = fc_disc_lport(disc);
99 FC_DISC_DBG(disc, "Received an RSCN event\n");
132 FC_DISC_DBG(disc, "Port address format for port "
147 FC_DISC_DBG(disc, "Address format is (%d)\n", fmt);
167 FC_DISC_DBG(disc, "RSCN received: rediscovering\n");
168 fc_disc_restart(disc);
170 FC_DISC_DBG(disc, "RSCN received: not rediscovering. "
172 redisc, lport->state, disc->pending);
177 FC_DISC_DBG(disc, "Received a bad RSCN frame\n");
196 struct fc_disc *disc = &lport->disc;
201 mutex_lock(&disc->disc_mutex);
202 fc_disc_recv_rscn_req(disc, fp);
203 mutex_unlock(&disc->disc_mutex);
206 FC_DISC_DBG(disc, "Received an unsupported request, "
214 * @disc: The discovery object to be restarted
216 * Locking Note: This function expects that the disc mutex
219 static void fc_disc_restart(struct fc_disc *disc)
221 if (!disc->disc_callback)
224 FC_DISC_DBG(disc, "Restarting discovery\n");
226 disc->requested = 1;
227 if (disc->pending)
235 disc->disc_id = (disc->disc_id + 2) | 1;
236 disc->retry_count = 0;
237 fc_disc_gpn_ft_req(disc);
249 struct fc_disc *disc = &lport->disc;
252 * At this point we may have a new disc job or an existing
256 mutex_lock(&disc->disc_mutex);
257 disc->disc_callback = disc_callback;
258 fc_disc_restart(disc);
259 mutex_unlock(&disc->disc_mutex);
264 * @disc: The discovery context
267 * Locking Note: This function expects that the disc mutex is locked before
271 static void fc_disc_done(struct fc_disc *disc, enum fc_disc_event event)
273 struct fc_lport *lport = fc_disc_lport(disc);
276 FC_DISC_DBG(disc, "Discovery complete\n");
278 disc->pending = 0;
279 if (disc->requested) {
280 fc_disc_restart(disc);
290 list_for_each_entry_rcu(rdata, &disc->rports, peers) {
293 if (rdata->disc_id == disc->disc_id)
299 mutex_unlock(&disc->disc_mutex);
300 disc->disc_callback(lport, event);
301 mutex_lock(&disc->disc_mutex);
306 * @disc: The discovery context
309 static void fc_disc_error(struct fc_disc *disc, struct fc_frame *fp)
311 struct fc_lport *lport = fc_disc_lport(disc);
314 FC_DISC_DBG(disc, "Error %ld, retries %d/%d\n",
315 PTR_ERR(fp), disc->retry_count,
323 if (disc->retry_count < FC_DISC_RETRY_LIMIT) {
331 if (!disc->retry_count)
334 disc->retry_count++;
335 schedule_delayed_work(&disc->disc_work, delay);
337 fc_disc_done(disc, DISC_EV_FAILED);
348 static void fc_disc_gpn_ft_req(struct fc_disc *disc)
351 struct fc_lport *lport = fc_disc_lport(disc);
355 disc->pending = 1;
356 disc->requested = 0;
358 disc->buf_len = 0;
359 disc->seq_count = 0;
369 disc, 3 * lport->r_a_tov))
372 fc_disc_error(disc, NULL);
383 static int fc_disc_gpn_ft_parse(struct fc_disc *disc, void *buf, size_t len)
394 lport = fc_disc_lport(disc);
395 disc->seq_count++;
403 tlen = disc->buf_len;
404 disc->buf_len = 0;
412 np = &disc->partial_buf;
422 disc->buf_len = (unsigned char) plen;
424 disc->buf_len = 0;
443 rdata->disc_id = disc->disc_id;
453 fc_disc_done(disc, DISC_EV_SUCCESS);
467 if (np != &disc->partial_buf) {
468 FC_DISC_DBG(disc, "Partial buffer remains "
470 memcpy(&disc->partial_buf, np, len);
472 disc->buf_len = (unsigned char) len;
483 struct fc_disc *disc = container_of(work,
486 mutex_lock(&disc->disc_mutex);
487 fc_disc_gpn_ft_req(disc);
488 mutex_unlock(&disc->disc_mutex);
497 * Locking Note: This function is called without disc mutex held, and
503 struct fc_disc *disc = disc_arg;
511 mutex_lock(&disc->disc_mutex);
512 FC_DISC_DBG(disc, "Received a GPN_FT response\n");
515 fc_disc_error(disc, fp);
516 mutex_unlock(&disc->disc_mutex);
524 if (fr_sof(fp) == FC_SOF_I3 && seq_cnt == 0 && disc->seq_count == 0) {
527 FC_DISC_DBG(disc, "GPN_FT response too short, len %d\n",
534 error = fc_disc_gpn_ft_parse(disc, cp + 1, len);
536 FC_DISC_DBG(disc, "GPN_FT rejected reason %x exp %x "
544 FC_DISC_DBG(disc, "GPN_FT unexpected response code "
548 } else if (fr_sof(fp) == FC_SOF_N3 && seq_cnt == disc->seq_count) {
549 error = fc_disc_gpn_ft_parse(disc, fh + 1, len);
551 FC_DISC_DBG(disc, "GPN_FT unexpected frame - out of sequence? "
553 seq_cnt, disc->seq_count, fr_sof(fp), fr_eof(fp));
557 fc_disc_error(disc, fp);
559 fc_disc_done(disc, event);
561 mutex_unlock(&disc->disc_mutex);
570 * Locking Note: This function is called without disc mutex held.
578 struct fc_disc *disc;
584 disc = &lport->disc;
586 mutex_lock(&disc->disc_mutex);
604 FC_DISC_DBG(disc, "GPN_ID accepted. WWPN changed. "
612 new_rdata->disc_id = disc->disc_id;
617 rdata->disc_id = disc->disc_id;
620 FC_DISC_DBG(disc, "GPN_ID rejected reason %x exp %x\n",
624 FC_DISC_DBG(disc, "GPN_ID unexpected response code %x\n",
627 fc_disc_restart(disc);
630 mutex_unlock(&disc->disc_mutex);
685 struct fc_disc *disc = &lport->disc;
687 if (disc) {
688 cancel_delayed_work_sync(&disc->disc_work);
689 fc_disc_stop_rports(disc);
712 struct fc_disc *disc;
726 disc = &lport->disc;
727 INIT_DELAYED_WORK(&disc->disc_work, fc_disc_timeout);
728 mutex_init(&disc->disc_mutex);
729 INIT_LIST_HEAD(&disc->rports);
731 disc->priv = lport;