If case of CL_FSYNC_DISCARD error is allowed for write of osc object.
Otherwise, the included test fails in rm with:
(osc_page.c:174:osc_page_delete()) Trying to teardown failed: -16
(osc_page.c:175:osc_page_delete()) ASSERTION( 0 ) failed:
(osc_page.c:175:osc_page_delete()) LBUG
Test-Parameters: trivial testlist=sanity env=ONLY=907
HPE-bug-id: LUS-10410
Signed-off-by: Vladimir Saveliev <vladimir.saveliev@hpe.com>
Change-Id: I0aae0dc470ba0371964e7643a6d84b19a1b4e106
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/48032
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Patrick Farrell <pfarrell@whamcloud.com>
Reviewed-by: Andrew Perepechko <andrew.perepechko@hpe.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
result = osc_cache_writeback_range(env, osc, start, end, 0,
fio->fi_mode == CL_FSYNC_DISCARD);
+ if (result < 0 && fio->fi_mode == CL_FSYNC_DISCARD) {
+ CDEBUG(D_CACHE,
+ "%s: ignore error %d on discarding "DFID":[%lu-%lu]\n",
+ cli_name(osc_cli(osc)), result, PFID(fio->fi_fid),
+ start, end);
+ result = 0;
+ }
if (result > 0) {
fio->fi_nr_written += result;
result = 0;
if (CFS_FAIL_CHECK(OBD_FAIL_OST_ENOSPC))
RETURN(err_serious(-ENOSPC));
if (CFS_FAIL_TIMEOUT(OBD_FAIL_OST_EROFS, 1))
- RETURN(err_serious(-EROFS));
+ RETURN(err_serious(cfs_fail_val ? -cfs_fail_val : -EROFS));
req->rq_bulk_write = 1;
}
run_test 906 "Simple test for io_uring I/O engine via fio"
+test_907() {
+ local max_pages=$($LCTL get_param -n osc.*.max_pages_per_rpc | head -n1)
+
+ # set stripe size to max rpc size
+ $LFS setstripe -i 0 -c 2 -S $((max_pages * PAGE_SIZE)) $DIR/$tfile
+ $LFS getstripe $DIR/$tfile
+#define OBD_FAIL_OST_EROFS 0x216
+ do_facet ost1 "$LCTL set_param fail_val=3 fail_loc=0x80000216"
+
+ local bs=$((max_pages * PAGE_SIZE / 16))
+
+ # write full one stripe and one block
+ dd if=/dev/zero of=$DIR/$tfile bs=$bs count=17 || error "dd failed"
+
+ rm $DIR/$tfile || error "rm failed"
+}
+run_test 907 "write rpc error during unlink"
+
complete_test $SECONDS
[ -f $EXT2_DEV ] && rm $EXT2_DEV || true
check_and_cleanup_lustre