1. 09 Oct, 2009 1 commit
  2. 13 Nov, 2009 1 commit
  3. 11 Nov, 2009 1 commit
  4. 30 Sep, 2009 1 commit
  5. 13 Aug, 2009 1 commit
  6. 24 Jul, 2009 1 commit
  7. 17 Nov, 2009 1 commit
  8. 30 Sep, 2009 2 commits
    • Sage Weil's avatar
      Get rid of the goto by flipping the if (!result) over. Make the comments · 98022231
      Sage Weil authored
      a bit more descriptive.  Fix a few kernel style problems.  No functional
      changes.
      
      Cc: Ian Kent <raven@themaw.net>
      Cc: Christoph Hellwig <hch@infradead.org>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Andreas Dilger <adilger@sun.com>
      Signed-off-by: default avatarYehuda Sadeh <yehuda@newdream.net>
      Signed-off-by: default avatarSage Weil <sage@newdream.net>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      98022231
    • Sage Weil's avatar
      real_lookup() is called by do_lookup() if dentry revalidation fails. If · cb21ed84
      Sage Weil authored
      the cache is re-populated while waiting for i_mutex, it may find that a
      d_lookup() subsequently succeeds (see the "Uhhuh!  Nasty case" comment).
      
      Previously, real_lookup() would drop i_mutex and do_revalidate() again. 
      If revalidate failed _again_, however, it would give up with -ENOENT.  The
      problem here that network file systems may be invalidating dentries via
      server callbacks, e.g.  due to concurrent access from another client, and
      -ENOENT is frequently the wrong answer.
      
      This problem has been seen with both Lustre and Ceph.  It seems possible
      to hit this case with NFS as well if the cache lifetime is very short.
      
      Instead, we should do_revalidate() while i_mutex is still held.  If
      revalidation fails, we can move on to a ->lookup() and ensure a correct
      result without worrying about any subsequent races.
      
      Note that do_revalidate() is called with i_mutex held elsewhere.  For
      example, do_filp_open(), lookup_create(), do_unlinkat(), do_rmdir(), and
      possibly others all take the directory i_mutex, and then
      
      -> lookup_hash
              -> __lookup_hash
                      -> cached_lookup
                              -> do_revalidate
      
      so this does not introduce any new locking rules for d_revalidate
      implementations.
      
      Yes, the goto is ugly.  A cleanup patch follows.
      
      Cc: Ian Kent <raven@themaw.net>
      Cc: Christoph Hellwig <hch@infradead.org>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Andreas Dilger <adilger@sun.com>
      Signed-off-by: default avatarYehuda Sadeh <yehuda@newdream.net>
      Signed-off-by: default avatarSage Weil <sage@newdream.net>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      cb21ed84
  9. 25 Sep, 2009 1 commit
    • Nick Piggin's avatar
      Invalidate sb->s_bdev on remount,ro. · d14ff77a
      Nick Piggin authored
      Fixes a problem reported by Jorge Boncompte who is seeing corruption
      trying to snapshot a minix filesystem image.  Some filesystems modify
      their metadata via a path other than the bdev buffer cache (eg.  they may
      use a private linear mapping for their metadata, or implement directories
      in pagecache, etc).  Also, file data modifications usually go to the bdev
      via their own mappings.
      
      These updates are not coherent with buffercache IO (eg.  via /dev/bdev)
      and never have been.  However there could be a reasonable expectation that
      after a mount -oremount,ro operation then the buffercache should
      subsequently be coherent with previous filesystem modifications.
      
      So invalidate the bdev mappings on a remount,ro operation to provide a
      coherency point.
      
      The problem was exposed when we switched the old rd to brd because old rd
      didn't really function like a normal block device and updates to rd via
      mappings other than the buffercache would still end up going into its
      buffercache.  But the same problem has always affected other "normal"
      block devices, including loop.
      
      [akpm@linux-foundation.org: repair comment layout]
      Reported-by: default avatar"Jorge Boncompte [DTI2]" <jorge@dti2.net>
      Tested-by: default avatar"Jorge Boncompte [DTI2]" <jorge@dti2.net>
      Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      d14ff77a
  10. 11 Nov, 2009 5 commits
    • Nick Piggin's avatar
      Filesystems outside the regular namespace do not have to clear · 5e6bb6c5
      Nick Piggin authored
      DCACHE_UNHASHED in order to have a working /proc/$pid/fd/XXX.  Nothing in
      proc prevents the fd link from being used if its dentry is not in the
      hash.
      
      Also, it does not get put into the dcache hash if DCACHE_UNHASHED is
      clear; that depends on the filesystem calling d_add or d_rehash.
      
      So delete the misleading comments and needless code.
      Acked-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
      Signed-off-by: default avatarNick Piggin <npiggin@suse.de>
      Cc: Davide Libenzi <davidel@xmailserver.org>
      Cc: "David S. Miller" <davem@davemloft.net>
      Cc: Jens Axboe <jens.axboe@oracle.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      5e6bb6c5
    • Roland Dreier's avatar
      > ============================================= · 399da0ba
      Roland Dreier authored
       >  [ INFO: possible recursive locking detected ]
       >  2.6.31-2-generic #14~rbd3
       >  ---------------------------------------------
       >  firefox-3.5/4162 is trying to acquire lock:
       >   (&s->s_vfs_rename_mutex){+.+.+.}, at: [<ffffffff81139d31>] lock_rename+0x41/0xf0
       >
       >  but task is already holding lock:
       >   (&s->s_vfs_rename_mutex){+.+.+.}, at: [<ffffffff81139d31>] lock_rename+0x41/0xf0
       >
       >  other info that might help us debug this:
       >  3 locks held by firefox-3.5/4162:
       >   #0:  (&s->s_vfs_rename_mutex){+.+.+.}, at: [<ffffffff81139d31>] lock_rename+0x41/0xf0
       >   #1:  (&sb->s_type->i_mutex_key#11/1){+.+.+.}, at: [<ffffffff81139d5a>] lock_rename+0x6a/0xf0
       >   #2:  (&sb->s_type->i_mutex_key#11/2){+.+.+.}, at: [<ffffffff81139d6f>] lock_rename+0x7f/0xf0
       >
       >  stack backtrace:
       >  Pid: 4162, comm: firefox-3.5 Tainted: G         C 2.6.31-2-generic #14~rbd3
       >  Call Trace:
       >   [<ffffffff8108ae74>] print_deadlock_bug+0xf4/0x100
       >   [<ffffffff8108ce26>] validate_chain+0x4c6/0x750
       >   [<ffffffff8108d2e7>] __lock_acquire+0x237/0x430
       >   [<ffffffff8108d585>] lock_acquire+0xa5/0x150
       >   [<ffffffff81139d31>] ? lock_rename+0x41/0xf0
       >   [<ffffffff815526ad>] __mutex_lock_common+0x4d/0x3d0
       >   [<ffffffff81139d31>] ? lock_rename+0x41/0xf0
       >   [<ffffffff81139d31>] ? lock_rename+0x41/0xf0
       >   [<ffffffff8120eaf9>] ? ecryptfs_rename+0x99/0x170
       >   [<ffffffff81552b36>] mutex_lock_nested+0x46/0x60
       >   [<ffffffff81139d31>] lock_rename+0x41/0xf0
       >   [<ffffffff8120eb2a>] ecryptfs_rename+0xca/0x170
       >   [<ffffffff81139a9e>] vfs_rename_dir+0x13e/0x160
       >   [<ffffffff8113ac7e>] vfs_rename+0xee/0x290
       >   [<ffffffff8113c212>] ? __lookup_hash+0x102/0x160
       >   [<ffffffff8113d512>] sys_renameat+0x252/0x280
       >   [<ffffffff81133eb4>] ? cp_new_stat+0xe4/0x100
       >   [<ffffffff8101316a>] ? sysret_check+0x2e/0x69
       >   [<ffffffff8108c34d>] ? trace_hardirqs_on_caller+0x14d/0x190
       >   [<ffffffff8113d55b>] sys_rename+0x1b/0x20
       >   [<ffffffff81013132>] system_call_fastpath+0x16/0x1b
      
      The trace above is totally reproducible by doing a cross-directory
      rename on an ecryptfs directory.
      
      The issue seems to be that sys_renameat() does lock_rename() then calls
      into the filesystem; if the filesystem is ecryptfs, then
      ecryptfs_rename() again does lock_rename() on the lower filesystem, and
      lockdep can't tell that the two s_vfs_rename_mutexes are different.  It
      seems an annotation like the following is sufficient to fix this (it
      does get rid of the lockdep trace in my simple tests); however I would
      like to make sure I'm not misunderstanding the locking, hence the CC
      list...
      Signed-off-by: default avatarRoland Dreier <rdreier@cisco.com>
      Cc: Tyler Hicks <tyhicks@linux.vnet.ibm.com>
      Cc: Dustin Kirkland <kirkland@canonical.com>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      399da0ba
    • Tony Battersby's avatar
      Improve the description of fget_light(), which is currently incorrect · bc95777a
      Tony Battersby authored
      about needing a prior refcnt (judging by the way it is actually used).
      Signed-off-by: default avatarTony Battersby <tonyb@cybernetics.com>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      bc95777a
    • Al Viro's avatar
      RAW_SETBIND and RAW_GETBIND 32bit versions are fscked in interesting ways. · 0083395f
      Al Viro authored
      1) fs/compat_ioctl.c has COMPATIBLE_IOCTL(RAW_SETBIND) followed by
      HANDLE_IOCTL(RAW_SETBIND, raw_ioctl).  The latter is ignored.
      
      2) on amd64 (and itanic) the damn thing is broken - we have int + u64 + u64
      and layouts on i386 and amd64 are _not_ the same.  raw_ioctl() would
      work there, but it's never called due to (1).  As it is, i386 /sbin/raw
      definitely doesn't work on amd64 boxen.
      
      3) switching to raw_ioctl() as is would *not* work on e.g. sparc64 and ppc64,
      which would be rather sad, seeing that normal userland there is 32bit.
      The thing is, slapping __packed on the struct in question does not DTRT -
      it eliminates *all* padding.  The real solution is to use compat_u64.
      
      4) of course, all that stuff has no business being outside of raw.c in the
      first place - there should be ->compat_ioctl() for /dev/rawctl instead of
      messing with compat_ioctl.c.
      
      [akpm@linux-foundation.org: coding-style fixes]
      Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      0083395f
    • Miklos Szeredi's avatar
      vfs_rename_dir() doesn't properly account for filesystems with · ca05021f
      Miklos Szeredi authored
      FS_RENAME_DOES_D_MOVE.  If new_dentry has a target inode attached, it
      unhashes the new_dentry prior to the rename() iop and rehashes it after,
      but doesn't account for the possibility that rename() may have swapped
      {old,new}_dentry.  For FS_RENAME_DOES_D_MOVE filesystems, it rehashes
      new_dentry (now the old renamed-from name, which d_move() expected to go
      away), such that a subsequent lookup will find it.
      
      This was caught by the recently posted POSIX fstest suite, rename/10.t
      test 62 (and others) on ceph.
      
      The bug was introduced by: commit 349457cc
      "[PATCH] Allow file systems to manually d_move() inside of ->rename()"
      
      Fix by not rehashing the new dentry.  Rehashing used to be needed by
      d_move() but isn't anymore.
      Reported-by: default avatarSage Weil <sage@newdream.net>
      Cc: Zach Brown <zach.brown@oracle.com>
      Signed-off-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
      Cc: Mark Fasheh <mark.fasheh@oracle.com>
      Cc: Trond Myklebust <trond.myklebust@fys.uio.no>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Christoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      ca05021f
  11. 10 Nov, 2009 1 commit
  12. 09 Nov, 2009 1 commit
  13. 06 Oct, 2009 1 commit
  14. 03 Nov, 2009 2 commits
  15. 12 Nov, 2009 1 commit
    • Alex Chiang's avatar
      No need to export those device attributes. · 7b53d30e
      Alex Chiang authored
      In fact, without this patch, we can trip over a build error if hpsa
      is a built-in and another driver also declares and exports attributes
      with the same name.
      
      You'll see errors like:
      
      	drivers/scsi/built-in.o: multiple definition of `dev_attr_lunid'
      	drivers/block/built-in.o: first defined here
      Signed-off-by: default avatarAlex Chiang <achiang@hp.com>
      Cc: Stephen M. Cameron <scameron@beardog.cce.hp.com>
      Cc: Mike Miller <mikem@beardog.cce.hp.com>
      Cc: Jens Axboe <jens.axboe@oracle.com>
      Cc: James Bottomley <James.Bottomley@HansenPartnership.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      7b53d30e
  16. 17 Nov, 2009 1 commit
  17. 03 Nov, 2009 1 commit
  18. 14 Oct, 2009 1 commit
  19. 29 Sep, 2009 1 commit
  20. 18 Sep, 2009 1 commit
  21. 11 Nov, 2009 1 commit
  22. 25 Sep, 2009 1 commit
  23. 20 Aug, 2009 1 commit
  24. 04 Aug, 2009 2 commits
  25. 29 Jul, 2009 1 commit
  26. 25 Sep, 2009 1 commit
  27. 29 Jul, 2009 1 commit
  28. 25 Sep, 2009 1 commit
  29. 11 Nov, 2009 1 commit
  30. 17 Sep, 2009 1 commit
  31. 16 Oct, 2009 1 commit
    • Stephen Boyd's avatar
      dmar_ir_support() references dmar_tbl which is annotated with · c38a8607
      Stephen Boyd authored
      __initdata. The only caller of dmar_ir_support() is
      intr_remapping_supported() also annotated with __init.
      
      WARNING: drivers/pci/built-in.o(.text+0xa110): Section mismatch in
      reference from the function dmar_ir_support() to the variable
      .init.data:dmar_tbl
      The function dmar_ir_support() references
      the variable __initdata dmar_tbl.
      This is often because dmar_ir_support lacks a __initdata
      annotation or the annotation of dmar_tbl is wrong.
      Signed-off-by: default avatarStephen Boyd <bebarino@gmail.com>
      Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
      Cc: David Woodhouse <David.Woodhouse@intel.com>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      c38a8607
  32. 14 Nov, 2009 1 commit
    • Dick Hollenbeck's avatar
      When controlling an industrial radio modem it can be necessary to · 4f36dc27
      Dick Hollenbeck authored
      manipulate the handshake lines in order to control the radio modem's
      transmitter, from userspace.
      
      The transmitter should not be turned off before all characters have been
      transmitted.  serial8250_tx_empty() was reporting that all characters were
      transmitted before they actually were.
      
      ===
      
      Discovered in parallel with more testing and analysis by Kees Schoenmakers
      as follows:
      
      I ran into an NetMos 9835 serial pci board which behaves a little
      different than the standard.  This type of expansion board is very common.
      
      "Standard" 8250 compatible devices clear the 'UART_LST_TEMT" bit together
      with the "UART_LSR_THRE" bit when writing data to the device.
      
      The NetMos device does it slightly different
      
      I believe that the TEMT bit is coupled to the shift register.  The problem
      is that after writing data to the device and very quickly after that one
      does call serial8250_tx_empty, it returns the wrong information.
      
      My patch makes the test more robust (and solves the problem) and it does
      not affect the already correct devices.
      
      
      Alan:
      
        We may yet need to quirk this but now we know which chips we have a
        way to do that should we find this breaks some other 8250 clone with
        dodgy THRE.
      Signed-off-by: default avatarDick Hollenbeck <dick@softplc.com>
      Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
      Cc: Kees Schoenmakers <k.schoenmakers@sigmae.nl>
      Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
      4f36dc27
  33. 12 Nov, 2009 1 commit