static int aoeblk_release(struct gendisk *disk, fmode_t mode) { struct aoedev *d = disk->private_data; ulong flags; spin_lock_irqsave(&d->lock, flags); if (--d->nopen == 0) { spin_unlock_irqrestore(&d->lock, flags); aoecmd_cfg(d->aoemajor, d->aoeminor); return 0; } spin_unlock_irqrestore(&d->lock, flags); return 0; }
static int aoeblk_release(struct inode *inode, struct file *filp) { struct aoedev *d; ulong flags; d = inode->i_bdev->bd_disk->private_data; spin_lock_irqsave(&d->lock, flags); if (--d->nopen == 0) { spin_unlock_irqrestore(&d->lock, flags); aoecmd_cfg(d->aoemajor, d->aoeminor); return 0; } spin_unlock_irqrestore(&d->lock, flags); return 0; }
static void discover_timer(ulong vp) { static struct timer_list t; static volatile ulong die; static spinlock_t lock; ulong flags; enum { DTIMERTICK = HZ * 60 }; /* one minute */ switch (vp) { case TINIT: init_timer(&t); spin_lock_init(&lock); t.data = TRUN; t.function = discover_timer; die = 0; case TRUN: spin_lock_irqsave(&lock, flags); if (!die) { t.expires = jiffies + DTIMERTICK; add_timer(&t); } spin_unlock_irqrestore(&lock, flags); aoecmd_cfg(0xffff, 0xff); return; case TKILL: spin_lock_irqsave(&lock, flags); die = 1; spin_unlock_irqrestore(&lock, flags); del_timer_sync(&t); default: return; } }