Messages in this thread Patch in this message | | | Subject | Re: [PATCH] CDRW packet writing support for 2.6.7-bk13 | From | Peter Osterlund <> | Date | 07 Jul 2004 12:06:44 +0200 |
| |
Christoph Hellwig <hch@infradead.org> writes:
> > +static void pkt_release_dev(struct pktcdvd_device *pd, int flush) > > +{ > > + struct block_device *bdev; > > + > > + atomic_dec(&pd->refcnt); > > + if (atomic_read(&pd->refcnt) > 0) > > + return; > > + > > + bdev = bdget(pd->pkt_dev); > > + if (bdev) { > > You reallu should keep a reference to the underlying bdev as long as you use > it
Remove pkt_dev from struct pktcdvd_device in the pktcdvd driver and remove unnecessary calls to bdget(). Suggested by Christoph Hellwig.
Signed-off-by: Peter Osterlund <petero2@telia.com>
---
linux-petero/drivers/block/pktcdvd.c | 20 ++++---------------- linux-petero/include/linux/pktcdvd.h | 1 - 2 files changed, 4 insertions(+), 17 deletions(-)
diff -puN drivers/block/pktcdvd.c~packet-bdev drivers/block/pktcdvd.c --- linux/drivers/block/pktcdvd.c~packet-bdev 2004-07-06 21:39:26.000000000 +0200 +++ linux-petero/drivers/block/pktcdvd.c 2004-07-06 23:47:54.243208280 +0200 @@ -1990,7 +1990,6 @@ static void pkt_release_dev(struct pktcd static int pkt_open(struct inode *inode, struct file *file) { struct pktcdvd_device *pd = NULL; - struct block_device *pkt_bdev; int ret; int special_open, exclusive; @@ -2047,11 +2046,7 @@ static int pkt_open(struct inode *inode, * needed here as well, since ext2 (among others) may change * the blocksize at mount time */ - pkt_bdev = bdget(inode->i_rdev); - if (pkt_bdev) { - set_blocksize(pkt_bdev, CD_FRAMESIZE); - bdput(pkt_bdev); - } + set_blocksize(inode->i_bdev, CD_FRAMESIZE); done: up(&pd->ctl_mutex); @@ -2432,21 +2427,15 @@ out: return ret; } -static int pkt_remove_dev(struct pktcdvd_device *pd) +static int pkt_remove_dev(struct pktcdvd_device *pd, struct block_device *bdev) { - struct block_device *bdev; - if (!IS_ERR(pd->cdrw.thread)) kthread_stop(pd->cdrw.thread); /* * will also invalidate buffers for CD-ROM */ - bdev = bdget(pd->pkt_dev); - if (bdev) { - invalidate_bdev(bdev, 1); - bdput(bdev); - } + invalidate_bdev(bdev, 1); pkt_shrink_pktlist(pd); @@ -2508,7 +2497,7 @@ static int pkt_ioctl(struct inode *inode if (pd->refcnt != 1) ret = -EBUSY; else - ret = pkt_remove_dev(pd); + ret = pkt_remove_dev(pd, inode->i_bdev); up(&pd->ctl_mutex); return ret; @@ -2579,7 +2568,6 @@ int pkt_init(void) spin_lock_init(&pd->lock); spin_lock_init(&pd->iosched.lock); - pd->pkt_dev = MKDEV(PACKET_MAJOR, i); sprintf(pd->name, "pktcdvd%d", i); init_waitqueue_head(&pd->wqueue); init_MUTEX(&pd->ctl_mutex); diff -puN include/linux/pktcdvd.h~packet-bdev include/linux/pktcdvd.h --- linux/include/linux/pktcdvd.h~packet-bdev 2004-07-06 21:39:26.000000000 +0200 +++ linux-petero/include/linux/pktcdvd.h 2004-07-06 23:47:54.244208128 +0200 @@ -230,7 +230,6 @@ struct pktcdvd_device { struct block_device *bdev; /* dev attached */ dev_t dev; /* dev attached */ - dev_t pkt_dev; /* our dev */ char name[20]; struct packet_settings settings; struct packet_stats stats; _ -- Peter Osterlund - petero2@telia.com http://w1.894.telia.com/~u89404340 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |