From 3ae81448da0009293063547f1f95e116f7102418 Mon Sep 17 00:00:00 2001 From: Mr NeilBrown Date: Thu, 16 Jul 2020 10:32:02 +1000 Subject: [PATCH] LU-6142 obdclass: use cl_object_for_each more broadly. There are several loops which follow the pattern of the macros cl_object_for_each() or cl_object_for_each_reverse(), but don't use those macros. Change to use the macros. In some case we change the name of an 'obj' arg to a function to 'top', to avoid overloading the name 'obj'. Also include some minor formatting improvements. Signed-off-by: Mr NeilBrown Change-Id: I544d4148719a9284f33fd61730bd733c0d40e97c Reviewed-on: https://review.whamcloud.com/39391 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Wang Shilong Reviewed-by: James Simmons Reviewed-by: Oleg Drokin --- lustre/lov/lov_page.c | 3 +- lustre/obdclass/cl_lock.c | 3 +- lustre/obdclass/cl_object.c | 151 ++++++++++++++++++++------------------------ lustre/obdclass/cl_page.c | 7 +- 4 files changed, 74 insertions(+), 90 deletions(-) diff --git a/lustre/lov/lov_page.c b/lustre/lov/lov_page.c index 48ef262..0a28de1 100644 --- a/lustre/lov/lov_page.c +++ b/lustre/lov/lov_page.c @@ -105,8 +105,7 @@ int lov_page_init_composite(const struct lu_env *env, struct cl_object *obj, RETURN(PTR_ERR(sub)); subobj = lovsub2cl(r0->lo_sub[stripe]); - list_for_each_entry(o, &subobj->co_lu.lo_header->loh_layers, - co_lu.lo_linkage) { + cl_object_for_each(o, subobj) { if (o->co_ops->coo_page_init) { rc = o->co_ops->coo_page_init(sub->sub_env, o, page, cl_index(subobj, suboff)); diff --git a/lustre/obdclass/cl_lock.c b/lustre/obdclass/cl_lock.c index 692ad18..8e417c0 100644 --- a/lustre/obdclass/cl_lock.c +++ b/lustre/obdclass/cl_lock.c @@ -109,8 +109,7 @@ int cl_lock_init(const struct lu_env *env, struct cl_lock *lock, LASSERT(obj != NULL); INIT_LIST_HEAD(&lock->cll_layers); - list_for_each_entry(scan, &obj->co_lu.lo_header->loh_layers, - co_lu.lo_linkage) { + cl_object_for_each(scan, obj) { if (scan->co_ops->coo_lock_init != NULL) result = scan->co_ops->coo_lock_init(env, scan, lock, io); diff --git a/lustre/obdclass/cl_object.c b/lustre/obdclass/cl_object.c index 730deb9..8ff2281 100644 --- a/lustre/obdclass/cl_object.c +++ b/lustre/obdclass/cl_object.c @@ -199,18 +199,16 @@ EXPORT_SYMBOL(cl_object_attr_unlock); * top-to-bottom to fill in parts of \a attr that this layer is responsible * for. */ -int cl_object_attr_get(const struct lu_env *env, struct cl_object *obj, +int cl_object_attr_get(const struct lu_env *env, struct cl_object *top, struct cl_attr *attr) { - struct lu_object_header *top; - int result; + struct cl_object *obj; + int result = 0; - assert_spin_locked(cl_object_attr_guard(obj)); + assert_spin_locked(cl_object_attr_guard(top)); ENTRY; - top = obj->co_lu.lo_header; - result = 0; - list_for_each_entry(obj, &top->loh_layers, co_lu.lo_linkage) { + cl_object_for_each(obj, top) { if (obj->co_ops->coo_attr_get != NULL) { result = obj->co_ops->coo_attr_get(env, obj, attr); if (result != 0) { @@ -231,18 +229,16 @@ EXPORT_SYMBOL(cl_object_attr_get); * updated. Calls cl_object_operations::coo_upd_attr() on every layer, bottom * to top. */ -int cl_object_attr_update(const struct lu_env *env, struct cl_object *obj, +int cl_object_attr_update(const struct lu_env *env, struct cl_object *top, const struct cl_attr *attr, unsigned v) { - struct lu_object_header *top; - int result; + struct cl_object *obj; + int result = 0; - assert_spin_locked(cl_object_attr_guard(obj)); + assert_spin_locked(cl_object_attr_guard(top)); ENTRY; - top = obj->co_lu.lo_header; - result = 0; - list_for_each_entry_reverse(obj, &top->loh_layers, co_lu.lo_linkage) { + cl_object_for_each_reverse(obj, top) { if (obj->co_ops->coo_attr_update != NULL) { result = obj->co_ops->coo_attr_update(env, obj, attr, v); @@ -265,70 +261,63 @@ EXPORT_SYMBOL(cl_object_attr_update); * * \see cl_lock_operations::clo_glimpse() */ -int cl_object_glimpse(const struct lu_env *env, struct cl_object *obj, - struct ost_lvb *lvb) +int cl_object_glimpse(const struct lu_env *env, struct cl_object *top, + struct ost_lvb *lvb) { - struct lu_object_header *top; - int result; + struct cl_object *obj; + int result = 0; - ENTRY; - top = obj->co_lu.lo_header; - result = 0; - list_for_each_entry_reverse(obj, &top->loh_layers, co_lu.lo_linkage) { - if (obj->co_ops->coo_glimpse != NULL) { - result = obj->co_ops->coo_glimpse(env, obj, lvb); - if (result != 0) - break; - } - } - LU_OBJECT_HEADER(D_DLMTRACE, env, lu_object_top(top), + ENTRY; + cl_object_for_each_reverse(obj, top) { + if (obj->co_ops->coo_glimpse != NULL) { + result = obj->co_ops->coo_glimpse(env, obj, lvb); + if (result != 0) + break; + } + } + LU_OBJECT_HEADER(D_DLMTRACE, env, lu_object_top(top->co_lu.lo_header), "size: %llu mtime: %llu atime: %llu " "ctime: %llu blocks: %llu\n", - lvb->lvb_size, lvb->lvb_mtime, lvb->lvb_atime, - lvb->lvb_ctime, lvb->lvb_blocks); - RETURN(result); + lvb->lvb_size, lvb->lvb_mtime, lvb->lvb_atime, + lvb->lvb_ctime, lvb->lvb_blocks); + RETURN(result); } EXPORT_SYMBOL(cl_object_glimpse); /** * Updates a configuration of an object \a obj. */ -int cl_conf_set(const struct lu_env *env, struct cl_object *obj, - const struct cl_object_conf *conf) +int cl_conf_set(const struct lu_env *env, struct cl_object *top, + const struct cl_object_conf *conf) { - struct lu_object_header *top; - int result; + struct cl_object *obj; + int result = 0; - ENTRY; - top = obj->co_lu.lo_header; - result = 0; - list_for_each_entry(obj, &top->loh_layers, co_lu.lo_linkage) { - if (obj->co_ops->coo_conf_set != NULL) { - result = obj->co_ops->coo_conf_set(env, obj, conf); - if (result != 0) - break; - } - } - RETURN(result); + ENTRY; + cl_object_for_each(obj, top) { + if (obj->co_ops->coo_conf_set != NULL) { + result = obj->co_ops->coo_conf_set(env, obj, conf); + if (result) + break; + } + } + RETURN(result); } EXPORT_SYMBOL(cl_conf_set); /** * Prunes caches of pages and locks for this object. */ -int cl_object_prune(const struct lu_env *env, struct cl_object *obj) +int cl_object_prune(const struct lu_env *env, struct cl_object *top) { - struct lu_object_header *top; - struct cl_object *o; - int result; + struct cl_object *obj; + int result = 0; ENTRY; - top = obj->co_lu.lo_header; - result = 0; - list_for_each_entry(o, &top->loh_layers, co_lu.lo_linkage) { - if (o->co_ops->coo_prune != NULL) { - result = o->co_ops->coo_prune(env, o); - if (result != 0) + cl_object_for_each(obj, top) { + if (obj->co_ops->coo_prune != NULL) { + result = obj->co_ops->coo_prune(env, obj); + if (result) break; } } @@ -340,19 +329,18 @@ EXPORT_SYMBOL(cl_object_prune); /** * Get stripe information of this object. */ -int cl_object_getstripe(const struct lu_env *env, struct cl_object *obj, +int cl_object_getstripe(const struct lu_env *env, struct cl_object *top, struct lov_user_md __user *uarg, size_t size) { - struct lu_object_header *top; - int result = 0; + struct cl_object *obj; + int result = 0; ENTRY; - top = obj->co_lu.lo_header; - list_for_each_entry(obj, &top->loh_layers, co_lu.lo_linkage) { - if (obj->co_ops->coo_getstripe != NULL) { + cl_object_for_each(obj, top) { + if (obj->co_ops->coo_getstripe) { result = obj->co_ops->coo_getstripe(env, obj, uarg, size); - if (result != 0) + if (result) break; } } @@ -372,20 +360,19 @@ EXPORT_SYMBOL(cl_object_getstripe); * \retval 0 success * \retval < 0 error */ -int cl_object_fiemap(const struct lu_env *env, struct cl_object *obj, +int cl_object_fiemap(const struct lu_env *env, struct cl_object *top, struct ll_fiemap_info_key *key, struct fiemap *fiemap, size_t *buflen) { - struct lu_object_header *top; - int result = 0; + struct cl_object *obj; + int result = 0; ENTRY; - top = obj->co_lu.lo_header; - list_for_each_entry(obj, &top->loh_layers, co_lu.lo_linkage) { - if (obj->co_ops->coo_fiemap != NULL) { + cl_object_for_each(obj, top) { + if (obj->co_ops->coo_fiemap) { result = obj->co_ops->coo_fiemap(env, obj, key, fiemap, buflen); - if (result != 0) + if (result) break; } } @@ -393,14 +380,14 @@ int cl_object_fiemap(const struct lu_env *env, struct cl_object *obj, } EXPORT_SYMBOL(cl_object_fiemap); -int cl_object_layout_get(const struct lu_env *env, struct cl_object *obj, +int cl_object_layout_get(const struct lu_env *env, struct cl_object *top, struct cl_layout *cl) { - struct lu_object_header *top = obj->co_lu.lo_header; + struct cl_object *obj; ENTRY; - list_for_each_entry(obj, &top->loh_layers, co_lu.lo_linkage) { - if (obj->co_ops->coo_layout_get != NULL) + cl_object_for_each(obj, top) { + if (obj->co_ops->coo_layout_get) return obj->co_ops->coo_layout_get(env, obj, cl); } @@ -408,14 +395,14 @@ int cl_object_layout_get(const struct lu_env *env, struct cl_object *obj, } EXPORT_SYMBOL(cl_object_layout_get); -loff_t cl_object_maxbytes(struct cl_object *obj) +loff_t cl_object_maxbytes(struct cl_object *top) { - struct lu_object_header *top = obj->co_lu.lo_header; + struct cl_object *obj; loff_t maxbytes = LLONG_MAX; ENTRY; - list_for_each_entry(obj, &top->loh_layers, co_lu.lo_linkage) { - if (obj->co_ops->coo_maxbytes != NULL) + cl_object_for_each(obj, top) { + if (obj->co_ops->coo_maxbytes) maxbytes = min_t(loff_t, obj->co_ops->coo_maxbytes(obj), maxbytes); } @@ -424,14 +411,14 @@ loff_t cl_object_maxbytes(struct cl_object *obj) } EXPORT_SYMBOL(cl_object_maxbytes); -int cl_object_flush(const struct lu_env *env, struct cl_object *obj, +int cl_object_flush(const struct lu_env *env, struct cl_object *top, struct ldlm_lock *lock) { - struct lu_object_header *top = obj->co_lu.lo_header; + struct cl_object *obj; int rc = 0; ENTRY; - list_for_each_entry(obj, &top->loh_layers, co_lu.lo_linkage) { + cl_object_for_each(obj, top) { if (obj->co_ops->coo_object_flush) { rc = obj->co_ops->coo_object_flush(env, obj, lock); if (rc) diff --git a/lustre/obdclass/cl_page.c b/lustre/obdclass/cl_page.c index 2a8df48..4dfa0d6 100644 --- a/lustre/obdclass/cl_page.c +++ b/lustre/obdclass/cl_page.c @@ -268,7 +268,7 @@ struct cl_page *cl_page_alloc(const struct lu_env *env, struct cl_object *o, enum cl_page_type type) { struct cl_page *cl_page; - struct lu_object_header *head; + struct cl_object *head; ENTRY; @@ -293,9 +293,8 @@ struct cl_page *cl_page_alloc(const struct lu_env *env, struct cl_object *o, cl_page->cp_inode = NULL; INIT_LIST_HEAD(&cl_page->cp_batch); lu_ref_init(&cl_page->cp_reference); - head = o->co_lu.lo_header; - list_for_each_entry(o, &head->loh_layers, - co_lu.lo_linkage) { + head = o; + cl_object_for_each(o, head) { if (o->co_ops->coo_page_init != NULL) { result = o->co_ops->coo_page_init(env, o, cl_page, ind); -- 1.8.3.1