On the code path of client eviction, lu_ucred in mdd_close() is not
initialized so we need to check it before trying to dereference it.
Signed-off-by: Jinshan Xiong <jinshan.xiong@uber.com>
Change-Id: I51b2a30e651761d66470fedf39da8e99b47ea6b4
Reviewed-on: https://review.whamcloud.com/33638
Tested-by: Jenkins
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Bobi Jam <bobijam@hotmail.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
int is_orphan = 0;
int rc;
bool blocked = false;
int is_orphan = 0;
int rc;
bool blocked = false;
- int last_close_by_uid = 0;
+ bool last_close_by_uid = false;
const struct lu_ucred *uc = lu_ucred(env);
ENTRY;
const struct lu_ucred *uc = lu_ucred(env);
ENTRY;
mdd_obj->mod_count--; /*release open count */
/* under mdd write lock */
mdd_obj->mod_count--; /*release open count */
/* under mdd write lock */
- /* If recording, see if we need to remove UID from list */
- if (mdd_changelog_enabled(env, mdd, CL_OPEN)) {
+ /* If recording, see if we need to remove UID from list. uc is not
+ * initialized if the client has been evicted. */
+ if (mdd_changelog_enabled(env, mdd, CL_OPEN) && uc) {
struct mdd_object_user *mou;
/* look for UID in list */
struct mdd_object_user *mou;
/* look for UID in list */
mou->mou_opencount--;
if (mou->mou_opencount == 0) {
mdd_obj_user_remove(mdd_obj, mou);
mou->mou_opencount--;
if (mou->mou_opencount == 0) {
mdd_obj_user_remove(mdd_obj, mou);
+ last_close_by_uid = true;