01 May, 2008

5 commits

  • Here are some more places where path_{get,put}() can be used instead of
    dput()/mntput() pair. Besides that it fixes a bug in autofs4_mount_busy()
    where mntput() was called before dput().

    Signed-off-by: Jan Blunck
    Cc: Ian Kent
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Blunck
     
  • Jeff Moyer has identified a case where the autofs4 function
    root.c:try_to_fill_dentry() can return -EBUSY when it should return 0.

    Jeff's description of the way this happens is:

    "automount starts an expire for directory d. after the callout to the daemon,
    but before the rmdir, another process tries to walk into the same directory.
    It puts itself onto the waitq, pending the expiration.

    When the expire finishes, the second process is woken up. In
    try_to_fill_dentry, it does this check:

    status = d_invalidate(dentry);
    if (status != -EBUSY)
    return -EAGAIN;

    And status is EBUSY. The dentry still has a non-zero d_inode, and the
    flags do not contain LOOKUP_CONTINUE or LOOKUP_DIRECTORY

    So, we fall through and return -EBUSY to the caller."

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

    Jeff Moyer
     
  • Jeff Moyer has identified a race in due to an execution order dependency
    in the autofs4 function root.c:try_to_fill_dentry().

    Jeff's description of this race is:

    "P1 does a lookup of /mount/submount/foo. Since the VFS can't find an entry
    for "foo" under /mount/submount, it calls into the autofs4 kernel module to
    allocate a new dentry, D1. The kernel creates a new waitq for this lookup and
    calls the daemon to perform the mount.

    The daemon performs a mkdir of the "foo" directory under /mount/submount,
    which ends up creating a *new* dentry, D2.

    Then, P2 does a lookup of /mount/submount/foo. The VFS path walking logic
    finds a dentry in the dcache, D2, and calls the revalidate function with this.
    In the autofs4 revalidate code, we then trigger a mount, since the dentry is
    an empty directory that isn't a mountpoint, and so set DCACHE_AUTOFS_PENDING
    and call into the wait code to trigger the mount.

    The wait code finds our existing waitq entry (since it is keyed off of the
    directory name) and adds itself to the list of waiters.

    After the daemon finishes the mount, it calls back into the kernel to release
    the waiters. When this happens, P1 is woken up and goes about clearing the
    DCACHE_AUTOFS_PENDING flag, but it does this in D1! So, given that P1 in our
    case is a program that will immediately try to access a file under
    /mount/submount/foo, we end up finding the dentry D2 which still has the
    pending flag set, and we set out to wait for a mount *again*!

    So, one way to address this is to re-do the lookup at the end of
    try_to_fill_dentry, and to clear the pending flag on the hashed dentry. This
    seems a sane approach to me."

    And Jeff's patch does this.

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

    Jeff Moyer
     
  • Catch invalid dentry when calculating its path.

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

    Ian Kent
     
  • Re-order some code in expire.c:autofs4_expire_indirect() to avoid compile
    warning, reported by Harvey Harrison:

    CHECK fs/autofs4/expire.c
    fs/autofs4/expire.c:383:2: warning: context imbalance in
    'autofs4_expire_indirect' - unexpected unlock

    Signed-off-by: Ian Kent
    Reviewed-by: Harvey Harrison
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ian Kent
     

30 Apr, 2008

1 commit


29 Apr, 2008

1 commit

  • fs/autofs4/root.c:536:23: warning: symbol 'ino' shadows an earlier one
    fs/autofs4/root.c:510:22: originally declared here

    There is no need to redeclare, we are at the end of the loop and in
    the next iteration of the loop, ino will be reset.

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

    Harvey Harrison
     

15 Feb, 2008

2 commits

  • * Add path_put() functions for releasing a reference to the dentry and
    vfsmount of a struct path in the right order

    * Switch from path_release(nd) to path_put(&nd->path)

    * Rename dput_path() to path_put_conditional()

    [akpm@linux-foundation.org: fix cifs]
    Signed-off-by: Jan Blunck
    Signed-off-by: Andreas Gruenbacher
    Acked-by: Christoph Hellwig
    Cc:
    Cc: Al Viro
    Cc: Steven French
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Blunck
     
  • This is the central patch of a cleanup series. In most cases there is no good
    reason why someone would want to use a dentry for itself. This series reflects
    that fact and embeds a struct path into nameidata.

    Together with the other patches of this series
    - it enforced the correct order of getting/releasing the reference count on
    pairs
    - it prepares the VFS for stacking support since it is essential to have a
    struct path in every place where the stack can be traversed
    - it reduces the overall code size:

    without patch series:
    text data bss dec hex filename
    5321639 858418 715768 6895825 6938d1 vmlinux

    with patch series:
    text data bss dec hex filename
    5320026 858418 715768 6894212 693284 vmlinux

    This patch:

    Switch from nd->{dentry,mnt} to nd->path.{dentry,mnt} everywhere.

    [akpm@linux-foundation.org: coding-style fixes]
    [akpm@linux-foundation.org: fix cifs]
    [akpm@linux-foundation.org: fix smack]
    Signed-off-by: Jan Blunck
    Signed-off-by: Andreas Gruenbacher
    Acked-by: Christoph Hellwig
    Cc: Al Viro
    Cc: Casey Schaufler
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jan Blunck
     

