Commit 8382bf2e authored by Peter Osterlund's avatar Peter Osterlund Committed by Linus Torvalds

[PATCH] pktcdvd: Use bd_claim to get exclusive access

Use bd_claim() when opening the cdrom device to prevent user space programs
such as cdrecord, hald and kded from interfering with the burning process.
Signed-off-by: default avatarPeter Osterlund <petero2@telia.com>
Cc: Christoph Hellwig <hch@lst.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 97a41e26
...@@ -1955,9 +1955,12 @@ static int pkt_open_dev(struct pktcdvd_device *pd, int write) ...@@ -1955,9 +1955,12 @@ static int pkt_open_dev(struct pktcdvd_device *pd, int write)
if ((ret = blkdev_get(pd->bdev, FMODE_READ, O_RDONLY))) if ((ret = blkdev_get(pd->bdev, FMODE_READ, O_RDONLY)))
goto out; goto out;
if ((ret = bd_claim(pd->bdev, pd)))
goto out_putdev;
if ((ret = pkt_get_last_written(pd, &lba))) { if ((ret = pkt_get_last_written(pd, &lba))) {
printk("pktcdvd: pkt_get_last_written failed\n"); printk("pktcdvd: pkt_get_last_written failed\n");
goto out_putdev; goto out_unclaim;
} }
set_capacity(pd->disk, lba << 2); set_capacity(pd->disk, lba << 2);
...@@ -1967,7 +1970,7 @@ static int pkt_open_dev(struct pktcdvd_device *pd, int write) ...@@ -1967,7 +1970,7 @@ static int pkt_open_dev(struct pktcdvd_device *pd, int write)
q = bdev_get_queue(pd->bdev); q = bdev_get_queue(pd->bdev);
if (write) { if (write) {
if ((ret = pkt_open_write(pd))) if ((ret = pkt_open_write(pd)))
goto out_putdev; goto out_unclaim;
/* /*
* Some CDRW drives can not handle writes larger than one packet, * Some CDRW drives can not handle writes larger than one packet,
* even if the size is a multiple of the packet size. * even if the size is a multiple of the packet size.
...@@ -1982,13 +1985,15 @@ static int pkt_open_dev(struct pktcdvd_device *pd, int write) ...@@ -1982,13 +1985,15 @@ static int pkt_open_dev(struct pktcdvd_device *pd, int write)
} }
if ((ret = pkt_set_segment_merging(pd, q))) if ((ret = pkt_set_segment_merging(pd, q)))
goto out_putdev; goto out_unclaim;
if (write) if (write)
printk("pktcdvd: %lukB available on disc\n", lba << 1); printk("pktcdvd: %lukB available on disc\n", lba << 1);
return 0; return 0;
out_unclaim:
bd_release(pd->bdev);
out_putdev: out_putdev:
blkdev_put(pd->bdev); blkdev_put(pd->bdev);
out: out:
...@@ -2007,6 +2012,7 @@ static void pkt_release_dev(struct pktcdvd_device *pd, int flush) ...@@ -2007,6 +2012,7 @@ static void pkt_release_dev(struct pktcdvd_device *pd, int flush)
pkt_lock_door(pd, 0); pkt_lock_door(pd, 0);
pkt_set_speed(pd, MAX_SPEED, MAX_SPEED); pkt_set_speed(pd, MAX_SPEED, MAX_SPEED);
bd_release(pd->bdev);
blkdev_put(pd->bdev); blkdev_put(pd->bdev);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment