On Tue, 29 Apr 2008 13:55:13 +0200 "Bartlomiej Zolnierkiewicz" <bzolnier@xxxxxxxxx> wrote: > On Tue, Apr 29, 2008 at 9:54 AM, Jens Axboe <jens.axboe@xxxxxxxxxx> wrote: > > > > On Sat, Apr 26 2008, FUJITA Tomonori wrote: > > > This is an updated patchset for large command support to the block > > > layer: > > > > > > http://marc.info/?l=linux-scsi&m=120817127118449&w=2 > > > > > > We rarely handle large commands. So for optimization, a struct request > > > still has a static array for a command. rq_init sets rq->cmd pointer > > > to the static array. In short, rq_init() does > > > > > > rq->cmd = rq->__cmd; > > > > > > So we can access to rq->cmd and rq->cmd_len as before. > > > > > > This change requires everyone to initialize the request in a proper > > > way (that is, just doing a memset() will not work). Now we have > > > rq_init() that works for any path so this patchset can cleanly convert > > > users of requests on the stack or kmalloced requests to use it (the > > > previous patchset does it in a hacky way): > > > > > > http://marc.info/?l=linux-scsi&m=120911792725876&w=2 > > > > > > This patchset is against Jens' for-linus branch. > > > > > > #1-#4 patches can be applied via Jens' tree now. #5 patch is for > > > IDE. It cleanly can be applied to both Bart's latest quilt tree and > > > Jens' tree though Bart's quilt tree has some pending IDE patches. #4 > > > patch depends on #4. #6 patch depends on #1-#5. > > > > > > I guess that the easiest way to apply this patchset would be: > > > > > > 1. Pushing Bart's quilt tree to mainline. > > > 2. Rebasing Jens' tree to mainline. > > > 3. Pushing this patchset via Jens' tree. > > > > > > Jens and Bart, let me know if I can do something to make the process > > > easier. > > > > > > Bart, I will try to push the patchset to remove the requests on the > > > stack for 2.6.27: > > > > > > http://marc.info/?l=linux-ide&m=120882410712466&w=2 > > > > I've applied all patches to the for-linus branch, it should go up > > soonish. If anyone has problems with this, please holler SOON. > > Fine with me (patches look good and survived quick testing). Thanks, > My only concern is that the final series from Tomo lacked > > "block: replace sizeof(rq->cmd) with BLK_MAX_CDB" > > and it is also not in for-linus branch (it has to be merged > before "block: add large command support" patch or ide-cd > will break). Sorry, somehow I forgot to put it in the patchset. Yeah, probabaly initializing only 4 (or 8) bytes in rq->cmd would not work for ide-cd. Jens, please put this to the for-linus branch. == From: FUJITA Tomonori <fujita.tomonori@xxxxxxxxxxxxx> Subject: [PATCH] block: replace sizeof(rq->cmd) with BLK_MAX_CDB This is a preparation for changing rq->cmd from the static array to a pointer. Signed-off-by: FUJITA Tomonori <fujita.tomonori@xxxxxxxxxxxxx> Cc: Boaz Harrosh <bharrosh@xxxxxxxxxxx> Cc: Bartlomiej Zolnierkiewicz <bzolnier@xxxxxxxxx> Cc: Jens Axboe <jens.axboe@xxxxxxxxxx> --- block/blk-core.c | 2 +- drivers/ide/ide-cd.c | 4 ++-- drivers/ide/ide-cd_verbose.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/block/blk-core.c b/block/blk-core.c index 35ae1c0..abe5b9f 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -174,7 +174,7 @@ void blk_dump_rq_flags(struct request *rq, char *msg) if (blk_pc_request(rq)) { printk(KERN_INFO " cdb: "); - for (bit = 0; bit < sizeof(rq->cmd); bit++) + for (bit = 0; bit < BLK_MAX_CDB; bit++) printk("%02x ", rq->cmd[bit]); printk("\n"); } diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index fe9df38..68e7f19 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c @@ -782,7 +782,7 @@ static ide_startstop_t cdrom_start_seek_continuation(ide_drive_t *drive) sector_div(frame, queue_hardsect_size(drive->queue) >> SECTOR_BITS); - memset(rq->cmd, 0, sizeof(rq->cmd)); + memset(rq->cmd, 0, BLK_MAX_CDB); rq->cmd[0] = GPCMD_SEEK; put_unaligned(cpu_to_be32(frame), (unsigned int *) &rq->cmd[2]); @@ -1694,7 +1694,7 @@ static int ide_cdrom_prep_fs(struct request_queue *q, struct request *rq) long block = (long)rq->hard_sector / (hard_sect >> 9); unsigned long blocks = rq->hard_nr_sectors / (hard_sect >> 9); - memset(rq->cmd, 0, sizeof(rq->cmd)); + memset(rq->cmd, 0, BLK_MAX_CDB); if (rq_data_dir(rq) == READ) rq->cmd[0] = GPCMD_READ_10; diff --git a/drivers/ide/ide-cd_verbose.c b/drivers/ide/ide-cd_verbose.c index 6ed7ca0..6490a2d 100644 --- a/drivers/ide/ide-cd_verbose.c +++ b/drivers/ide/ide-cd_verbose.c @@ -326,7 +326,7 @@ void ide_cd_log_error(const char *name, struct request *failed_command, printk(KERN_ERR " The failed \"%s\" packet command " "was: \n \"", s); - for (i = 0; i < sizeof(failed_command->cmd); i++) + for (i = 0; i < BLK_MAX_CDB; i++) printk(KERN_CONT "%02x ", failed_command->cmd[i]); printk(KERN_CONT "\"\n"); } -- 1.5.4.2 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html