20 Sep, 2016

1 commit

  • Somewhere along the way the autofs expire operation has changed to hold
    a spin lock over expired dentry selection. The autofs indirect mount
    expired dentry selection is complicated and quite lengthy so it isn't
    appropriate to hold a spin lock over the operation.

    Commit 47be61845c77 ("fs/dcache.c: avoid soft-lockup in dput()") added a
    might_sleep() to dput() causing a WARN_ONCE() about this usage to be
    issued.

    But the spin lock doesn't need to be held over this check, the autofs
    dentry info. flags are enough to block walks into dentrys during the
    expire.

    I've left the direct mount expire as it is (for now) because it is much
    simpler and quicker than the indirect mount expire and adding spin lock
    release and re-aquires would do nothing more than add overhead.

    Fixes: 47be61845c77 ("fs/dcache.c: avoid soft-lockup in dput()")
    Link: http://lkml.kernel.org/r/20160912014017.1773.73060.stgit@pluto.themaw.net
    Signed-off-by: Ian Kent
    Reported-by: Takashi Iwai
    Tested-by: Takashi Iwai
    Cc: Takashi Iwai
    Cc: NeilBrown
    Cc: Al Viro
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ian Kent
     

12 Jun, 2016

1 commit

  • * make autofs4_expire_indirect() skip the dentries being in process of
    expiry
    * do *not* mess with list_move(); making sure that dentry with
    AUTOFS_INF_EXPIRING are not picked for expiry is enough.
    * do not remove NO_RCU when we set EXPIRING, don't bother with smp_mb()
    there. Clear it at the same time we clear EXPIRING. Makes a bunch of
    tests simpler.
    * rename NO_RCU to WANT_EXPIRE, which is what it really is.

    Signed-off-by: Al Viro

    Al Viro
     

16 Mar, 2016

3 commits

  • Use the standard pr_xxx() log macros directly for log prints instead of
    the AUTOFS_XXX() macros.

    Signed-off-by: Ian Kent
    Cc: Joe Perches
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ian Kent
     
  • Common kernel coding practice is to include the newline of log prints
    within the log text rather than hidden away in a macro.

    To avoid introducing inconsistencies as changes are made change the log
    macros to not include the newline.

    Signed-off-by: Ian Kent
    Cc: Joe Perches
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ian Kent
     
  • Try and make the coding style completely consistent throughtout the
    autofs module and inline with kernel coding style recommendations.

    Signed-off-by: Ian Kent
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ian Kent
     

16 Apr, 2015

1 commit


23 Feb, 2015

1 commit

  • Convert the following where appropriate:

    (1) S_ISLNK(dentry->d_inode) to d_is_symlink(dentry).

    (2) S_ISREG(dentry->d_inode) to d_is_reg(dentry).

    (3) S_ISDIR(dentry->d_inode) to d_is_dir(dentry). This is actually more
    complicated than it appears as some calls should be converted to
    d_can_lookup() instead. The difference is whether the directory in
    question is a real dir with a ->lookup op or whether it's a fake dir with
    a ->d_automount op.

    In some circumstances, we can subsume checks for dentry->d_inode not being
    NULL into this, provided we the code isn't in a filesystem that expects
    d_inode to be NULL if the dirent really *is* negative (ie. if we're going to
    use d_inode() rather than d_backing_inode() to get the inode pointer).

    Note that the dentry type field may be set to something other than
    DCACHE_MISS_TYPE when d_inode is NULL in the case of unionmount, where the VFS
    manages the fall-through from a negative dentry to a lower layer. In such a
    case, the dentry type of the negative union dentry is set to the same as the
    type of the lower dentry.

    However, if you know d_inode is not NULL at the call site, then you can use
    the d_is_xxx() functions even in a filesystem.

    There is one further complication: a 0,0 chardev dentry may be labelled
    DCACHE_WHITEOUT_TYPE rather than DCACHE_SPECIAL_TYPE. Strictly, this was
    intended for special directory entry types that don't have attached inodes.

    The following perl+coccinelle script was used:

    use strict;

    my @callers;
    open($fd, 'git grep -l \'S_IS[A-Z].*->d_inode\' |') ||
    die "Can't grep for S_ISDIR and co. callers";
    @callers = ;
    close($fd);
    unless (@callers) {
    print "No matches\n";
    exit(0);
    }

    my @cocci = (
    '@@',
    'expression E;',
    '@@',
    '',
    '- S_ISLNK(E->d_inode->i_mode)',
    '+ d_is_symlink(E)',
    '',
    '@@',
    'expression E;',
    '@@',
    '',
    '- S_ISDIR(E->d_inode->i_mode)',
    '+ d_is_dir(E)',
    '',
    '@@',
    'expression E;',
    '@@',
    '',
    '- S_ISREG(E->d_inode->i_mode)',
    '+ d_is_reg(E)' );

    my $coccifile = "tmp.sp.cocci";
    open($fd, ">$coccifile") || die $coccifile;
    print($fd "$_\n") || die $coccifile foreach (@cocci);
    close($fd);

    foreach my $file (@callers) {
    chomp $file;
    print "Processing ", $file, "\n";
    system("spatch", "--sp-file", $coccifile, $file, "--in-place", "--no-show-diff") == 0 ||
    die "spatch failed";
    }

    [AV: overlayfs parts skipped]

    Signed-off-by: David Howells
    Signed-off-by: Al Viro

    David Howells
     

20 Nov, 2014

1 commit


04 Nov, 2014

1 commit


14 Oct, 2014

4 commits

  • ->fs_lock protects AUTOFS_INF_EXPIRING. We need to be sure that once
    the flag is set, no new references beneath the dentry are taken. So
    rcu-walk currently needs to take fs_lock before checking the flag. This
    hurts performance.

    Change the expiry to a two-stage process. First set AUTOFS_INF_NO_RCU
    which forces any path walk into ref-walk mode, then drop the lock and
    call synchronize_rcu(). Once that returns we can be sure no rcu-walk is
    active beneath the dentry and we can check reference counts again.

    Now during an RCU-walk we can test AUTOFS_INF_EXPIRING without taking
    the lock as along as we test AUTOFS_INF_NO_RCU too. If either are set,
    we must abort the RCU-walk If neither are set, we know that refcounts
    will be tested again after we finish the RCU-walk so we are safe to
    continue.

    ->fs_lock is still taken in d_manage() to check for a non-trap
    directory. That will be resolved in the next patch.

    Signed-off-by: NeilBrown
    Reviewed-by: Ian Kent
    Tested-by: Ian Kent
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     
  • Have a "test" function change the value it is testing can be confusing,
    particularly as a future patch will be calling this function twice.

    So move the update for 'last_used' to avoid repeat expiry to the place
    where the final determination on what to expire is known.

    Signed-off-by: NeilBrown
    Reviewed-by: Ian Kent
    Tested-by: Ian Kent
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     
  • Future patch will potentially call this twice, so make it separate.

    Signed-off-by: NeilBrown
    Reviewed-by: Ian Kent
    Tested-by: Ian Kent
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     
  • This series teaches autofs about RCU-walk so that we don't drop straight
    into REF-walk when we hit an autofs directory, and so that we avoid
    spinlocks as much as possible when performing an RCU-walk.

    This is needed so that the benefits of the recent NFS support for
    RCU-walk are fully available when NFS filesystems are automounted.

    Patches have been carefully reviewed and tested both with test suites
    and in production - thanks a lot to Ian Kent for his support there.

    This patch (of 6):

    Any attempt to look up a pathname that passes though an autofs4 mount is
    currently forced out of RCU-walk into REF-walk.

    This can significantly hurt performance of many-thread work loads on
    many-core systems, especially if the automounted filesystem supports
    RCU-walk but doesn't get to benefit from it.

    So if autofs4_d_manage is called with rcu_walk set, only fail with -ECHILD
    if it is necessary to wait longer than a spinlock.

    Signed-off-by: NeilBrown
    Reviewed-by: Ian Kent
    Tested-by: Ian Kent
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     

09 Oct, 2014

1 commit

  • Biederman's umount-on-rmdir series changes d_invalidate() to sumarily remove
    mounts under the passed in dentry regardless of whether they are busy
    or not. So calling this in fs/autofs4/expire.c:autofs4_tree_busy() is
    definitely the wrong thing to do becuase it will silently umount entries
    instead of just cleaning stale dentrys.

    But this call shouldn't be needed and testing shows that automounting
    continues to function without it.

    As Al Viro correctly surmises the original intent of the call was to
    perform what shrink_dcache_parent() does.

    If at some time in the future I see stale dentries accumulating
    following failed mounts I'll revisit the issue and possibly add a
    shrink_dcache_parent() call if needed.

    Signed-off-by: Ian Kent
    Cc: Al Viro
    Cc: Eric W. Biederman
    Signed-off-by: Al Viro

    Ian Kent
     

09 Aug, 2014

1 commit

  • The variable 'ino' already exists and already has the correct value.
    The d_fsdata of a dentry is never changed after the d_fsdata is
    instantiated, so this new assignment cannot be necessary.

    It was introduced in commit b5b801779d59 ("autofs4: Add d_manage()
    dentry operation").

    Signed-off-by: NeilBrown
    Acked-by: Ian Kent
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    NeilBrown
     

24 Jan, 2014

1 commit

  • The autofs4 module doesn't consider symlinks for expire as it did in the
    older autofs v3 module (so it's actually a long standing regression).

    The user space daemon has focused on the use of bind mounts instead of
    symlinks for a long time now and that's why this has not been noticed.
    But with the future addition of amd map parsing to automount(8), not to
    mention amd itself (of am-utils), symlink expiry will be needed.

    The direct and offset mount types can't be symlinks and the tree mounts of
    version 4 were always real mounts so only indirect mounts need expire
    symlinks.

    Since the current users of the autofs4 module haven't reported this as a
    problem to date this patch probably isn't a candidate for backport to
    stable.

    Signed-off-by: Ian Kent
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ian Kent
     

05 Jul, 2013

1 commit


07 May, 2013

1 commit

  • When checking if an autofs mount point is busy it isn't sufficient to
    only check if it's a mount point.

    For example, if the mount of an offset mountpoint in a tree is denied
    for this host by its export and the dentry becomes a process working
    directory the check incorrectly returns the mount as not in use at
    expire.

    This can happen since the default when mounting within a tree is
    nostrict, which means ingnore mount fails on mounts within the tree and
    continue. The nostrict option is meant to allow mounting in this case.

    Signed-off-by: David Jeffery
    Signed-off-by: Ian Kent
    Cc: stable@vger.kernel.org
    Signed-off-by: Linus Torvalds

    David Jeffery
     

14 Dec, 2012

1 commit

  • The DCACHE_NEED_AUTOMOUNT flag is cleared on mount and set on expire
    for autofs rootless multi-mount dentrys to prevent unnecessary calls
    to ->d_automount().

    Since DCACHE_MANAGE_TRANSIT is always set on autofs dentrys ->d_managed()
    is always called so the check can be done in ->d_manage() without the
    need to change the flag. This still avoids unnecessary calls to
    ->d_automount(), adds negligible overhead and eliminates a seriously
    ugly check in the expire code.

    Signed-off-by: Ian Kent
    Signed-off-by: Linus Torvalds

    Ian Kent
     

17 Aug, 2012

2 commits

  • In some cases when an autofs indirect mount is contained in a file
    system that is marked as shared (such as when systemd does the
    equivalent of "mount --make-rshared /" early in the boot), mounts
    stop expiring.

    When this happens the first expiry check on a mountpoint dentry in
    autofs_expire_indirect() sees a mountpoint dentry with a higher
    than minimal reference count. Consequently the dentry is condidered
    busy and the actual expiry check is never done.

    This particular check was originally meant as an optimisation to
    detect a path walk in progress but with the addition of rcu-walk
    it can be ineffective anyway.

    Removing the test allows automounts to expire again since the
    actual expire check doesn't rely on the dentry reference count.

    Signed-off-by: Ian Kent
    Signed-off-by: Linus Torvalds

    Ian Kent
     
  • Following a report of a crash during an automount expire I found that
    the locking in fs/autofs4/expire.c:get_next_positive_subdir() was wrong.
    Not only is the locking wrong but the function is more complex than it
    needs to be.

    The function is meant to calculate (and dget) the next entry in the list
    of directories contained in the root of an autofs mount point (an autofs
    indirect mount to be precise). The main problem was that the d_lock of
    the owner of the list was not being taken when walking the list, which
    lead to list corruption under load. The only other lock that needs to
    be taken is against the next dentry candidate so it can be checked for
    usability.

    Signed-off-by: Ian Kent
    Signed-off-by: Linus Torvalds

    Ian Kent
     

14 Feb, 2012

1 commit

  • When recursing down the locks when traversing a tree/list in
    get_next_positive_dentry() or get_next_positive_subdir() a lock can
    change from being nested to being a parent which breaks lockdep. This
    patch tells lockdep about what we did.

    Signed-off-by: Steven Rostedt
    Acked-by: Ian Kent
    Signed-off-by: Al Viro

    Steven Rostedt
     

25 Mar, 2011

4 commits

  • The autofs4_lock introduced by the rcu-walk changes has unnecessarily
    broad scope. The locking is better handled by the per-autofs super
    block lookup_lock.

    Signed-off-by: Ian Kent
    Acked-by: David Howells
    Signed-off-by: Al Viro

    Ian Kent
     
  • The vfs-scale changes changed the traversal used in
    autofs4_expire_indirect() from a list to a depth first tree traversal
    which isn't right.

    Signed-off-by: Ian Kent
    Signed-off-by: Al Viro

    Ian Kent
     
  • There is a missing dput() when returning from autofs4_expire_direct()
    when we see that the dentry is already a pending mount.

    Signed-off-by: Ian Kent
    Acked-by: David Howells
    Signed-off-by: Al Viro

    Ian Kent
     
  • When direct (and offset) mounts were introduced the the last used
    timeout could no longer be updated in ->d_revalidate(). This is
    because covered direct mounts would be followed over without calling
    the autofs file system. As a result the definition of the busyness
    check for all entries was changed to be "actually busy" being an open
    file or working directory within the automount. But now we have a call
    back in the follow so the last used update on any access can be
    re-instated. This requires DCACHE_MANAGE_TRANSIT to always be set.

    Signed-off-by: Ian Kent
    Signed-off-by: Al Viro

    Ian Kent
     

18 Jan, 2011

1 commit

  • 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.

    Signed-off-by: Ian Kent
    Signed-off-by: Al Viro

    Ian Kent
     

16 Jan, 2011

3 commits

  • This patch required a previous patch to add the ->d_automount()
    dentry operation.

    Add a function to use the newly defined ->d_manage() dentry operation
    for blocking during mount and expire.

    Whether the VFS calls the dentry operations d_automount() and d_manage()
    is controled by the DMANAGED_AUTOMOUNT and DMANAGED_TRANSIT flags. autofs
    uses the d_automount() operation to callback to user space to request
    mount operations and the d_manage() operation to block walks into mounts
    that are under construction or destruction.

    In order to prevent these functions from being called unnecessarily the
    DMANAGED_* flags are cleared for cases which would cause this. In the
    common case the DMANAGED_AUTOMOUNT and DMANAGED_TRANSIT flags are both
    set for dentrys waiting to be mounted. The DMANAGED_TRANSIT flag is
    cleared upon successful mount request completion and set during expire
    runs, both during the dentry expire check, and if selected for expire,
    is left set until a subsequent successful mount request completes.

    The exception to this is the so-called rootless multi-mount which has
    no actual mount at its base. In this case the DMANAGED_AUTOMOUNT flag
    is cleared upon successful mount request completion as well and set
    again after a successful expire.

    Signed-off-by: Ian Kent
    Signed-off-by: David Howells
    Signed-off-by: Al Viro

    Ian Kent
     
  • Add a function to use the newly defined ->d_automount() dentry operation
    for triggering mounts instead of doing the user space callback in ->lookup()
    and ->d_revalidate().

    Note, to be useful the subsequent patch to add the ->d_manage() dentry
    operation is also needed so the discussion of functionality is deferred to
    that patch.

    Signed-off-by: Ian Kent
    Signed-off-by: David Howells
    Signed-off-by: Al Viro

    Ian Kent
     
  • Add a dentry op (d_manage) to permit a filesystem to hold a process and make it
    sleep when it tries to transit away from one of that filesystem's directories
    during a pathwalk. The operation is keyed off a new dentry flag
    (DCACHE_MANAGE_TRANSIT).

    The filesystem is allowed to be selective about which processes it holds and
    which it permits to continue on or prohibits from transiting from each flagged
    directory. This will allow autofs to hold up client processes whilst letting
    its userspace daemon through to maintain the directory or the stuff behind it
    or mounted upon it.

    The ->d_manage() dentry operation:

    int (*d_manage)(struct path *path, bool mounting_here);

    takes a pointer to the directory about to be transited away from and a flag
    indicating whether the transit is undertaken by do_add_mount() or
    do_move_mount() skipping through a pile of filesystems mounted on a mountpoint.

    It should return 0 if successful and to let the process continue on its way;
    -EISDIR to prohibit the caller from skipping to overmounted filesystems or
    automounting, and to use this directory; or some other error code to return to
    the user.

    ->d_manage() is called with namespace_sem writelocked if mounting_here is true
    and no other locks held, so it may sleep. However, if mounting_here is true,
    it may not initiate or wait for a mount or unmount upon the parameter
    directory, even if the act is actually performed by userspace.

    Within fs/namei.c, follow_managed() is extended to check with d_manage() first
    on each managed directory, before transiting away from it or attempting to
    automount upon it.

    follow_down() is renamed follow_down_one() and should only be used where the
    filesystem deliberately intends to avoid management steps (e.g. autofs).

    A new follow_down() is added that incorporates the loop done by all other
    callers of follow_down() (do_add/move_mount(), autofs and NFSD; whilst AFS, NFS
    and CIFS do use it, their use is removed by converting them to use
    d_automount()). The new follow_down() calls d_manage() as appropriate. It
    also takes an extra parameter to indicate if it is being called from mount code
    (with namespace_sem writelocked) which it passes to d_manage(). follow_down()
    ignores automount points so that it can be used to mount on them.

    __follow_mount_rcu() is made to abort rcu-walk mode if it hits a directory with
    DCACHE_MANAGE_TRANSIT set on the basis that we're probably going to have to
    sleep. It would be possible to enter d_manage() in rcu-walk mode too, and have
    that determine whether to abort or not itself. That would allow the autofs
    daemon to continue on in rcu-walk mode.

    Note that DCACHE_MANAGE_TRANSIT on a directory should be cleared when it isn't
    required as every tranist from that directory will cause d_manage() to be
    invoked. It can always be set again when necessary.

    ==========================
    WHAT THIS MEANS FOR AUTOFS
    ==========================

    Autofs currently uses the lookup() inode op and the d_revalidate() dentry op to
    trigger the automounting of indirect mounts, and both of these can be called
    with i_mutex held.

    autofs knows that the i_mutex will be held by the caller in lookup(), and so
    can drop it before invoking the daemon - but this isn't so for d_revalidate(),
    since the lock is only held on _some_ of the code paths that call it. This
    means that autofs can't risk dropping i_mutex from its d_revalidate() function
    before it calls the daemon.

    The bug could manifest itself as, for example, a process that's trying to
    validate an automount dentry that gets made to wait because that dentry is
    expired and needs cleaning up:

    mkdir S ffffffff8014e05a 0 32580 24956
    Call Trace:
    [] :autofs4:autofs4_wait+0x674/0x897
    [] avc_has_perm+0x46/0x58
    [] autoremove_wake_function+0x0/0x2e
    [] :autofs4:autofs4_expire_wait+0x41/0x6b
    [] :autofs4:autofs4_revalidate+0x91/0x149
    [] __lookup_hash+0xa0/0x12f
    [] lookup_create+0x46/0x80
    [] sys_mkdirat+0x56/0xe4

    versus the automount daemon which wants to remove that dentry, but can't
    because the normal process is holding the i_mutex lock:

    automount D ffffffff8014e05a 0 32581 1 32561
    Call Trace:
    [] __mutex_lock_slowpath+0x60/0x9b
    [] do_path_lookup+0x2ca/0x2f1
    [] .text.lock.mutex+0xf/0x14
    [] do_rmdir+0x77/0xde
    [] tracesys+0x71/0xe0
    [] tracesys+0xd5/0xe0

    which means that the system is deadlocked.

    This patch allows autofs to hold up normal processes whilst the daemon goes
    ahead and does things to the dentry tree behind the automouter point without
    risking a deadlock as almost no locks are held in d_manage() and none in
    d_automount().

    Signed-off-by: David Howells
    Was-Acked-by: Ian Kent
    Signed-off-by: Al Viro

    David Howells
     

07 Jan, 2011

5 commits

  • Rather than keep a d_mounted count in the dentry, set a dentry flag instead.
    The flag can be cleared by checking the hash table to see if there are any
    mounts left, which is not time critical because it is performed at detach time.

    The mounted state of a dentry is only used to speculatively take a look in the
    mount hash table if it is set -- before following the mount, vfsmount lock is
    taken and mount re-checked without races.

    This saves 4 bytes on 32-bit, nothing on 64-bit but it does provide a hole I
    might use later (and some configs have larger than 32-bit spinlocks which might
    make use of the hole).

    Autofs4 conversion and changelog by Ian Kent :
    In autofs4, when expring direct (or offset) mounts we need to ensure that we
    block user path walks into the autofs mount, which is covered by another mount.
    To do this we clear the mounted status so that follows stop before walking into
    the mount and are essentially blocked until the expire is completed. The
    automount daemon still finds the correct dentry for the umount due to the
    follow mount logic in fs/autofs4/root.c:autofs4_follow_link(), which is set as
    an inode operation for direct and offset mounts only and is called following
    the lookup that stopped at the covered mount.

    At the end of the expire the covering mount probably has gone away so the
    mounted status need not be restored. But we need to check this and only restore
    the mounted status if the expire failed.

    XXX: autofs may not work right if we have other mounts go over the top of it?

    Signed-off-by: Nick Piggin

    Nick Piggin
     
  • dcache_lock no longer protects anything. remove it.

    Signed-off-by: Nick Piggin

    Nick Piggin
     
  • Protect d_subdirs and d_child with d_lock, except in filesystems that aren't
    using dcache_lock for these anyway (eg. using i_mutex).

    Note: if we change the locking rule in future so that ->d_child protection is
    provided only with ->d_parent->d_lock, it may allow us to reduce some locking.
    But it would be an exception to an otherwise regular locking scheme, so we'd
    have to see some good results. Probably not worthwhile.

    Signed-off-by: Nick Piggin

    Nick Piggin
     
  • Protect d_unhashed(dentry) condition with d_lock. This means keeping
    DCACHE_UNHASHED bit in synch with hash manipulations.

    Signed-off-by: Nick Piggin

    Nick Piggin
     
  • Make d_count non-atomic and protect it with d_lock. This allows us to ensure a
    0 refcount dentry remains 0 without dcache_lock. It is also fairly natural when
    we start protecting many other dentry members with d_lock.

    Signed-off-by: Nick Piggin

    Nick Piggin
     

04 Mar, 2010

1 commit


16 Dec, 2009

2 commits

  • We need to be able to cope with the directory mutex being held during
    ->d_revalidate() in some cases, but not all cases, and not necessarily by
    us. Because we need to release the mutex when we call back to the daemon
    to do perform a mount we must be sure that it is us who holds the mutex so
    we must redirect mount requests to ->lookup() if the mutex is held.

    Signed-off-by: Ian Kent
    Cc: Sage Weil
    Cc: Al Viro
    Cc: Andreas Dilger
    Cc: Christoph Hellwig
    Cc: Yehuda Saheh
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ian Kent
     
  • Eliminate the use of the d_lock spin lock by using the autofs super block
    info spin lock. This reduces the number of spin locks we use by one and
    makes the code for the following patch (to redirect ->d_revalidate() to
    ->lookup()) a little simpler.

    Signed-off-by: Ian Kent
    Cc: Sage Weil
    Cc: Al Viro
    Cc: Andreas Dilger
    Cc: Christoph Hellwig
    Cc: Yehuda Saheh
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ian Kent
     

01 Sep, 2009

1 commit


12 Jun, 2009

1 commit