Details
-
Bug
-
Resolution: Fixed
-
Major
-
Lustre 2.7.0
-
None
-
3
-
16422
Description
Do not return EWOULDBLOCK (EAGAIN) in lod_object_init, since lu_object_find_at is using EAGAIN to check whether the object is dying and waiting the object to be released.
struct lu_object *lu_object_find_at(const struct lu_env *env, struct lu_device *dev, const struct lu_fid *f, const struct lu_object_conf *conf) { struct lu_site_bkt_data *bkt; struct lu_object *obj; wait_queue_t wait; while (1) { if (conf != NULL && conf->loc_flags & LOC_F_NOWAIT) { obj = lu_object_find_try(env, dev, f, conf, NULL); return obj; } obj = lu_object_find_try(env, dev, f, conf, &wait); if (obj != ERR_PTR(-EAGAIN)) <--- Only wait here if the object is dying, obviously the failure(-EWOULDBLOCK) of lod_object_init should not wait here, otherwise it will cause list corruption. return obj;
Attachments
Issue Links
- is related to
-
LU-11761 blocked MDT mount and high cpu usage from lodXXXX_recYYYY threads
- Resolved