Whamcloud - gitweb
LU-17933 target: do not break grants on RPC failure
When write RPC fails it may leave grant accounting inaccurate.
Grants are allocated in:
tgt_brw_write
obd_preprw
ofd_preprw
ofd_preprw_write
tgt_grant_prepare_write
oa->o_grant = tgt_grant_alloc()
tgd->tgd_tot_granted += grant;
ted->ted_grant += grant;
return grant;
If further it happens to return error, oa->o_grant is zeroed:
ofd_preprw_write
..
out:
tgt_grant_prepare_read
oa->o_grant = 0;
This results in a mismatch between grants owned by a client and grants
the server thinks the client owns.
Clients used to skip grant accounting update in case of write RPC
failure:
ptlrpc_req_interpret
brw_interpret
osc_brw_fini_request
if (rc < 0 && rc != -EDQUOT)
return rc
osc_update_grant
__osc_update_grant(cli, body->oa.o_grant)
Have server to take care of correct grant accounting in case of RPC
failure.
Test to illustrate the issue is added. This test needs zero lost
grants. Sync write on start is to get rid of those.
Signed-off-by: Vladimir Saveliev <vladimir.saveliev@hpe.com>
Change-Id: Ic835eb0b7f1894207637ec541b1d39c59bde286d
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/56547
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Alexander Boyko <alexander.boyko@hpe.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>