2484
2485 dev = &rport->dev;
2486 device_initialize(dev);
2487 dev->parent = get_device(&shost->shost_gendev);
2488 dev->release = fc_rport_dev_release;
2489 sprintf(dev->bus_id, "rport-%d:%d-%d",
2490 shost->host_no, channel, rport->number);
2491 transport_setup_device(dev);
2492
2493 error = device_add(dev);
2494 if (error) {
2495 printk(KERN_ERR "FC Remote Port device_add failed\n");
2496 goto delete_rport;
2497 }
2498 transport_add_device(dev);
2499 transport_configure_device(dev);
2500
2501 if (rport->roles & FC_PORT_ROLE_FCP_TARGET) {
2502
2503 rport->flags |= FC_RPORT_SCAN_PENDING;
2504 scsi_queue_work(shost, &rport->scan_work);
2505 }
2506
2507 return rport;
2508
2509delete_rport:
2510 transport_destroy_device(dev);
2511 spin_lock_irqsave(shost->host_lock, flags);
2512 list_del(&rport->peers);
2513 put_device(&shost->shost_gendev);
2514 spin_unlock_irqrestore(shost->host_lock, flags);
2515 put_device(dev->parent);
2516 kfree(rport);
2517 return NULL;
2518}
2519
2520
2521
2522
2523
2524