lkml.org 
[lkml]   [2011]   [Jan]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/3] autofs4 - fix get_next_positive_dentry()
    Date
    The initialization condition in fs/autofs4/expire.c:get_next_positive_dentry()
    appears to be incorrect. If prev == NULL I believe that root should be
    returned.

    Further down, at the current dentry check for it being simple_positive()
    it looks like the d_lock for dentry p should be dropped instead of dentry
    ret, otherwise when p is assinged to ret we end up with no lock on p and
    a lost lock on ret, which leads to a deadlock.
    ---

    fs/autofs4/expire.c | 4 ++--
    1 files changed, 2 insertions(+), 2 deletions(-)

    diff --git a/fs/autofs4/expire.c b/fs/autofs4/expire.c
    index 3ed79d7..f43100b 100644
    --- a/fs/autofs4/expire.c
    +++ b/fs/autofs4/expire.c
    @@ -96,7 +96,7 @@ static struct dentry *get_next_positive_dentry(struct dentry *prev,
    struct dentry *p, *ret;

    if (prev == NULL)
    - return dget(prev);
    + return dget(root);

    spin_lock(&autofs4_lock);
    relock:
    @@ -133,7 +133,7 @@ again:
    spin_lock_nested(&ret->d_lock, DENTRY_D_LOCK_NESTED);
    /* Negative dentry - try next */
    if (!simple_positive(ret)) {
    - spin_unlock(&ret->d_lock);
    + spin_unlock(&p->d_lock);
    p = ret;
    goto again;
    }


    \
     
     \ /
      Last update: 2011-01-18 05:17    [W:0.026 / U:2.828 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site