mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
ocfs2: skip uninitialized lockres in ocfs2_mark_lockres_freeing()
A hard readonly mount skips ocfs2_dlm_init(), so the per-osb lock resources are never initialized and osb->cconn stays NULL. Before commit550842cc60("ocfs2: fix freeing uninitialized resource on ocfs2_dlm_shutdown") ocfs2_dismount_volume() only called ocfs2_dlm_shutdown() when osb->cconn was set. It now calls it unconditionally, so unmounting a hard readonly mount drops the osb locks and takes the never initialized l_lock in ocfs2_mark_lockres_freeing(). With lockdep enabled this triggers: INFO: trying to register non-static key. The code is fine but needs lockdep annotation, or maybe you didn't initialize this object before use? turning off the locking correctness validator. ocfs2_drop_lock() and ocfs2_lock_res_free() already skip lock resources without OCFS2_LOCK_INITIALIZED. Add the same check to ocfs2_mark_lockres_freeing(), which is reachable before them through ocfs2_simple_drop_lockres(), so an uninitialized lockres is never touched. Link: https://lore.kernel.org/20260903104744.2164235-1-joseph.qi@linux.alibaba.com Fixes:550842cc60("ocfs2: fix freeing uninitialized resource on ocfs2_dlm_shutdown") Signed-off-by: Joseph Qi <joseph.qi@linux.alibaba.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Reported-by: ZW Tang <tangzw515@gmail.com> Cc: Mark Fasheh <mark@fasheh.com> Cc: Joel Becker <jlbec@evilplan.org> Cc: Junxiao Bi <junxiao.bi@oracle.com> Cc: Changwei Ge <gechangwei@live.cn> Cc: Jun Piao <piaojun@huawei.com> Cc: Heming Zhao <heming.zhao@suse.com> Cc: <stable@vger.kernel.org>
This commit is contained in:
parent
ec5e024c86
commit
6a3ed6b290
|
|
@ -3525,6 +3525,10 @@ void ocfs2_mark_lockres_freeing(struct ocfs2_super *osb,
|
|||
struct ocfs2_mask_waiter mw;
|
||||
unsigned long flags, flags2;
|
||||
|
||||
/* We didn't get anywhere near actually using this lockres. */
|
||||
if (!(lockres->l_flags & OCFS2_LOCK_INITIALIZED))
|
||||
return;
|
||||
|
||||
ocfs2_init_mask_waiter(&mw);
|
||||
|
||||
spin_lock_irqsave(&lockres->l_lock, flags);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user