[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: Peter Osterlund <petero2@telia.com> Cc: Christoph Hellwig <hch@lst.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
97a41e2612
commit
8382bf2e72
1 changed files with 9 additions and 3 deletions
|
@ -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)
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue