diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-17 20:54:40 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-03-17 20:54:40 -0400 |
commit | c55d267de274d308927b60c3e740c1a826832317 (patch) | |
tree | 21b53a8c725d9f9650f60d94b349459d5b8dae10 /drivers/md | |
parent | 61ef46fd45c3c62dc7c880a45dd2aa841b9af8fb (diff) | |
parent | bc898c97f7ba24def788d9f80786cf028a197122 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6: (170 commits)
[SCSI] scsi_dh_rdac: Add MD36xxf into device list
[SCSI] scsi_debug: add consecutive medium errors
[SCSI] libsas: fix ata list corruption issue
[SCSI] hpsa: export resettable host attribute
[SCSI] hpsa: move device attributes to avoid forward declarations
[SCSI] scsi_debug: Logical Block Provisioning (SBC3r26)
[SCSI] sd: Logical Block Provisioning update
[SCSI] Include protection operation in SCSI command trace
[SCSI] hpsa: fix incorrect PCI IDs and add two new ones (2nd try)
[SCSI] target: Fix volume size misreporting for volumes > 2TB
[SCSI] bnx2fc: Broadcom FCoE offload driver
[SCSI] fcoe: fix broken fcoe interface reset
[SCSI] fcoe: precedence bug in fcoe_filter_frames()
[SCSI] libfcoe: Remove stale fcoe-netdev entries
[SCSI] libfcoe: Move FCOE_MTU definition from fcoe.h to libfcoe.h
[SCSI] libfc: introduce __fc_fill_fc_hdr that accepts fc_hdr as an argument
[SCSI] fcoe, libfc: initialize EM anchors list and then update npiv EMs
[SCSI] Revert "[SCSI] libfc: fix exchange being deleted when the abort itself is timed out"
[SCSI] libfc: Fixing a memory leak when destroying an interface
[SCSI] megaraid_sas: Version and Changelog update
...
Fix up trivial conflicts due to whitespace differences in
drivers/scsi/libsas/{sas_ata.c,sas_scsi_host.c}
Diffstat (limited to 'drivers/md')
-rw-r--r-- | drivers/md/dm-mpath.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index b82d28819e2a..4b0b63c290a6 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c | |||
@@ -1283,24 +1283,22 @@ static int do_end_io(struct multipath *m, struct request *clone, | |||
1283 | if (!error && !clone->errors) | 1283 | if (!error && !clone->errors) |
1284 | return 0; /* I/O complete */ | 1284 | return 0; /* I/O complete */ |
1285 | 1285 | ||
1286 | if (error == -EOPNOTSUPP) | 1286 | if (error == -EOPNOTSUPP || error == -EREMOTEIO) |
1287 | return error; | ||
1288 | |||
1289 | if (clone->cmd_flags & REQ_DISCARD) | ||
1290 | /* | ||
1291 | * Pass all discard request failures up. | ||
1292 | * FIXME: only fail_path if the discard failed due to a | ||
1293 | * transport problem. This requires precise understanding | ||
1294 | * of the underlying failure (e.g. the SCSI sense). | ||
1295 | */ | ||
1296 | return error; | 1287 | return error; |
1297 | 1288 | ||
1298 | if (mpio->pgpath) | 1289 | if (mpio->pgpath) |
1299 | fail_path(mpio->pgpath); | 1290 | fail_path(mpio->pgpath); |
1300 | 1291 | ||
1301 | spin_lock_irqsave(&m->lock, flags); | 1292 | spin_lock_irqsave(&m->lock, flags); |
1302 | if (!m->nr_valid_paths && !m->queue_if_no_path && !__must_push_back(m)) | 1293 | if (!m->nr_valid_paths) { |
1303 | r = -EIO; | 1294 | if (!m->queue_if_no_path) { |
1295 | if (!__must_push_back(m)) | ||
1296 | r = -EIO; | ||
1297 | } else { | ||
1298 | if (error == -EBADE) | ||
1299 | r = error; | ||
1300 | } | ||
1301 | } | ||
1304 | spin_unlock_irqrestore(&m->lock, flags); | 1302 | spin_unlock_irqrestore(&m->lock, flags); |
1305 | 1303 | ||
1306 | return r; | 1304 | return r; |