From 922ed439f50c3a660860a2dac100d228318ff4db Mon Sep 17 00:00:00 2001 From: "John L. Hammond" Date: Fri, 5 Mar 2021 12:47:43 -0600 Subject: [PATCH] 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(). Lustre-commit: 075bea805efe8a7ef1a3aabd8dd2c166bb52115b Lustre-change: https://review.whamcloud.com/41905 Signed-off-by: John L. Hammond Change-Id: Ib1710ca4bf7587e0496b3a37a2afb65f81250455 Reviewed-on: https://review.whamcloud.com/41905 Reviewed-by: Andreas Dilger Reviewed-by: Alex Zhuravlev Reviewed-by: Mike Pershin Reviewed-on: https://review.whamcloud.com/43453 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Li Xi --- lustre/mdt/mdt_open.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lustre/mdt/mdt_open.c b/lustre/mdt/mdt_open.c index 89334fd..1b15fbe 100644 --- a/lustre/mdt/mdt_open.c +++ b/lustre/mdt/mdt_open.c @@ -2042,7 +2042,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; @@ -2076,10 +2076,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); @@ -2187,7 +2188,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); -- 1.8.3.1