* [PATCH 1/4] pktcdvd: Don't spam the kernel log when nothing is wrong
@ 2006-02-12 11:48 Peter Osterlund
2006-02-12 11:49 ` [PATCH 2/4] pktcdvd: Allow non-writable media to be mounted Peter Osterlund
0 siblings, 1 reply; 4+ messages in thread
From: Peter Osterlund @ 2006-02-12 11:48 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel
Change some messages that don't indicate an error so that they are
only printed when debugging is enabled.
Signed-off-by: Peter Osterlund <petero2@telia.com>
---
drivers/block/pktcdvd.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
index 18d5979..7879df0 100644
--- a/drivers/block/pktcdvd.c
+++ b/drivers/block/pktcdvd.c
@@ -1549,7 +1549,7 @@ static int pkt_good_disc(struct pktcdvd_
case 0x12: /* DVD-RAM */
return 0;
default:
- printk("pktcdvd: Wrong disc profile (%x)\n", pd->mmc3_profile);
+ VPRINTK("pktcdvd: Wrong disc profile (%x)\n", pd->mmc3_profile);
return 1;
}
@@ -1895,7 +1895,7 @@ static int pkt_open_write(struct pktcdvd
unsigned int write_speed, media_write_speed, read_speed;
if ((ret = pkt_probe_settings(pd))) {
- DPRINTK("pktcdvd: %s failed probe\n", pd->name);
+ VPRINTK("pktcdvd: %s failed probe\n", pd->name);
return -EIO;
}
@@ -2441,7 +2441,7 @@ static int pkt_ioctl(struct inode *inode
return blkdev_ioctl(pd->bdev->bd_inode, file, cmd, arg);
default:
- printk("pktcdvd: Unknown ioctl for %s (%x)\n", pd->name, cmd);
+ VPRINTK("pktcdvd: Unknown ioctl for %s (%x)\n", pd->name, cmd);
return -ENOTTY;
}
--
Peter Osterlund - petero2@telia.com
http://web.telia.com/~u89404340
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/4] pktcdvd: Allow non-writable media to be mounted
2006-02-12 11:48 [PATCH 1/4] pktcdvd: Don't spam the kernel log when nothing is wrong Peter Osterlund
@ 2006-02-12 11:49 ` Peter Osterlund
2006-02-12 11:52 ` [PATCH 3/4] pktcdvd: Don't unlock the door if the disc is in use Peter Osterlund
0 siblings, 1 reply; 4+ messages in thread
From: Peter Osterlund @ 2006-02-12 11:49 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel
If opening for write fails, the open method should return -EROFS.
This makes "mount" try again with a read-only mount, instead of just
giving up.
Signed-off-by: Peter Osterlund <petero2@telia.com>
---
drivers/block/pktcdvd.c | 7 +++----
1 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
index 7879df0..d747f28 100644
--- a/drivers/block/pktcdvd.c
+++ b/drivers/block/pktcdvd.c
@@ -1896,7 +1896,7 @@ static int pkt_open_write(struct pktcdvd
if ((ret = pkt_probe_settings(pd))) {
VPRINTK("pktcdvd: %s failed probe\n", pd->name);
- return -EIO;
+ return -EROFS;
}
if ((ret = pkt_set_write_settings(pd))) {
@@ -2054,10 +2054,9 @@ static int pkt_open(struct inode *inode,
goto out_dec;
}
} else {
- if (pkt_open_dev(pd, file->f_mode & FMODE_WRITE)) {
- ret = -EIO;
+ ret = pkt_open_dev(pd, file->f_mode & FMODE_WRITE);
+ if (ret)
goto out_dec;
- }
/*
* needed here as well, since ext2 (among others) may change
* the blocksize at mount time
--
Peter Osterlund - petero2@telia.com
http://web.telia.com/~u89404340
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 3/4] pktcdvd: Don't unlock the door if the disc is in use
2006-02-12 11:49 ` [PATCH 2/4] pktcdvd: Allow non-writable media to be mounted Peter Osterlund
@ 2006-02-12 11:52 ` Peter Osterlund
2006-02-12 11:55 ` [PATCH 4/4] pktcdvd: Reduce stack usage Peter Osterlund
0 siblings, 1 reply; 4+ messages in thread
From: Peter Osterlund @ 2006-02-12 11:52 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel
Unlocking the door when the disc is in use is obviously not good,
because then it's possible to eject the disc at the wrong time and
cause severe disc data corruption.
Signed-off-by: Peter Osterlund <petero2@telia.com>
---
drivers/block/pktcdvd.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
index d747f28..d794f2b 100644
--- a/drivers/block/pktcdvd.c
+++ b/drivers/block/pktcdvd.c
@@ -2436,7 +2436,8 @@ static int pkt_ioctl(struct inode *inode
* The door gets locked when the device is opened, so we
* have to unlock it or else the eject command fails.
*/
- pkt_lock_door(pd, 0);
+ if (pd->refcnt == 1)
+ pkt_lock_door(pd, 0);
return blkdev_ioctl(pd->bdev->bd_inode, file, cmd, arg);
default:
--
Peter Osterlund - petero2@telia.com
http://web.telia.com/~u89404340
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 4/4] pktcdvd: Reduce stack usage
2006-02-12 11:52 ` [PATCH 3/4] pktcdvd: Don't unlock the door if the disc is in use Peter Osterlund
@ 2006-02-12 11:55 ` Peter Osterlund
0 siblings, 0 replies; 4+ messages in thread
From: Peter Osterlund @ 2006-02-12 11:55 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel
Reduce stack usage in the pkt_start_write() function. Even though it's
not currently a real problem, the pages and offsets arrays can be
eliminated, which saves approximately 1000 bytes of stack space.
Signed-off-by: Peter Osterlund <petero2@telia.com>
---
drivers/block/pktcdvd.c | 43 +++++++++++++++++--------------------------
1 files changed, 17 insertions(+), 26 deletions(-)
diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
index d794f2b..f783af7 100644
--- a/drivers/block/pktcdvd.c
+++ b/drivers/block/pktcdvd.c
@@ -646,7 +646,7 @@ static void pkt_copy_bio_data(struct bio
* b) The data can be used as cache to avoid read requests if we receive a
* new write request for the same zone.
*/
-static void pkt_make_local_copy(struct packet_data *pkt, struct page **pages, int *offsets)
+static void pkt_make_local_copy(struct packet_data *pkt, struct bio_vec *bvec)
{
int f, p, offs;
@@ -654,15 +654,15 @@ static void pkt_make_local_copy(struct p
p = 0;
offs = 0;
for (f = 0; f < pkt->frames; f++) {
- if (pages[f] != pkt->pages[p]) {
- void *vfrom = kmap_atomic(pages[f], KM_USER0) + offsets[f];
+ if (bvec[f].bv_page != pkt->pages[p]) {
+ void *vfrom = kmap_atomic(bvec[f].bv_page, KM_USER0) + bvec[f].bv_offset;
void *vto = page_address(pkt->pages[p]) + offs;
memcpy(vto, vfrom, CD_FRAMESIZE);
kunmap_atomic(vfrom, KM_USER0);
- pages[f] = pkt->pages[p];
- offsets[f] = offs;
+ bvec[f].bv_page = pkt->pages[p];
+ bvec[f].bv_offset = offs;
} else {
- BUG_ON(offsets[f] != offs);
+ BUG_ON(bvec[f].bv_offset != offs);
}
offs += CD_FRAMESIZE;
if (offs >= PAGE_SIZE) {
@@ -992,18 +992,17 @@ try_next_bio:
static void pkt_start_write(struct pktcdvd_device *pd, struct packet_data *pkt)
{
struct bio *bio;
- struct page *pages[PACKET_MAX_SIZE];
- int offsets[PACKET_MAX_SIZE];
int f;
int frames_write;
+ struct bio_vec *bvec = pkt->w_bio->bi_io_vec;
for (f = 0; f < pkt->frames; f++) {
- pages[f] = pkt->pages[(f * CD_FRAMESIZE) / PAGE_SIZE];
- offsets[f] = (f * CD_FRAMESIZE) % PAGE_SIZE;
+ bvec[f].bv_page = pkt->pages[(f * CD_FRAMESIZE) / PAGE_SIZE];
+ bvec[f].bv_offset = (f * CD_FRAMESIZE) % PAGE_SIZE;
}
/*
- * Fill-in pages[] and offsets[] with data from orig_bios.
+ * Fill-in bvec with data from orig_bios.
*/
frames_write = 0;
spin_lock(&pkt->lock);
@@ -1025,11 +1024,11 @@ static void pkt_start_write(struct pktcd
}
if (src_bvl->bv_len - src_offs >= CD_FRAMESIZE) {
- pages[f] = src_bvl->bv_page;
- offsets[f] = src_bvl->bv_offset + src_offs;
+ bvec[f].bv_page = src_bvl->bv_page;
+ bvec[f].bv_offset = src_bvl->bv_offset + src_offs;
} else {
pkt_copy_bio_data(bio, segment, src_offs,
- pages[f], offsets[f]);
+ bvec[f].bv_page, bvec[f].bv_offset);
}
src_offs += CD_FRAMESIZE;
frames_write++;
@@ -1043,7 +1042,7 @@ static void pkt_start_write(struct pktcd
BUG_ON(frames_write != pkt->write_size);
if (test_bit(PACKET_MERGE_SEGS, &pd->flags) || (pkt->write_size < pkt->frames)) {
- pkt_make_local_copy(pkt, pages, offsets);
+ pkt_make_local_copy(pkt, bvec);
pkt->cache_valid = 1;
} else {
pkt->cache_valid = 0;
@@ -1056,17 +1055,9 @@ static void pkt_start_write(struct pktcd
pkt->w_bio->bi_bdev = pd->bdev;
pkt->w_bio->bi_end_io = pkt_end_io_packet_write;
pkt->w_bio->bi_private = pkt;
- for (f = 0; f < pkt->frames; f++) {
- if ((f + 1 < pkt->frames) && (pages[f + 1] == pages[f]) &&
- (offsets[f + 1] = offsets[f] + CD_FRAMESIZE)) {
- if (!bio_add_page(pkt->w_bio, pages[f], CD_FRAMESIZE * 2, offsets[f]))
- BUG();
- f++;
- } else {
- if (!bio_add_page(pkt->w_bio, pages[f], CD_FRAMESIZE, offsets[f]))
- BUG();
- }
- }
+ for (f = 0; f < pkt->frames; f++)
+ if (!bio_add_page(pkt->w_bio, bvec[f].bv_page, CD_FRAMESIZE, bvec[f].bv_offset))
+ BUG();
VPRINTK("pktcdvd: vcnt=%d\n", pkt->w_bio->bi_vcnt);
atomic_set(&pkt->io_wait, 1);
--
Peter Osterlund - petero2@telia.com
http://web.telia.com/~u89404340
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2006-02-12 11:55 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-02-12 11:48 [PATCH 1/4] pktcdvd: Don't spam the kernel log when nothing is wrong Peter Osterlund
2006-02-12 11:49 ` [PATCH 2/4] pktcdvd: Allow non-writable media to be mounted Peter Osterlund
2006-02-12 11:52 ` [PATCH 3/4] pktcdvd: Don't unlock the door if the disc is in use Peter Osterlund
2006-02-12 11:55 ` [PATCH 4/4] pktcdvd: Reduce stack usage Peter Osterlund
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox