[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
[Linux-cluster] Re: [PATCH] suspend astd before dlm_dir_clear() in release_lockspace()
- From: David Teigland <teigland redhat com>
- To: Daniel McNeil <daniel osdl org>
- Cc: linux-cluster redhat com
- Subject: [Linux-cluster] Re: [PATCH] suspend astd before dlm_dir_clear() in release_lockspace()
- Date: Sat, 26 Mar 2005 12:48:42 +0800
On Fri, Mar 25, 2005 at 03:22:38PM -0800, Daniel McNeil wrote:
> Looking at the code, the problem is a race condition between
> dlm_astd() and release_lockspace(). dlm_astd can pull an
> lkb off the ast_queue and still be processing it while the
> release_lockspace() is running calls dlm_dir_clear() and
> then kfree()s ls->ls_dirtbl. When dlm_astd() calls
> release_rsb() it leads to a dlm_dir_remove() which accesses
> the freed ls_dirtbl which is freed. With slab debug, this
> leads a spinning write_lock() and a hung umount. My machines
> are 2 cpu systems which also might expose the race condition.
>
> The fix is below and is fairly simple, just do the astd_suspend()
> in release_lockspace() before the dlm_dir_clear() and kfree().
> That way astd won't be process lkb on the astqueue will it
> is being freed.
Excellent, patch applied.
Thanks
--
Dave Teigland <teigland redhat com>
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]