Message ID | 200906232327.27610.bzolnier@gmail.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Date: Tue, 23 Jun 2009 23:27:27 +0200 > From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> > Subject: [PATCH] ide: always kill the whole request on error > > * Use blk_rq_bytes() instead of obsolete ide_rq_bytes() in ide_kill_rq() > and ide_floppy_do_request() for failed requests. > [ bugfix part ] > > * Use blk_rq_bytes() instead of obsolete ide_rq_bytes() in ide_do_devset() > and ide_complete_drive_reset(). Then remove ide_rq_bytes(). > [ cleanup part ] > > Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> > --- > 'cleanup part' tested, limited testing with 'bugfix part' > (using simulated failures of disk fs requests) Considering this alongsize patch #2, it even more begs the question as to why special requests on floppy and tape were handled differently. And that 'error <= 0' test, strange. I have a hard time believing all of these differences are there for no reason at all. :-) > drivers/ide/ide-devsets.c | 2 +- > drivers/ide/ide-eh.c | 2 +- > drivers/ide/ide-floppy.c | 2 +- > drivers/ide/ide-io.c | 14 ++------------ > include/linux/ide.h | 1 - > 5 files changed, 5 insertions(+), 16 deletions(-) > > Index: b/drivers/ide/ide-devsets.c > =================================================================== > --- a/drivers/ide/ide-devsets.c > +++ b/drivers/ide/ide-devsets.c > @@ -183,6 +183,6 @@ ide_startstop_t ide_do_devset(ide_drive_ > err = setfunc(drive, *(int *)&rq->cmd[1]); > if (err) > rq->errors = err; > - ide_complete_rq(drive, err, ide_rq_bytes(rq)); > + ide_complete_rq(drive, err, blk_rq_bytes(rq)); > return ide_stopped; > } > Index: b/drivers/ide/ide-eh.c > =================================================================== > --- a/drivers/ide/ide-eh.c > +++ b/drivers/ide/ide-eh.c > @@ -149,7 +149,7 @@ static inline void ide_complete_drive_re > if (rq && blk_special_request(rq) && rq->cmd[0] == REQ_DRIVE_RESET) { > if (err <= 0 && rq->errors == 0) > rq->errors = -EIO; > - ide_complete_rq(drive, err ? err : 0, ide_rq_bytes(rq)); > + ide_complete_rq(drive, err ? err : 0, blk_rq_bytes(rq)); > } > } > > Index: b/drivers/ide/ide-floppy.c > =================================================================== > --- a/drivers/ide/ide-floppy.c > +++ b/drivers/ide/ide-floppy.c > @@ -293,7 +293,7 @@ out_end: > drive->failed_pc = NULL; > if (blk_fs_request(rq) == 0 && rq->errors == 0) > rq->errors = -EIO; > - ide_complete_rq(drive, -EIO, ide_rq_bytes(rq)); > + ide_complete_rq(drive, -EIO, blk_rq_bytes(rq)); > return ide_stopped; > } > > Index: b/drivers/ide/ide-io.c > =================================================================== > --- a/drivers/ide/ide-io.c > +++ b/drivers/ide/ide-io.c > @@ -112,16 +112,6 @@ void ide_complete_cmd(ide_drive_t *drive > } > } > > -/* obsolete, blk_rq_bytes() should be used instead */ > -unsigned int ide_rq_bytes(struct request *rq) > -{ > - if (blk_pc_request(rq)) > - return blk_rq_bytes(rq); > - else > - return blk_rq_cur_sectors(rq) << 9; > -} > -EXPORT_SYMBOL_GPL(ide_rq_bytes); > - > int ide_complete_rq(ide_drive_t *drive, int error, unsigned int nr_bytes) > { > ide_hwif_t *hwif = drive->hwif; > @@ -152,14 +142,14 @@ void ide_kill_rq(ide_drive_t *drive, str > > if ((media == ide_floppy || media == ide_tape) && drv_req) { > rq->errors = 0; > - ide_complete_rq(drive, -EIO, blk_rq_bytes(rq)); > } else { > if (media == ide_tape) > rq->errors = IDE_DRV_ERROR_GENERAL; > else if (blk_fs_request(rq) == 0 && rq->errors == 0) > rq->errors = -EIO; > - ide_complete_rq(drive, -EIO, ide_rq_bytes(rq)); > } > + > + ide_complete_rq(drive, -EIO, blk_rq_bytes(rq)); > } > > static void ide_tf_set_specify_cmd(ide_drive_t *drive, struct ide_taskfile *tf) > Index: b/include/linux/ide.h > =================================================================== > --- a/include/linux/ide.h > +++ b/include/linux/ide.h > @@ -1062,7 +1062,6 @@ int generic_ide_ioctl(ide_drive_t *, str > extern int ide_vlb_clk; > extern int ide_pci_clk; > > -unsigned int ide_rq_bytes(struct request *); > int ide_end_rq(ide_drive_t *, struct request *, int, unsigned int); > void ide_kill_rq(ide_drive_t *, struct request *); > -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, 2009-06-23 at 16:19 -0700, David Miller wrote: > From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> > Date: Tue, 23 Jun 2009 23:27:27 +0200 > > From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> > > Subject: [PATCH] ide: always kill the whole request on error > > --- a/drivers/ide/ide-eh.c > > +++ b/drivers/ide/ide-eh.c > > @@ -149,7 +149,7 @@ static inline void ide_complete_drive_re > > if (rq && blk_special_request(rq) && rq->cmd[0] == REQ_DRIVE_RESET) { > > if (err <= 0 && rq->errors == 0) > > rq->errors = -EIO; > > - ide_complete_rq(drive, err ? err : 0, ide_rq_bytes(rq)); > > + ide_complete_rq(drive, err ? err : 0, blk_rq_bytes(rq)); Doesn't that "err ? err : 0" look odd? Why not just err? -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Joe Perches <joe@perches.com> Date: Tue, 23 Jun 2009 16:37:54 -0700 > On Tue, 2009-06-23 at 16:19 -0700, David Miller wrote: >> From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> >> Date: Tue, 23 Jun 2009 23:27:27 +0200 >> > From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> >> > Subject: [PATCH] ide: always kill the whole request on error >> > --- a/drivers/ide/ide-eh.c >> > +++ b/drivers/ide/ide-eh.c >> > @@ -149,7 +149,7 @@ static inline void ide_complete_drive_re >> > if (rq && blk_special_request(rq) && rq->cmd[0] == REQ_DRIVE_RESET) { >> > if (err <= 0 && rq->errors == 0) >> > rq->errors = -EIO; >> > - ide_complete_rq(drive, err ? err : 0, ide_rq_bytes(rq)); >> > + ide_complete_rq(drive, err ? err : 0, blk_rq_bytes(rq)); > > Doesn't that "err ? err : 0" look odd? > Why not just err? These functions are full of surprises :-) Yes, plain 'err' should be absolutely equivalent to what's there right now. -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wednesday 24 June 2009 01:19:04 David Miller wrote: > From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> > Date: Tue, 23 Jun 2009 23:27:27 +0200 > > > From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> > > Subject: [PATCH] ide: always kill the whole request on error > > > > * Use blk_rq_bytes() instead of obsolete ide_rq_bytes() in ide_kill_rq() > > and ide_floppy_do_request() for failed requests. > > [ bugfix part ] > > > > * Use blk_rq_bytes() instead of obsolete ide_rq_bytes() in ide_do_devset() > > and ide_complete_drive_reset(). Then remove ide_rq_bytes(). > > [ cleanup part ] > > > > Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> > > --- > > 'cleanup part' tested, limited testing with 'bugfix part' > > (using simulated failures of disk fs requests) > > Considering this alongsize patch #2, it even more begs the > question as to why special requests on floppy and tape were > handled differently. And that 'error <= 0' test, strange. TBH I fail to see how it relates to changes present in _this_ patch as no change in _this_ patch affects special tape/floppy requests.. > I have a hard time believing all of these differences are there for no > reason at all. :-) Lets keep personal believes aside in the technical discussions. ;) > > drivers/ide/ide-devsets.c | 2 +- > > drivers/ide/ide-eh.c | 2 +- > > drivers/ide/ide-floppy.c | 2 +- > > drivers/ide/ide-io.c | 14 ++------------ > > include/linux/ide.h | 1 - > > 5 files changed, 5 insertions(+), 16 deletions(-) > > > > Index: b/drivers/ide/ide-devsets.c > > =================================================================== > > --- a/drivers/ide/ide-devsets.c > > +++ b/drivers/ide/ide-devsets.c > > @@ -183,6 +183,6 @@ ide_startstop_t ide_do_devset(ide_drive_ > > err = setfunc(drive, *(int *)&rq->cmd[1]); > > if (err) > > rq->errors = err; > > - ide_complete_rq(drive, err, ide_rq_bytes(rq)); > > + ide_complete_rq(drive, err, blk_rq_bytes(rq)); > > return ide_stopped; > > } > > Index: b/drivers/ide/ide-eh.c > > =================================================================== > > --- a/drivers/ide/ide-eh.c > > +++ b/drivers/ide/ide-eh.c > > @@ -149,7 +149,7 @@ static inline void ide_complete_drive_re > > if (rq && blk_special_request(rq) && rq->cmd[0] == REQ_DRIVE_RESET) { > > if (err <= 0 && rq->errors == 0) > > rq->errors = -EIO; > > - ide_complete_rq(drive, err ? err : 0, ide_rq_bytes(rq)); > > + ide_complete_rq(drive, err ? err : 0, blk_rq_bytes(rq)); > > } > > } > > > > Index: b/drivers/ide/ide-floppy.c > > =================================================================== > > --- a/drivers/ide/ide-floppy.c > > +++ b/drivers/ide/ide-floppy.c > > @@ -293,7 +293,7 @@ out_end: > > drive->failed_pc = NULL; > > if (blk_fs_request(rq) == 0 && rq->errors == 0) > > rq->errors = -EIO; > > - ide_complete_rq(drive, -EIO, ide_rq_bytes(rq)); > > + ide_complete_rq(drive, -EIO, blk_rq_bytes(rq)); > > return ide_stopped; > > } > > > > Index: b/drivers/ide/ide-io.c > > =================================================================== > > --- a/drivers/ide/ide-io.c > > +++ b/drivers/ide/ide-io.c > > @@ -112,16 +112,6 @@ void ide_complete_cmd(ide_drive_t *drive > > } > > } > > > > -/* obsolete, blk_rq_bytes() should be used instead */ > > -unsigned int ide_rq_bytes(struct request *rq) > > -{ > > - if (blk_pc_request(rq)) > > - return blk_rq_bytes(rq); > > - else > > - return blk_rq_cur_sectors(rq) << 9; > > -} > > -EXPORT_SYMBOL_GPL(ide_rq_bytes); > > - > > int ide_complete_rq(ide_drive_t *drive, int error, unsigned int nr_bytes) > > { > > ide_hwif_t *hwif = drive->hwif; > > @@ -152,14 +142,14 @@ void ide_kill_rq(ide_drive_t *drive, str > > > > if ((media == ide_floppy || media == ide_tape) && drv_req) { > > rq->errors = 0; > > - ide_complete_rq(drive, -EIO, blk_rq_bytes(rq)); > > } else { > > if (media == ide_tape) > > rq->errors = IDE_DRV_ERROR_GENERAL; > > else if (blk_fs_request(rq) == 0 && rq->errors == 0) > > rq->errors = -EIO; > > - ide_complete_rq(drive, -EIO, ide_rq_bytes(rq)); > > } > > + > > + ide_complete_rq(drive, -EIO, blk_rq_bytes(rq)); > > } > > > > static void ide_tf_set_specify_cmd(ide_drive_t *drive, struct ide_taskfile *tf) > > Index: b/include/linux/ide.h > > =================================================================== > > --- a/include/linux/ide.h > > +++ b/include/linux/ide.h > > @@ -1062,7 +1062,6 @@ int generic_ide_ioctl(ide_drive_t *, str > > extern int ide_vlb_clk; > > extern int ide_pci_clk; > > > > -unsigned int ide_rq_bytes(struct request *); > > int ide_end_rq(ide_drive_t *, struct request *, int, unsigned int); > > void ide_kill_rq(ide_drive_t *, struct request *); -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Date: Wed, 24 Jun 2009 02:49:32 +0200 > On Wednesday 24 June 2009 01:19:04 David Miller wrote: >> I have a hard time believing all of these differences are there for no >> reason at all. :-) > > Lets keep personal believes aside in the technical discussions. ;) Sure, but every time I've ignored such possibility I've regretted it after a long debugging session later, that's all :-) -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Date: Wed, 24 Jun 2009 02:49:32 +0200 > On Wednesday 24 June 2009 01:19:04 David Miller wrote: >> From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> >> Date: Tue, 23 Jun 2009 23:27:27 +0200 >> >> > From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> >> > Subject: [PATCH] ide: always kill the whole request on error >> > >> > * Use blk_rq_bytes() instead of obsolete ide_rq_bytes() in ide_kill_rq() >> > and ide_floppy_do_request() for failed requests. >> > [ bugfix part ] >> > >> > * Use blk_rq_bytes() instead of obsolete ide_rq_bytes() in ide_do_devset() >> > and ide_complete_drive_reset(). Then remove ide_rq_bytes(). >> > [ cleanup part ] >> > >> > Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> >> > --- >> > 'cleanup part' tested, limited testing with 'bugfix part' >> > (using simulated failures of disk fs requests) >> >> Considering this alongsize patch #2, it even more begs the >> question as to why special requests on floppy and tape were >> handled differently. And that 'error <= 0' test, strange. > > TBH I fail to see how it relates to changes present in _this_ patch > as no change in _this_ patch affects special tape/floppy requests.. The previous patch is a prerequesite for this one. So we should discuss them as a whole. Because if we can't remove the "ide/floppy RQ error 0 instead of -EIO" bit, then we don't make these further consolidations either. -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wednesday 24 June 2009 08:49:48 David Miller wrote: > From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> > Date: Wed, 24 Jun 2009 02:49:32 +0200 > > > On Wednesday 24 June 2009 01:19:04 David Miller wrote: > >> From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> > >> Date: Tue, 23 Jun 2009 23:27:27 +0200 > >> > >> > From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> > >> > Subject: [PATCH] ide: always kill the whole request on error > >> > > >> > * Use blk_rq_bytes() instead of obsolete ide_rq_bytes() in ide_kill_rq() > >> > and ide_floppy_do_request() for failed requests. > >> > [ bugfix part ] > >> > > >> > * Use blk_rq_bytes() instead of obsolete ide_rq_bytes() in ide_do_devset() > >> > and ide_complete_drive_reset(). Then remove ide_rq_bytes(). > >> > [ cleanup part ] > >> > > >> > Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> > >> > --- > >> > 'cleanup part' tested, limited testing with 'bugfix part' > >> > (using simulated failures of disk fs requests) > >> > >> Considering this alongsize patch #2, it even more begs the > >> question as to why special requests on floppy and tape were > >> handled differently. And that 'error <= 0' test, strange. > > > > TBH I fail to see how it relates to changes present in _this_ patch > > as no change in _this_ patch affects special tape/floppy requests.. > > The previous patch is a prerequesite for this one. So we should > discuss them as a whole. Because if we can't remove the "ide/floppy > RQ error 0 instead of -EIO" bit, then we don't make these further > consolidations either. Untrue, we can easily redo the patch #3 to not be dependent on patch #2. Do you prefer such version instead? -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Date: Wed, 24 Jun 2009 11:38:00 +0200 > On Wednesday 24 June 2009 08:49:48 David Miller wrote: >> From: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> >> Date: Wed, 24 Jun 2009 02:49:32 +0200 >> >> The previous patch is a prerequesite for this one. So we should >> discuss them as a whole. Because if we can't remove the "ide/floppy >> RQ error 0 instead of -EIO" bit, then we don't make these further >> consolidations either. > > Untrue, we can easily redo the patch #3 to not be dependent on patch #2. Good point. > Do you prefer such version instead? Let's wait until we come to some conclusion about patch #2. -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Index: b/drivers/ide/ide-devsets.c =================================================================== --- a/drivers/ide/ide-devsets.c +++ b/drivers/ide/ide-devsets.c @@ -183,6 +183,6 @@ ide_startstop_t ide_do_devset(ide_drive_ err = setfunc(drive, *(int *)&rq->cmd[1]); if (err) rq->errors = err; - ide_complete_rq(drive, err, ide_rq_bytes(rq)); + ide_complete_rq(drive, err, blk_rq_bytes(rq)); return ide_stopped; } Index: b/drivers/ide/ide-eh.c =================================================================== --- a/drivers/ide/ide-eh.c +++ b/drivers/ide/ide-eh.c @@ -149,7 +149,7 @@ static inline void ide_complete_drive_re if (rq && blk_special_request(rq) && rq->cmd[0] == REQ_DRIVE_RESET) { if (err <= 0 && rq->errors == 0) rq->errors = -EIO; - ide_complete_rq(drive, err ? err : 0, ide_rq_bytes(rq)); + ide_complete_rq(drive, err ? err : 0, blk_rq_bytes(rq)); } } Index: b/drivers/ide/ide-floppy.c =================================================================== --- a/drivers/ide/ide-floppy.c +++ b/drivers/ide/ide-floppy.c @@ -293,7 +293,7 @@ out_end: drive->failed_pc = NULL; if (blk_fs_request(rq) == 0 && rq->errors == 0) rq->errors = -EIO; - ide_complete_rq(drive, -EIO, ide_rq_bytes(rq)); + ide_complete_rq(drive, -EIO, blk_rq_bytes(rq)); return ide_stopped; } Index: b/drivers/ide/ide-io.c =================================================================== --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c @@ -112,16 +112,6 @@ void ide_complete_cmd(ide_drive_t *drive } } -/* obsolete, blk_rq_bytes() should be used instead */ -unsigned int ide_rq_bytes(struct request *rq) -{ - if (blk_pc_request(rq)) - return blk_rq_bytes(rq); - else - return blk_rq_cur_sectors(rq) << 9; -} -EXPORT_SYMBOL_GPL(ide_rq_bytes); - int ide_complete_rq(ide_drive_t *drive, int error, unsigned int nr_bytes) { ide_hwif_t *hwif = drive->hwif; @@ -152,14 +142,14 @@ void ide_kill_rq(ide_drive_t *drive, str if ((media == ide_floppy || media == ide_tape) && drv_req) { rq->errors = 0; - ide_complete_rq(drive, -EIO, blk_rq_bytes(rq)); } else { if (media == ide_tape) rq->errors = IDE_DRV_ERROR_GENERAL; else if (blk_fs_request(rq) == 0 && rq->errors == 0) rq->errors = -EIO; - ide_complete_rq(drive, -EIO, ide_rq_bytes(rq)); } + + ide_complete_rq(drive, -EIO, blk_rq_bytes(rq)); } static void ide_tf_set_specify_cmd(ide_drive_t *drive, struct ide_taskfile *tf) Index: b/include/linux/ide.h =================================================================== --- a/include/linux/ide.h +++ b/include/linux/ide.h @@ -1062,7 +1062,6 @@ int generic_ide_ioctl(ide_drive_t *, str extern int ide_vlb_clk; extern int ide_pci_clk; -unsigned int ide_rq_bytes(struct request *); int ide_end_rq(ide_drive_t *, struct request *, int, unsigned int); void ide_kill_rq(ide_drive_t *, struct request *);