[dm-devel] rq-based mpath failed path on SCSI target failure (malformed discard)

Mike Snitzer snitzer at redhat.com
Mon Jul 26 15:00:00 UTC 2010


On Mon, Jul 26 2010 at  9:30am -0400,
Mike Snitzer <snitzer at redhat.com> wrote:

> Hi,
> 
> I have been implementing discard support for the various DM targets.  I
> have a LUN that requires a 4K alignment for all discard requests.  I
> forced the issue (by misconfiguring the alignment such that discards
> would be misaligned).  Multipath failed the path once the SCSI layer got
> the following error.
> 
> My question: shouldn't mpath _not_ fail the path for "Illegal
> Request".. "Parameter value invalid"?  The same request would fail on
> any path given that the failure is on the target side (rejecting the
> malformed discard request).  Following setup is ext4 FS ontop of linear
> DM mapping (dm-2) ontop of request-based mpath mapping (dm-1):
> 
> EXT4-fs (dm-2): mounted filesystem with ordered data mode
> sd 3:0:0:0: [sda] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
> sd 3:0:0:0: [sda] Sense Key : Illegal Request [current] 
> Info fld=0x0
> sd 3:0:0:0: [sda] Add. Sense: Parameter value invalid
> sd 3:0:0:0: [sda] CDB: Write same(16): 93 08 00 00 00 00 00 00 45 82 00 00 03 00 00 00
> end_request: I/O error, dev sda, sector 17794
> device-mapper: multipath: Failing path 8:0.

The following patch sorts this out in multipath; special-cases discard
requests so that they don't enduce path failures:

diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
index ec2b43e..125c80f 100644
--- a/drivers/md/dm-mpath.c
+++ b/drivers/md/dm-mpath.c
@@ -1272,6 +1272,9 @@ static int do_end_io(struct multipath *m, struct request *clone,
 	if (error == -EOPNOTSUPP)
 		return error;
 
+	if (clone->cmd_flags & REQ_DISCARD)
+		return error;   /* pass all discard request failures up */
+
 	if (mpio->pgpath)
 		fail_path(mpio->pgpath);
 




More information about the dm-devel mailing list