09 Feb, 2008

1 commit


20 Oct, 2007

1 commit

  • The set of functions process_session, task_session, process_group and
    task_pgrp is confusing, as the names can be mixed with each other when looking
    at the code for a long time.

    The proposals are to
    * equip the functions that return the integer with _nr suffix to
    represent that fact,
    * and to make all functions work with task (not process) by making
    the common prefix of the same name.

    For monotony the routines signal_session() and set_signal_session() are
    replaced with task_session_nr() and set_task_session(), especially since they
    are only used with the explicit task->signal dereference.

    Signed-off-by: Pavel Emelianov
    Acked-by: Serge E. Hallyn
    Cc: Kirill Korotaev
    Cc: "Eric W. Biederman"
    Cc: Cedric Le Goater
    Cc: Herbert Poetzl
    Cc: Sukadev Bhattiprolu
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Pavel Emelianov
     

19 Oct, 2007

1 commit

  • Get rid of sparse related warnings from places that use integer as NULL
    pointer.

    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: Stephen Hemminger
    Cc: Andi Kleen
    Cc: Jeff Garzik
    Cc: Matt Mackall
    Cc: Ian Kent
    Cc: Arnd Bergmann
    Cc: Davide Libenzi
    Cc: Stephen Smalley
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Stephen Hemminger
     

17 Oct, 2007

1 commit


23 Aug, 2007

1 commit

  • Due to inconsistent locking in the VFS between calls to lookup and
    revalidate deadlock can occur in the automounter.

    The inconsistency is that the directory inode mutex is held for both lookup
    and revalidate calls when called via lookup_hash whereas it is held only
    for lookup during a path walk. Consequently, if the mutex is held during a
    call to revalidate autofs4 can't release the mutex to callback the daemon
    as it can't know whether it owns the mutex.

    This situation happens when a process tries to create a directory within an
    automount and a second process also tries to create the same directory
    between the lookup and the mkdir. Since the first process has dropped the
    mutex for the daemon callback, the second process takes it during
    revalidate leading to deadlock between the autofs daemon and the second
    process when the daemon tries to create the mount point directory.

    After spending quite a bit of time trying to resolve this on more than one
    occassion, using rather complex and ulgy approaches, it turns out that just
    delaying the hashing of the dentry until the create operation works fine.

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

    Ian Kent
     

11 May, 2007

1 commit

  • Fix coding style errors (extra spaces, long lines) in autofs and autofs4 files
    being modified for container/pidspace issues.

    Signed-off-by: Sukadev Bhattiprolu
    Cc: Cedric Le Goater
    Cc: Dave Hansen
    Cc: Serge Hallyn
    Cc:
    Cc: Eric W. Biederman
    Cc: Ian Kent
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sukadev Bhattiprolu
     

09 May, 2007

1 commit


13 Apr, 2007

1 commit

  • Commit f50b6f8691cae2e0064c499dd3ef3f31142987f0 introduced a race in
    autofs4 between autofs_lookup_unhashed() and autofs_dentry_release().

    autofs_dentry_release() ends up clearing the ->dentry and ->inode members
    of autofs_info before removing it from the rehash list. The list is
    protected by the rehash lock in both functions, but since
    autofs_dentry_release() starts tearing the autofs_info struct down before
    removing it from the list, autofs_lookup_unhashed() can get a autofs_info
    with a NULL dentry.

    This patch moves the clearing of ->dentry and ->inode after the removal
    from the rehash list.

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

    Jeff Mahoney
     

21 Feb, 2007

