* [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