Showing error 781

User: Jiri Slaby
Error type: Invalid Pointer Dereference
Error type description: A pointer which is invalid is being dereferenced
File location: drivers/scsi/scsi_transport_fc.c
Line in file: 3293
Project: Linux Kernel
Project version: 2.6.28
Tools: Stanse (1.2)
Entered: 2011-11-07 22:23:48 UTC


Source:

3263        if (vport->flags & FC_VPORT_CREATING) {
3264                spin_unlock_irqrestore(shost->host_lock, flags);
3265                return -EBUSY;
3266        }
3267        if (vport->flags & (FC_VPORT_DEL)) {
3268                spin_unlock_irqrestore(shost->host_lock, flags);
3269                return -EALREADY;
3270        }
3271        vport->flags |= FC_VPORT_DELETING;
3272        spin_unlock_irqrestore(shost->host_lock, flags);
3273
3274        if (i->f->vport_delete)
3275                stat = i->f->vport_delete(vport);
3276        else
3277                stat = -ENOENT;
3278
3279        spin_lock_irqsave(shost->host_lock, flags);
3280        vport->flags &= ~FC_VPORT_DELETING;
3281        if (!stat) {
3282                vport->flags |= FC_VPORT_DELETED;
3283                list_del(&vport->peers);
3284                fc_host->npiv_vports_inuse--;
3285                put_device(&shost->shost_gendev);  /* for fc_host->vport list */
3286        }
3287        spin_unlock_irqrestore(shost->host_lock, flags);
3288
3289        if (stat)
3290                return stat;
3291
3292        if (dev->parent != &shost->shost_gendev)
3293                sysfs_remove_link(&shost->shost_gendev.kobj, dev->bus_id);
3294        transport_remove_device(dev);
3295        device_del(dev);
3296        transport_destroy_device(dev);
3297
3298        /*
3299         * Removing our self-reference should mean our
3300         * release function gets called, which will drop the remaining
3301         * parent reference and free the data structure.
3302         */
3303        put_device(dev);                        /* for self-reference */
Show full sources