3 commits

  • This problem was identified and fixed some time ago by Jeff Moyer but it fell
    through the cracks somehow.

    It is possible that a user space application could remove and re-create a
    directory during a request. To avoid returning a failure from lookup
    incorrectly when our current dentry is unhashed we need to check if another
    positive, hashed dentry matching this one exists and if so return it instead
    of a fail.

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

    Ian Kent
     
  • Jeff Moyer has identified a race between mount and expire.

    What happens is that during an expire the situation can arise that a directory
    is removed and another lookup is done before the expire issues a completion
    status to the kernel module. In this case, since the the lookup gets a new
    dentry, it doesn't know that there is an expire in progress and when it posts
    its mount request, matches the existing expire request and waits for its
    completion. ENOENT is then returned to user space from lookup (as the dentry
    passed in is now unhashed) without having performed the mount request.

    The solution used here is to keep track of dentrys in this unhashed state and
    reuse them, if possible, in order to preserve the flags. Additionally, this
    infrastructure will provide the framework for the reintroduction of caching of
    mount fails removed earlier in development.

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

    Ian Kent
     
  • The current header file definitions for autofs version 5 have caused a couple
    of problems for application builds downstream.

    This fixes the problem by separating the definitions.

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

    Ian Kent
     

13 Feb, 2007

2 commits

  • This patch is inspired by Arjan's "Patch series to mark struct
    file_operations and struct inode_operations const".

    Compile tested with gcc & sparse.

    Signed-off-by: Josef 'Jeff' Sipek
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Josef 'Jeff' Sipek
     
  • Many struct inode_operations in the kernel can be "const". Marking them const
    moves these to the .rodata section, which avoids false sharing with potential
    dirty data. In addition it'll catch accidental writes at compile time to
    these shared resources.

    Signed-off-by: Arjan van de Ven
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Arjan van de Ven
     

14 Dec, 2006

1 commit

  • Run this:

    #!/bin/sh
    for f in $(grep -Erl "\([^\)]*\) *k[cmz]alloc" *) ; do
    echo "De-casting $f..."
    perl -pi -e "s/ ?= ?\([^\)]*\) *(k[cmz]alloc) *\(/ = \1\(/" $f
    done

    And then go through and reinstate those cases where code is casting pointers
    to non-pointers.

    And then drop a few hunks which conflicted with outstanding work.

    Cc: Russell King , Ian Molton
    Cc: Mikael Starvik
    Cc: Yoshinori Sato
    Cc: Roman Zippel
    Cc: Geert Uytterhoeven
    Cc: Ralf Baechle
    Cc: Paul Mackerras
    Cc: Kyle McMartin
    Cc: Benjamin Herrenschmidt
    Cc: Martin Schwidefsky
    Cc: "David S. Miller"
    Cc: Jeff Dike
    Cc: Greg KH
    Cc: Jens Axboe
    Cc: Paul Fulghum
    Cc: Alan Cox
    Cc: Karsten Keil
    Cc: Mauro Carvalho Chehab
    Cc: Jeff Garzik
    Cc: James Bottomley
    Cc: Ian Kent
    Cc: Steven French
    Cc: David Woodhouse
    Cc: Neil Brown
    Cc: Jaroslav Kysela
    Cc: Takashi Iwai
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Robert P. J. Day
     

09 Dec, 2006

1 commit


08 Dec, 2006

1 commit

  • When kernel is compiled with old version of autofs (CONFIG_AUTOFS_FS), and
    new (observed at least with 5.x.x) automount deamon is started, kernel
    correctly reports incompatible version of kernel and userland daemon, but
    then screws things up instead of correct handling of the error:

    autofs: kernel does not match daemon version
    =====================================
    [ BUG: bad unlock balance detected! ]
    -------------------------------------
    automount/4199 is trying to release lock (&type->s_umount_key) at:
    [] get_sb_nodev+0x76/0xa4
    but there are no more locks to release!

    other info that might help us debug this:
    no locks held by automount/4199.

    stack backtrace:
    [] dump_trace+0x68/0x1b2
    [] show_trace_log_lvl+0x18/0x2c
    [] show_trace+0xf/0x11
    [] dump_stack+0x12/0x14
    [] print_unlock_inbalance_bug+0xe7/0xf3
    [] lock_release+0x8d/0x164
    [] up_write+0x14/0x27
    [] get_sb_nodev+0x76/0xa4
    [] vfs_kern_mount+0x83/0xf6
    [] do_kern_mount+0x2d/0x3e
    [] do_mount+0x607/0x67a
    [] sys_mount+0x72/0xa4
    [] sysenter_past_esp+0x5f/0x99
    DWARF2 unwinder stuck at sysenter_past_esp+0x5f/0x99
    Leftover inexact backtrace:
    =======================

    and then deadlock comes.

    The problem: autofs_fill_super() returns EINVAL to get_sb_nodev(), but
    before that, it calls kill_anon_super() to destroy the superblock which
    won't be needed. This is however way too soon to call kill_anon_super(),
    because get_sb_nodev() has to perform its own cleanup of the superblock
    first (deactivate_super(), etc.). The correct time to call
    kill_anon_super() is in the autofs_kill_sb() callback, which is called by
    deactivate_super() at proper time, when the superblock is ready to be
    killed.

    I can see the same faulty codepath also in autofs4. This patch solves
    issues in both filesystems in a same way - it postpones the
    kill_anon_super() until the proper time is signalized by deactivate_super()
    calling the kill_sb() callback.

    [raven@themaw.net: update comment]
    Signed-off-by: Jiri Kosina
    Acked-by: Ian Kent
    Cc:
    Signed-off-by: Ian Kent
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Jiri Kosina
     

15 Nov, 2006

1 commit

  • Resolve the panic on failed mount of an autofs filesystem originally
    reported by Mao Bibo.

    It addresses two issues that happen after the mount fail. The first a NULL
    pointer reference to a field (pipe) in the autofs superblock info structure
    and second the lack of super block cleanup by the autofs and autofs4
    modules.

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

    Ian Kent
     

12 Oct, 2006

1 commit

  • Make sure all dentries refs are released before calling kill_anon_super() so
    that the assumption that generic_shutdown_super() can completely destroy the
    dentry tree for there will be no external references holds true.

    What was being done in the put_super() superblock op, is now done in the
    kill_sb() filesystem op instead, prior to calling kill_anon_super().

    This makes the struct autofs_sb_info::root member variable redundant (since
    sb->s_root is still available), and so that is removed. The calls to
    shrink_dcache_sb() are also removed since they're also redundant as
    shrink_dcache_for_umount() will now be called after the cleanup routine.

    Signed-off-by: David Howells
    Acked-by: Ian Kent
    Cc: Trond Myklebust
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Howells
     

01 Oct, 2006

3 commits

  • Some filesystems, instead of simply decrementing i_nlink, simply zero it
    during an unlink operation. We need to catch these in addition to the
    decrement operations.

    Signed-off-by: Dave Hansen
    Acked-by: Christoph Hellwig
    Cc: Al Viro
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Dave Hansen
     
  • This is mostly included for parity with dec_nlink(), where we will have some
    more hooks. This one should stay pretty darn straightforward for now.

    Signed-off-by: Dave Hansen
    Acked-by: Christoph Hellwig
    Cc: Al Viro
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Dave Hansen
     
  • When a filesystem decrements i_nlink to zero, it means that a write must be
    performed in order to drop the inode from the filesystem.

    We're shortly going to have keep filesystems from being remounted r/o between
    the time that this i_nlink decrement and that write occurs.

    So, add a little helper function to do the decrements. We'll tie into it in a
    bit to note when i_nlink hits zero.

    Signed-off-by: Dave Hansen
    Acked-by: Christoph Hellwig
    Cc: Al Viro
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Dave Hansen
     

30 Sep, 2006

2 commits

  • During testing I've found that the mount pending flag can be left set at
    exit from autofs4_lookup after a failed mount request. This shouldn't be
    allowed to happen and causes incorrect error returns.

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

    Ian Kent
     
  • The check for an empty directory in the autofs4_follow_link method fails
    occassionally due to old dentrys. We had the same problem
    autofs4_revalidate ages ago. I thought we wouldn't need this in
    autofs4_follow_link, silly me.

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

    Ian Kent
     

27 Sep, 2006

2 commits

  • This eliminates the i_blksize field from struct inode. Filesystems that want
    to provide a per-inode st_blksize can do so by providing their own getattr
    routine instead of using the generic_fillattr() function.

    Note that some filesystems were providing pretty much random (and incorrect)
    values for i_blksize.

    [bunk@stusta.de: cleanup]
    [akpm@osdl.org: generic_fillattr() fix]
    Signed-off-by: "Theodore Ts'o"
    Signed-off-by: Adrian Bunk
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Theodore Ts'o
     
  • For a long time now I have had a problem with not being able to return a
    lookup failure on an existsing directory. In autofs this corresponds to a
    mount failure on a autofs managed mount entry that is browsable (and so the
    mount point directory exists).

    While this problem has been present for a long time I've avoided resolving
    it because it was not very visible. But now that autofs v5 has "mount and
    expire on demand" of nested multiple mounts, such as is found when mounting
    an export list from a server, solving the problem cannot be avoided any
    longer.

    I've tried very hard to find a way to do this entirely within the autofs4
    module but have not been able to find a satisfactory way to achieve it.

    So, I need to propose a change to the VFS.

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

    Ian Kent
     

26 Sep, 2006

1 commit

  • If the timeout of an autofs mount is set to zero then umounts are disabled.
    This works fine, however the kernel module checks the expire timeout and
    goes no further if it is zero. This is not the right thing to do at
    shutdown as the module is passed an option to expire mounts regardless of
    their timeout setting.

    This patch allows autofs to honor the force expire option.

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

    Ian Kent
     

24 Sep, 2006

1 commit


27 Jun, 2006

1 commit

  • This patch converts the combination of list_del(A) and list_add(A, B) to
    list_move(A, B) under fs/.

    Cc: Ian Kent
    Acked-by: Joel Becker
    Cc: Neil Brown
    Cc: Hans Reiser
    Cc: Urban Widmark
    Acked-by: David Howells
    Acked-by: Mark Fasheh
    Signed-off-by: Akinobu Mita
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Akinobu Mita
     

26 Jun, 2006

1 commit

  • I've found a case where invalid dentrys in a mount tree, waiting to be
    cleaned up by d_invalidate, prevent the expected expire.

    In this case dentrys created during a lookup for which a mount fails or has
    no entry in the mount map contribute to the d_count of the parent dentry.
    These dentrys may not be invalidated prior to comparing the interanl usage
    count of valid autofs dentrys against the dentry d_count which makes a
    mount tree appear busy so it doesn't expire.

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

    Ian Kent
     

23 Jun, 2006

1 commit

  • Extend the get_sb() filesystem operation to take an extra argument that
    permits the VFS to pass in the target vfsmount that defines the mountpoint.

    The filesystem is then required to manually set the superblock and root dentry
    pointers. For most filesystems, this should be done with simple_set_mnt()
    which will set the superblock pointer and then set the root dentry to the
    superblock's s_root (as per the old default behaviour).

    The get_sb() op now returns an integer as there's now no need to return the
    superblock pointer.

    This patch permits a superblock to be implicitly shared amongst several mount
    points, such as can be done with NFS to avoid potential inode aliasing. In
    such a case, simple_set_mnt() would not be called, and instead the mnt_root
    and mnt_sb would be set directly.

    The patch also makes the following changes:

    (*) the get_sb_*() convenience functions in the core kernel now take a vfsmount
    pointer argument and return an integer, so most filesystems have to change
    very little.

    (*) If one of the convenience function is not used, then get_sb() should
    normally call simple_set_mnt() to instantiate the vfsmount. This will
    always return 0, and so can be tail-called from get_sb().

    (*) generic_shutdown_super() now calls shrink_dcache_sb() to clean up the
    dcache upon superblock destruction rather than shrink_dcache_anon().

    This is required because the superblock may now have multiple trees that
    aren't actually bound to s_root, but that still need to be cleaned up. The
    currently called functions assume that the whole tree is rooted at s_root,
    and that anonymous dentries are not the roots of trees which results in
    dentries being left unculled.

    However, with the way NFS superblock sharing are currently set to be
    implemented, these assumptions are violated: the root of the filesystem is
    simply a dummy dentry and inode (the real inode for '/' may well be
    inaccessible), and all the vfsmounts are rooted on anonymous[*] dentries
    with child trees.

    [*] Anonymous until discovered from another tree.

    (*) The documentation has been adjusted, including the additional bit of
    changing ext2_* into foo_* in the documentation.

    [akpm@osdl.org: convert ipath_fs, do other stuff]
    Signed-off-by: David Howells
    Acked-by: Al Viro
    Cc: Nathan Scott
    Cc: Roland Dreier
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Howells
     

16 May, 2006

1 commit

  • This patch fixes two problems.

    First, the comparison of entries in the waitq.c was incorrect.

    Second, the NFY_NONE check was incorrect. The test of whether the dentry
    is mounted if ineffective, for example, if an expire fails then we could
    wait forever on a non existant expire. The bug was identified by Jeff
    Moyer.

    The patch changes autofs4 to wait on expires only as this is all that's
    needed. If there is no existing wait when autofs4_wait is call with a type
    of NFY_NONE it delays until either a wait appears or the the expire flag is
    cleared.

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

    Ian Kent