From: Ian Kent At the tail end of an expire it's possible for a process to enter autofs4_wait, with a waitq type of NFY_NONE but find that the expire is finished. In this cause autofs4_wait will try to create a new wait but not notify the daemon leading to a hang. As the wait type is meant to delay mount requests from revalidate or lookup during an expire and the expire is done all we need to do is check if the dentry is a mountpoint. If it's not then we're done. Signed-off-by: Ian Kent Signed-off-by: Andrew Morton --- fs/autofs4/waitq.c | 7 +++++++ 1 files changed, 7 insertions(+) diff -puN fs/autofs4/waitq.c~autofs4-post-expire-race-fix fs/autofs4/waitq.c --- 25/fs/autofs4/waitq.c~autofs4-post-expire-race-fix 2005-06-05 23:34:53.000000000 -0700 +++ 25-akpm/fs/autofs4/waitq.c 2005-06-05 23:34:53.000000000 -0700 @@ -191,6 +191,13 @@ int autofs4_wait(struct autofs_sb_info * } if ( !wq ) { + /* Can't wait for an expire if there's no mount */ + if (notify == NFY_NONE && !d_mountpoint(dentry)) { + kfree(name); + up(&sbi->wq_sem); + return -ENOENT; + } + /* Create a new wait queue */ wq = kmalloc(sizeof(struct autofs_wait_queue),GFP_KERNEL); if ( !wq ) { _