ide: always kill the whole request on error
PATCH 3/6 ide: always kill the whole request on error
From: Bartlomiej Zolnierkiewicz <[email protected]>
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 ]
---
'cleanup part' tested, limited testing with 'bugfix part' (using simulated failures of disk fs requests)
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(-)
drivers/ide/ide-devsets.c +1 -1
@@ -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; }
drivers/ide/ide-eh.c +1 -1
@@ -149,7 +149,7 @@ static inline void ide_complete_drive_reif (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)); } }
drivers/ide/ide-floppy.c +1 -1
@@ -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; }
drivers/ide/ide-io.c +2 -12
@@ -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, strif ((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)
include/linux/ide.h +0 -1
@@ -1062,7 +1062,6 @@ int generic_ide_ioctl(ide_drive_t *, strextern 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 *);
From: Bartlomiej Zolnierkiewicz <[email protected]>
Date: Tue, 23 Jun 2009 23:27:27 +0200
Quoted 7 lines
From: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: always kill the whole request on error* Use
blk_rq_bytes()instead of obsoleteide_rq_bytes()inide_kill_rq()andide_floppy_do_request()for failed requests.
[ bugfix part ]
Quoted 8 lines
* Use
blk_rq_bytes()instead of obsoleteide_rq_bytes()inide_do_devset()andide_complete_drive_reset(). Then removeide_rq_bytes(). [ cleanup part ]Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>---
'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. :-)
Quoted 95 lines
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
===================================================================drivers/ide/ide-devsets.c +1
-1@@ -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
===================================================================drivers/ide/ide-eh.c +1
-1@@ -149,7 +149,7 @@ static inline void ide_complete_drive_reif (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
===================================================================drivers/ide/ide-floppy.c +1
-1@@ -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
===================================================================drivers/ide/ide-io.c +2
-12@@ -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, strif ((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
===================================================================include/linux/ide.h +0
-1@@ -1062,7 +1062,6 @@ int generic_ide_ioctl(ide_drive_t *, strextern 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 *);
Quoted 12 lines · David Miller
From: Bartlomiej Zolnierkiewicz <[email protected]>
Date: Tue, 23 Jun 2009 23:27:27 +0200drivers/ide/ide-eh.c static inline void ide_complete_drive_re · line 152
Quoted 10 lines
From: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: always kill the whole request on errordrivers/ide/ide-eh.c +1
-1@@ -149,7 +149,7 @@ static inline void ide_complete_drive_reif (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?
From: Joe Perches <[email protected]>
Date: Tue, 23 Jun 2009 16:37:54 -0700
Quoted 16 lines · David Miller
Quoted 12 lines
From: Bartlomiej Zolnierkiewicz <[email protected]>
Date: Tue, 23 Jun 2009 23:27:27 +0200drivers/ide/ide-eh.c static inline void ide_complete_drive_re · line 152
Quoted 10 lines
From: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: always kill the whole request on errordrivers/ide/ide-eh.c +1
-1@@ -149,7 +149,7 @@ static inline void ide_complete_drive_reif (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.
Quoted 14 lines · On Wednesday 24 June 2009 01:19:04 David Miller wrote:
From: Bartlomiej Zolnierkiewicz <[email protected]>
Date: Tue, 23 Jun 2009 23:27:27 +0200Quoted 11 lines
From: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: always kill the whole request on error* Use
blk_rq_bytes()instead of obsoleteide_rq_bytes()inide_kill_rq()andide_floppy_do_request()for failed requests.
[ bugfix part ]* Use
blk_rq_bytes()instead of obsoleteide_rq_bytes()inide_do_devset()andide_complete_drive_reset(). Then removeide_rq_bytes(). [ cleanup part ]
Quoted 8 lines
Quoted 4 lines
Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>---
'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..
Quoted 2 lines
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. ;)
Quoted 94 lines
Quoted 94 lines
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
===================================================================drivers/ide/ide-devsets.c +1
-1@@ -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
===================================================================drivers/ide/ide-eh.c +1
-1@@ -149,7 +149,7 @@ static inline void ide_complete_drive_reif (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
===================================================================drivers/ide/ide-floppy.c +1
-1@@ -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
===================================================================drivers/ide/ide-io.c +2
-12@@ -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, strif ((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
===================================================================include/linux/ide.h +0
-1@@ -1062,7 +1062,6 @@ int generic_ide_ioctl(ide_drive_t *, strextern 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 *);
From: Bartlomiej Zolnierkiewicz <[email protected]>
Date: Wed, 24 Jun 2009 02:49:32 +0200
Quoted 5 lines · On Wednesday 24 June 2009 01:19:04 David Miller wrote:
Quoted 2 lines
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 :-)
From: Bartlomiej Zolnierkiewicz <[email protected]>
Date: Wed, 24 Jun 2009 02:49:32 +0200
Quoted 20 lines · On Wednesday 24 June 2009 01:19:04 David Miller wrote:
Quoted 19 lines
From: Bartlomiej Zolnierkiewicz <[email protected]>
Date: Tue, 23 Jun 2009 23:27:27 +0200Quoted 15 lines
From: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: always kill the whole request on error* Use
blk_rq_bytes()instead of obsoleteide_rq_bytes()inide_kill_rq()andide_floppy_do_request()for failed requests.
[ bugfix part ]* Use
blk_rq_bytes()instead of obsoleteide_rq_bytes()inide_do_devset()andide_complete_drive_reset(). Then removeide_rq_bytes(). [ cleanup part ]Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>---
'cleanup part' tested, limited testing with 'bugfix part' (using simulated failures of disk fs requests)
Quoted 6 lines
Quoted 3 lines
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.
Quoted 27 lines · On Wednesday 24 June 2009 08:49:48 David Miller wrote:
From: Bartlomiej Zolnierkiewicz <[email protected]>
Date: Wed, 24 Jun 2009 02:49:32 +0200Quoted 24 lines · On Wednesday 24 June 2009 01:19:04 David Miller wrote:
Quoted 22 lines
From: Bartlomiej Zolnierkiewicz <[email protected]>
Date: Tue, 23 Jun 2009 23:27:27 +0200Quoted 7 lines
From: Bartlomiej Zolnierkiewicz <[email protected]>
Subject: [PATCH] ide: always kill the whole request on error* Use
blk_rq_bytes()instead of obsoleteide_rq_bytes()inide_kill_rq()andide_floppy_do_request()for failed requests.
[ bugfix part ]Quoted 8 lines
* Use
blk_rq_bytes()instead of obsoleteide_rq_bytes()inide_do_devset()andide_complete_drive_reset(). Then removeide_rq_bytes(). [ cleanup part ]Signed-off-by Bartlomiej Zolnierkiewicz <[email protected]>---
'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.
Quoted 7 lines
Quoted 2 lines
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?
From: Bartlomiej Zolnierkiewicz <[email protected]>
Date: Wed, 24 Jun 2009 11:38:00 +0200
Quoted 10 lines · On Wednesday 24 June 2009 08:49:48 David Miller wrote:
Quoted 7 lines
From: Bartlomiej Zolnierkiewicz <[email protected]>
Date: Wed, 24 Jun 2009 02:49:32 +0200The 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.
Quoted 1 line
Do you prefer such version instead?
Let's wait until we come to some conclusion about patch #2.