From: John L. Hammond Date: Fri, 5 Mar 2021 18:47:43 +0000 (-0600) Subject: LU-14494 mdt: check object exists in mdt_close_handle_layouts() X-Git-Tag: 2.14.52~200 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=refs%2Fchanges%2F05%2F41905%2F7;p=fs%2Flustre-release.git LU-14494 mdt: check object exists in mdt_close_handle_layouts() In mdt_close_handle_layouts() the client supplied FID may not identify an existing object. So check for this before calling lu_object_attr(). Signed-off-by: John L. Hammond Change-Id: Ib1710ca4bf7587e0496b3a37a2afb65f81250455 Reviewed-on: https://review.whamcloud.com/41905 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Alex Zhuravlev Reviewed-by: Mike Pershin --- diff --git a/lustre/mdt/mdt_open.c b/lustre/mdt/mdt_open.c index 837323e..b839eaa 100644 --- a/lustre/mdt/mdt_open.c +++ b/lustre/mdt/mdt_open.c @@ -2036,7 +2036,7 @@ int mdt_close_handle_layouts(struct mdt_thread_info *info, struct mdt_lock_handle *lh2 = &info->mti_lh[MDT_LH_OLD]; struct close_data *data; struct ldlm_lock *lease; - struct mdt_object *o1 = o, *o2; + struct mdt_object *o1 = o, *o2 = NULL; bool lease_broken; bool swap_objects; int rc; @@ -2070,10 +2070,11 @@ int mdt_close_handle_layouts(struct mdt_thread_info *info, if (IS_ERR(o2)) GOTO(out_lease, rc = PTR_ERR(o2)); - if (!S_ISREG(lu_object_attr(&o2->mot_obj))) { - swap_objects = false; /* not swapped yet */ + if (!mdt_object_exists(o2)) + GOTO(out_obj, rc = -ENOENT); + + if (!S_ISREG(lu_object_attr(&o2->mot_obj))) GOTO(out_obj, rc = -EINVAL); - } if (swap_objects) swap(o1, o2); @@ -2181,7 +2182,9 @@ out_unlock_sem: } out_obj: - mdt_object_put(info->mti_env, swap_objects ? o1 : o2); + /* Callee takes care of o, we must put the other one. We know + * that o1 != o2 from check of lu_fid_cmp() above. */ + mdt_object_put(info->mti_env, o1 != o ? o1 : o2); ldlm_reprocess_all(lease->l_resource, lease);