Messages in this thread | | | Date | Mon, 27 Jan 2003 15:12:13 +0000 | From | Russell King <> | Subject | Re: possible deadlock in sys_pivot_root()? |
| |
On Mon, Jan 27, 2003 at 05:12:27PM +0300, Nikita Danilov wrote: > sys_pivot_root() first takes BKL, then ->i_sem on the old root > directory. On the other hand, vfs_readdir() first takes ->i_sem on a > directory and then calls file system ->readdir() method, that usually > takes BKL. Isn't there a deadlock possibility? Of course, > sys_pivot_root() is probably not supposed to be called frequently, but > still.
No, you can't deadlock here. When you get contention on the i_sem, one thread will be put to sleep, and when that happens, the BKL will be automatically released.
So:
CPU0 CPU1
BKL i_sem BKL (spins, waiting for BKL to be released)
i_sem (finds it locked, and sleeps, which releases the BKL) (BKL is now released, CPU1 continues)
-- Russell King (rmk@arm.linux.org.uk) The developer of ARM Linux http://www.arm.linux.org.uk/personal/aboutme.html
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |