* [PATCH 1/3] Trivial CDRW packet writing doc update @ 2004-07-28 20:36 Peter Osterlund 2004-07-28 20:42 ` [PATCH 2/3] Simplified request size handling in CDRW packet writing Peter Osterlund 0 siblings, 1 reply; 3+ messages in thread From: Peter Osterlund @ 2004-07-28 20:36 UTC (permalink / raw) To: Andrew Morton; +Cc: linux-kernel Document that pktcdvd block devices have a 2KB block size. Signed-off-by: Peter Osterlund <petero2@telia.com> --- linux-petero/Documentation/cdrom/packet-writing.txt | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff -puN Documentation/cdrom/packet-writing.txt~packet-doc-update Documentation/cdrom/packet-writing.txt --- linux/Documentation/cdrom/packet-writing.txt~packet-doc-update 2004-07-28 22:00:19.047078592 +0200 +++ linux-petero/Documentation/cdrom/packet-writing.txt 2004-07-28 22:00:19.049078288 +0200 @@ -71,8 +71,8 @@ Notes filesystem corruption if the disc wears out. - Since the pktcdvd driver makes the disc appear as a regular block - device, you can put any filesystem you like on the disc. For - example, run: + device with a 2KB block size, you can put any filesystem you like on + the disc. For example, run: # /sbin/mke2fs /dev/pktcdvd/dev_name _ -- Peter Osterlund - petero2@telia.com http://w1.894.telia.com/~u89404340 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 2/3] Simplified request size handling in CDRW packet writing 2004-07-28 20:36 [PATCH 1/3] Trivial CDRW packet writing doc update Peter Osterlund @ 2004-07-28 20:42 ` Peter Osterlund 2004-07-28 20:49 ` [PATCH 3/3] Fix setting of maximum read speed " Peter Osterlund 0 siblings, 1 reply; 3+ messages in thread From: Peter Osterlund @ 2004-07-28 20:42 UTC (permalink / raw) To: Andrew Morton; +Cc: linux-kernel Simplified the code in the pktcdvd driver that ensures that write requests are not larger than the packet size. This also limits the read request size, but that doesn't seem cause any measurable overhead, so it's better to keep the code simple. Signed-off-by: Peter Osterlund <petero2@telia.com> --- linux-petero/drivers/block/pktcdvd.c | 45 +++++------------------------------ linux-petero/include/linux/pktcdvd.h | 2 - 2 files changed, 7 insertions(+), 40 deletions(-) diff -puN drivers/block/pktcdvd.c~packet-limit-request-size drivers/block/pktcdvd.c --- linux/drivers/block/pktcdvd.c~packet-limit-request-size 2004-07-28 22:00:20.491858952 +0200 +++ linux-petero/drivers/block/pktcdvd.c 2004-07-28 22:00:20.495858344 +0200 @@ -85,25 +85,6 @@ static struct pktcdvd_device *pkt_find_d return NULL; } -/* - * The underlying block device is not allowed to merge write requests. Some - * CDRW drives can not handle writes larger than one packet, even if the size - * is a multiple of the packet size. - */ -static int pkt_lowlevel_elv_merge_fn(request_queue_t *q, struct request **req, struct bio *bio) -{ - struct pktcdvd_device *pd = pkt_find_dev(q); - BUG_ON(!pd); - - if (bio_data_dir(bio) == WRITE) - return ELEVATOR_NO_MERGE; - - if (pd->cdrw.elv_merge_fn) - return pd->cdrw.elv_merge_fn(q, req, bio); - - return ELEVATOR_NO_MERGE; -} - static void pkt_lowlevel_elv_completed_req_fn(request_queue_t *q, struct request *req) { struct pktcdvd_device *pd = pkt_find_dev(q); @@ -119,17 +100,6 @@ static void pkt_lowlevel_elv_completed_r pd->cdrw.elv_completed_req_fn(q, req); } -static int pkt_lowlevel_merge_requests_fn(request_queue_t *q, struct request *rq, struct request *next) -{ - struct pktcdvd_device *pd = pkt_find_dev(q); - BUG_ON(!pd); - - if (rq_data_dir(rq) == WRITE) - return 0; - - return pd->cdrw.merge_requests_fn(q, rq, next); -} - static void pkt_bio_init(struct bio *bio) { bio->bi_next = NULL; @@ -1933,17 +1903,20 @@ static int pkt_open_dev(struct pktcdvd_d } } spin_lock_irq(q->queue_lock); - pd->cdrw.elv_merge_fn = q->elevator.elevator_merge_fn; pd->cdrw.elv_completed_req_fn = q->elevator.elevator_completed_req_fn; - pd->cdrw.merge_requests_fn = q->merge_requests_fn; - q->elevator.elevator_merge_fn = pkt_lowlevel_elv_merge_fn; q->elevator.elevator_completed_req_fn = pkt_lowlevel_elv_completed_req_fn; - q->merge_requests_fn = pkt_lowlevel_merge_requests_fn; spin_unlock_irq(q->queue_lock); if (write) { if ((ret = pkt_open_write(pd))) goto restore_queue; + /* + * Some CDRW drives can not handle writes larger than one packet, + * even if the size is a multiple of the packet size. + */ + spin_lock_irq(q->queue_lock); + blk_queue_max_sectors(q, pd->settings.size); + spin_unlock_irq(q->queue_lock); set_bit(PACKET_WRITABLE, &pd->flags); } else { pkt_set_speed(pd, 0xffff, 0xffff); @@ -1960,9 +1933,7 @@ static int pkt_open_dev(struct pktcdvd_d restore_queue: spin_lock_irq(q->queue_lock); - q->elevator.elevator_merge_fn = pd->cdrw.elv_merge_fn; q->elevator.elevator_completed_req_fn = pd->cdrw.elv_completed_req_fn; - q->merge_requests_fn = pd->cdrw.merge_requests_fn; spin_unlock_irq(q->queue_lock); out_putdev: blkdev_put(pd->bdev); @@ -1986,9 +1957,7 @@ static void pkt_release_dev(struct pktcd q = bdev_get_queue(pd->bdev); pkt_set_speed(pd, 0xffff, 0xffff); spin_lock_irq(q->queue_lock); - q->elevator.elevator_merge_fn = pd->cdrw.elv_merge_fn; q->elevator.elevator_completed_req_fn = pd->cdrw.elv_completed_req_fn; - q->merge_requests_fn = pd->cdrw.merge_requests_fn; spin_unlock_irq(q->queue_lock); blkdev_put(pd->bdev); } diff -puN include/linux/pktcdvd.h~packet-limit-request-size include/linux/pktcdvd.h --- linux/include/linux/pktcdvd.h~packet-limit-request-size 2004-07-28 22:00:20.492858800 +0200 +++ linux-petero/include/linux/pktcdvd.h 2004-07-28 22:00:20.495858344 +0200 @@ -140,9 +140,7 @@ struct packet_cdrw struct list_head pkt_active_list; spinlock_t active_list_lock; /* Serialize access to pkt_active_list */ struct task_struct *thread; - elevator_merge_fn *elv_merge_fn; elevator_completed_req_fn *elv_completed_req_fn; - merge_requests_fn *merge_requests_fn; }; /* _ -- Peter Osterlund - petero2@telia.com http://w1.894.telia.com/~u89404340 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 3/3] Fix setting of maximum read speed in CDRW packet writing 2004-07-28 20:42 ` [PATCH 2/3] Simplified request size handling in CDRW packet writing Peter Osterlund @ 2004-07-28 20:49 ` Peter Osterlund 0 siblings, 0 replies; 3+ messages in thread From: Peter Osterlund @ 2004-07-28 20:49 UTC (permalink / raw) To: Andrew Morton; +Cc: linux-kernel pkt_iosched_process_queue() failed to enable maximum read speed on the Iomega Super DVD 8x USB drive. It's better to use 0xffff to set maximum speed, because it is what the driver does at other places, and 0xffff seems to be understood by more drive models than using some other large but non-standard speed. Signed-off-by: Peter Osterlund <petero2@telia.com> --- linux-petero/drivers/block/pktcdvd.c | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-) diff -puN drivers/block/pktcdvd.c~packet-read-speed drivers/block/pktcdvd.c --- linux/drivers/block/pktcdvd.c~packet-read-speed 2004-07-28 22:00:21.867649800 +0200 +++ linux-petero/drivers/block/pktcdvd.c 2004-07-28 22:00:21.870649344 +0200 @@ -63,6 +63,8 @@ #define VPRINTK(fmt, args...) #endif +#define MAX_SPEED 0xffff + #define ZONE(sector, pd) (((sector) + (pd)->offset) & ~((pd)->settings.size - 1)) @@ -400,9 +402,9 @@ static int pkt_set_speed(struct pktcdvd_ int ret; write_speed = write_speed * 177; /* should be 176.4, but CD-RWs rounds down */ - write_speed = min_t(unsigned, write_speed, 0xffff); + write_speed = min_t(unsigned, write_speed, MAX_SPEED); read_speed = read_speed * 177; - read_speed = min_t(unsigned, read_speed, 0xffff); + read_speed = min_t(unsigned, read_speed, MAX_SPEED); init_cdrom_command(&cgc, NULL, 0, CGC_DATA_NONE); cgc.sense = &sense; @@ -519,7 +521,7 @@ static void pkt_iosched_process_queue(st if (pd->iosched.successive_reads >= HI_SPEED_SWITCH) { if (pd->read_speed == pd->write_speed) { pd->read_speed = 0xff; - pkt_set_speed(pd, pd->write_speed, pd->read_speed); + pkt_set_speed(pd, pd->write_speed, MAX_SPEED); } } else { if (pd->read_speed != pd->write_speed) { @@ -1919,7 +1921,7 @@ static int pkt_open_dev(struct pktcdvd_d spin_unlock_irq(q->queue_lock); set_bit(PACKET_WRITABLE, &pd->flags); } else { - pkt_set_speed(pd, 0xffff, 0xffff); + pkt_set_speed(pd, MAX_SPEED, MAX_SPEED); clear_bit(PACKET_WRITABLE, &pd->flags); } @@ -1955,7 +1957,7 @@ static void pkt_release_dev(struct pktcd pkt_lock_door(pd, 0); q = bdev_get_queue(pd->bdev); - pkt_set_speed(pd, 0xffff, 0xffff); + pkt_set_speed(pd, MAX_SPEED, MAX_SPEED); spin_lock_irq(q->queue_lock); q->elevator.elevator_completed_req_fn = pd->cdrw.elv_completed_req_fn; spin_unlock_irq(q->queue_lock); _ -- Peter Osterlund - petero2@telia.com http://w1.894.telia.com/~u89404340 ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2004-07-28 20:53 UTC | newest] Thread overview: 3+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2004-07-28 20:36 [PATCH 1/3] Trivial CDRW packet writing doc update Peter Osterlund 2004-07-28 20:42 ` [PATCH 2/3] Simplified request size handling in CDRW packet writing Peter Osterlund 2004-07-28 20:49 ` [PATCH 3/3] Fix setting of maximum read speed " Peter Osterlund
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.