From 59120a5633bb74036d43dc2bb95595cb9fd21918 Mon Sep 17 00:00:00 2001 From: Bobi Jam Date: Wed, 12 May 2021 16:18:00 +0800 Subject: [PATCH] LU-14648 lod: protect lod_object layout info Need to protect lod_object's layout access with ldo_layout_mutex. Lustre-commit: 25aa8527374f8120c113dc12adb1366a1ab98152 Lustre-change: https://review.whamcloud.com/43671 Signed-off-by: Bobi Jam Change-Id: I2c4a2078bdce64d15485d3ff18f6670d42ca90ba Reviewed-by: Alex Zhuravlev Reviewed-by: John L. Hammond Reviewed-by: Oleg Drokin Reviewed-on: https://review.whamcloud.com/44256 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger --- lustre/lod/lod_internal.h | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/lustre/lod/lod_internal.h b/lustre/lod/lod_internal.h index 7a87ec2..a578e4e 100644 --- a/lustre/lod/lod_internal.h +++ b/lustre/lod/lod_internal.h @@ -507,25 +507,32 @@ static inline bool lod_obj_is_striped(struct dt_object *dt) { struct lod_object *lo = lod_dt_obj(dt); int i; + bool rc = false; if (!dt_object_exists(dt_object_child(dt))) return false; - if (S_ISDIR(dt->do_lu.lo_header->loh_attr)) - return lo->ldo_dir_stripe_count != 0; - - if (lo->ldo_is_foreign) - return false; - - for (i = 0; i < lo->ldo_comp_cnt; i++) { - if (lo->ldo_comp_entries[i].llc_magic == LOV_MAGIC_FOREIGN) - continue; - if (lo->ldo_comp_entries[i].llc_stripe == NULL) - continue; - LASSERT(lo->ldo_comp_entries[i].llc_stripe_count > 0); - return true; + mutex_lock(&lo->ldo_layout_mutex); + + if (S_ISDIR(dt->do_lu.lo_header->loh_attr)) { + rc = lo->ldo_dir_stripe_count != 0; + } else if (lo->ldo_is_foreign) { + rc = false; + } else { + for (i = 0; i < lo->ldo_comp_cnt; i++) { + if (lo->ldo_comp_entries[i].llc_magic == + LOV_MAGIC_FOREIGN) + continue; + if (lo->ldo_comp_entries[i].llc_stripe == NULL) + continue; + LASSERT(lo->ldo_comp_entries[i].llc_stripe_count > 0); + rc = true; + break; + } } - return false; + + mutex_unlock(&lo->ldo_layout_mutex); + return rc; } extern struct lu_context_key lod_thread_key; -- 1.8.3.1