Commit 959eb4e5592cc0b0b07db0ca30d2b1efd790020f

Authored by Mike Snitzer
Committed by Alasdair G Kergon
1 parent 7b76ec11fe

dm mpath: support discard

Enable discard support in the DM multipath target.

This discard support depends on a few discard-specific fixes to the
block layer's request stacking driver methods.

Discard requests are optional so don't allow a failed discard to trigger
path failures.  If there is a real problem with a given path the
barriers associated with the discard (either before or after the
discard) will cause path failure.  That said, unconditionally passing
discard failures up the stack is not ideal.  This must be fixed once DM
has more information about the nature of the underlying storage failure.

Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Cc: Kiyoshi Ueda <k-ueda@ct.jp.nec.com>

Showing 1 changed file with 10 additions and 0 deletions Side-by-side Diff

drivers/md/dm-mpath.c
... ... @@ -893,6 +893,7 @@
893 893 }
894 894  
895 895 ti->num_flush_requests = 1;
  896 + ti->num_discard_requests = 1;
896 897  
897 898 return 0;
898 899  
... ... @@ -1270,6 +1271,15 @@
1270 1271 return 0; /* I/O complete */
1271 1272  
1272 1273 if (error == -EOPNOTSUPP)
  1274 + return error;
  1275 +
  1276 + if (clone->cmd_flags & REQ_DISCARD)
  1277 + /*
  1278 + * Pass all discard request failures up.
  1279 + * FIXME: only fail_path if the discard failed due to a
  1280 + * transport problem. This requires precise understanding
  1281 + * of the underlying failure (e.g. the SCSI sense).
  1282 + */
1273 1283 return error;
1274 1284  
1275 1285 if (mpio->pgpath)