Details
-
Bug
-
Resolution: Fixed
-
Minor
-
None
-
None
-
3
-
9223372036854775807
Description
When stale client is evicted on expired recovery - class_disconnect_stale_exports() first moves the export out from obd->obd_exports list:
class_disconnect_stale_exports list_for_each_entry_safe(exp, n, &obd->obd_exports, exp_obd_chain) { list_move(&exp->exp_obd_chain, &work_list);
Then tgt_grant_sanity_check is callled:
class_disconnect_stale_exports class_disconnect_export_list obd_disconnect ofd_obd_disconnect (or mdt_obd_disconnect) tgt_grant_sanity_check
which iterates obd->obd_exports and obd->obd_unlinked_exports lists to sum grant counters: tot_dirty, tot_pending, tot_granted.
As the export being disconnected is neither on obd->obd_exports nor on obd->obd_unlinked_exports - the total grant counters mismatch with something like:
[128451.745573] LustreError: 182349:0:(tgt_grant.c:257:tgt_grant_sanity_check()) ofd_obd_disconnect: tot_granted 0 != fo_tot_granted 8388608