X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftarget%2Ftgt_handler.c;fp=lustre%2Ftarget%2Ftgt_handler.c;h=c4ef17ac3e6b1854fc9eb40a24f5b4904d409175;hb=cba07b68f9386b6169788065c8cba1974cb7f712;hp=74542342a783d43cfa803f13fc954cc388d836a4;hpb=3c39dac19aaf7f3f4fdee104ce6da92dd1962776;p=fs%2Flustre-release.git diff --git a/lustre/target/tgt_handler.c b/lustre/target/tgt_handler.c index 7454234..c4ef17a 100644 --- a/lustre/target/tgt_handler.c +++ b/lustre/target/tgt_handler.c @@ -2223,8 +2223,22 @@ int tgt_brw_read(struct tgt_session_info *tsi) req->rq_bulk_read = 1; - if (OBD_FAIL_CHECK(OBD_FAIL_OST_BRW_READ_BULK)) - RETURN(-EIO); + if (OBD_FAIL_CHECK(OBD_FAIL_OST_BRW_READ_BULK)) { + /* optionally use cfs_fail_val - 1 to select a specific OST on + * this server to fail requests. + */ + char fail_ost_name[MAX_OBD_NAME]; + + if (cfs_fail_val > 0) { + snprintf(fail_ost_name, MAX_OBD_NAME, "OST%04X", + cfs_fail_val - 1); + + if (strstr(obd_name, fail_ost_name)) + RETURN(err_serious(-EIO)); + } else { + RETURN(err_serious(-EIO)); + } + } OBD_FAIL_TIMEOUT(OBD_FAIL_OST_BRW_PAUSE_BULK, cfs_fail_val > 0 ? cfs_fail_val : (obd_timeout + 1) / 4); @@ -2516,7 +2530,8 @@ int tgt_brw_write(struct tgt_session_info *tsi) struct lustre_handle lockh = {0}; __u32 *rcs; int objcount, niocount, npages; - int rc, i, j; + int rc = 0; + int i, j; enum cksum_types cksum_type = OBD_CKSUM_CRC32; bool no_reply = false, mmap; struct tgt_thread_big_cache *tbc = req->rq_svc_thread->t_data; @@ -2544,9 +2559,25 @@ int tgt_brw_write(struct tgt_session_info *tsi) req->rq_bulk_write = 1; if (OBD_FAIL_CHECK(OBD_FAIL_OST_BRW_WRITE_BULK)) - RETURN(err_serious(-EIO)); + rc = -EIO; if (OBD_FAIL_CHECK(OBD_FAIL_OST_BRW_WRITE_BULK2)) - RETURN(err_serious(-EFAULT)); + rc = -EFAULT; + if (rc < 0) { + /* optionally use cfs_fail_val - 1 to select a specific OST on + * this server to fail requests. + */ + char fail_ost_name[MAX_OBD_NAME]; + + if (cfs_fail_val > 0) { + snprintf(fail_ost_name, MAX_OBD_NAME, "OST%04X", + cfs_fail_val - 1); + + if (strstr(obd_name, fail_ost_name)) + RETURN(err_serious(rc)); + } else { + RETURN(err_serious(rc)); + } + } /* pause before transaction has been started */ CFS_FAIL_TIMEOUT(OBD_FAIL_OST_BRW_PAUSE_BULK, cfs_fail_val > 0 ?