1. 23 10月, 2010 6 次提交
  2. 05 10月, 2010 2 次提交
    • J
      BKL: Remove BKL from NILFS2 · d6d4c19c
      Jan Blunck 提交于
      The BKL is only used in put_super, fill_super and remount_fs that are all
      three protected by the superblocks s_umount rw_semaphore. Therefore it is
      safe to remove the BKL entirely.
      Signed-off-by: NJan Blunck <jblunck@infradead.org>
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      d6d4c19c
    • J
      BKL: Explicitly add BKL around get_sb/fill_super · db719222
      Jan Blunck 提交于
      This patch is a preparation necessary to remove the BKL from do_new_mount().
      It explicitly adds calls to lock_kernel()/unlock_kernel() around
      get_sb/fill_super operations for filesystems that still uses the BKL.
      
      I've read through all the code formerly covered by the BKL inside
      do_kern_mount() and have satisfied myself that it doesn't need the BKL
      any more.
      
      do_kern_mount() is already called without the BKL when mounting the rootfs
      and in nfsctl. do_kern_mount() calls vfs_kern_mount(), which is called
      from various places without BKL: simple_pin_fs(), nfs_do_clone_mount()
      through nfs_follow_mountpoint(), afs_mntpt_do_automount() through
      afs_mntpt_follow_link(). Both later functions are actually the filesystems
      follow_link inode operation. vfs_kern_mount() is calling the specified
      get_sb function and lets the filesystem do its job by calling the given
      fill_super function.
      
      Therefore I think it is safe to push down the BKL from the VFS to the
      low-level filesystems get_sb/fill_super operation.
      
      [arnd: do not add the BKL to those file systems that already
             don't use it elsewhere]
      Signed-off-by: NJan Blunck <jblunck@infradead.org>
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Cc: Matthew Wilcox <matthew@wil.cx>
      Cc: Christoph Hellwig <hch@infradead.org>
      db719222
  3. 30 8月, 2010 1 次提交
  4. 18 8月, 2010 2 次提交
  5. 16 8月, 2010 2 次提交
    • R
      nilfs2: fix false warning saying one of two super blocks is broken · ea1a16f7
      Ryusuke Konishi 提交于
      After applying commit b2ac86e1, the following message got appeared
      after unclean shutdown:
      
      > NILFS warning: broken superblock. using spare superblock.
      
      This turns out to be a false message due to the change which updates
      two super blocks alternately.  The secondary super block now can be
      selected if it's newer than the primary one.
      
      This kills the false warning by suppressing it if another super block
      is not actually broken.
      Signed-off-by: NRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
      ea1a16f7
    • R
      nilfs2: fix list corruption after ifile creation failure · af4e3631
      Ryusuke Konishi 提交于
      If nilfs_attach_checkpoint() gets a memory allocation failure during
      creation of ifile, it will return without removing nilfs_sb_info
      struct from ns_supers list.  When a concurrently mounted snapshot is
      unmounted or another new snapshot is mounted after that, this causes
      kernel oops as below:
      
      > BUG: unable to handle kernel NULL pointer dereference at (null)
      > IP: [<f83662ff>] nilfs_find_sbinfo+0x74/0xa4 [nilfs2]
      > *pde = 00000000
      > Oops: 0000 [#1] SMP
      <snip>
      > Call Trace:
      >  [<f835dc29>] ? nilfs_get_sb+0x165/0x532 [nilfs2]
      >  [<c1173c87>] ? ida_get_new_above+0x16d/0x187
      >  [<c109a7f8>] ? alloc_vfsmnt+0x7e/0x10a
      >  [<c1070790>] ? kstrdup+0x2c/0x40
      >  [<c1089041>] ? vfs_kern_mount+0x96/0x14e
      >  [<c108913d>] ? do_kern_mount+0x32/0xbd
      >  [<c109b331>] ? do_mount+0x642/0x6a1
      >  [<c101a415>] ? do_page_fault+0x0/0x2d1
      >  [<c1099c00>] ? copy_mount_options+0x80/0xe2
      >  [<c10705d8>] ? strndup_user+0x48/0x67
      >  [<c109b3f1>] ? sys_mount+0x61/0x90
      >  [<c10027cc>] ? sysenter_do_call+0x12/0x22
      
      This fixes the problem.
      Signed-off-by: NRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
      Tested-by: NRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
      Cc: stable@kernel.org
      af4e3631
  6. 10 8月, 2010 7 次提交
    • A
      convert nilfs2 to ->evict_inode() · 6fd1e5c9
      Al Viro 提交于
      [folded build fix from sfr]
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      6fd1e5c9
    • A
      simplify checks for I_CLEAR/I_FREEING · a4ffdde6
      Al Viro 提交于
      add I_CLEAR instead of replacing I_FREEING with it.  I_CLEAR is
      equivalent to I_FREEING for almost all code looking at either;
      it's there to keep track of having called clear_inode() exactly
      once per inode lifetime, at some point after having set I_FREEING.
      I_CLEAR and I_FREEING never get set at the same time with the
      current code, so we can switch to setting i_flags to I_FREEING | I_CLEAR
      instead of I_CLEAR without loss of information.  As the result of
      such change, checks become simpler and the amount of code that needs
      to know about I_CLEAR shrinks a lot.
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      a4ffdde6
    • C
      remove inode_setattr · 1025774c
      Christoph Hellwig 提交于
      Replace inode_setattr with opencoded variants of it in all callers.  This
      moves the remaining call to vmtruncate into the filesystem methods where it
      can be replaced with the proper truncate sequence.
      
      In a few cases it was obvious that we would never end up calling vmtruncate
      so it was left out in the opencoded variant:
      
       spufs: explicitly checks for ATTR_SIZE earlier
       btrfs,hugetlbfs,logfs,dlmfs: explicitly clears ATTR_SIZE earlier
       ufs: contains an opencoded simple_seattr + truncate that sets the filesize just above
      
      In addition to that ncpfs called inode_setattr with handcrafted iattrs,
      which allowed to trim down the opencoded variant.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      1025774c
    • C
      get rid of block_write_begin_newtrunc · 155130a4
      Christoph Hellwig 提交于
      Move the call to vmtruncate to get rid of accessive blocks to the callers
      in preparation of the new truncate sequence and rename the non-truncating
      version to block_write_begin.
      
      While we're at it also remove several unused arguments to block_write_begin.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      155130a4
    • C
      introduce __block_write_begin · 6e1db88d
      Christoph Hellwig 提交于
      Split up the block_write_begin implementation - __block_write_begin is a new
      trivial wrapper for block_prepare_write that always takes an already
      allocated page and can be either called from block_write_begin or filesystem
      code that already has a page allocated.  Remove the handling of already
      allocated pages from block_write_begin after switching all callers that
      do it to __block_write_begin.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      6e1db88d
    • C
      clean up write_begin usage for directories in pagecache · f4e420dc
      Christoph Hellwig 提交于
      For filesystem that implement directories in pagecache we call
      block_write_begin with an already allocated page for this code, while the
      normal regular file write path uses the default block_write_begin behaviour.
      
      Get rid of the __foofs_write_begin helper and opencode the normal write_begin
      call in foofs_write_begin, while adding a new foofs_prepare_chunk helper for
      the directory code.  The added benefit is that foofs_prepare_chunk has
      a much saner calling convention.
      
      Note that the interruptible flag passed into block_write_begin is always
      ignored if we already pass in a page (see next patch for details), and
      we never were doing truncations of exessive blocks for this case either so we
      can switch directly to block_write_begin_newtrunc.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      f4e420dc
    • C
      sort out blockdev_direct_IO variants · eafdc7d1
      Christoph Hellwig 提交于
      Move the call to vmtruncate to get rid of accessive blocks to the callers
      in prepearation of the new truncate calling sequence.  This was only done
      for DIO_LOCKING filesystems, so the __blockdev_direct_IO_newtrunc variant
      was not needed anyway.  Get rid of blockdev_direct_IO_no_locking and
      its _newtrunc variant while at it as just opencoding the two additional
      paramters is shorted than the name suffix.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      eafdc7d1
  7. 08 8月, 2010 1 次提交
    • C
      block: unify flags for struct bio and struct request · 7b6d91da
      Christoph Hellwig 提交于
      Remove the current bio flags and reuse the request flags for the bio, too.
      This allows to more easily trace the type of I/O from the filesystem
      down to the block driver.  There were two flags in the bio that were
      missing in the requests:  BIO_RW_UNPLUG and BIO_RW_AHEAD.  Also I've
      renamed two request flags that had a superflous RW in them.
      
      Note that the flags are in bio.h despite having the REQ_ name - as
      blkdev.h includes bio.h that is the only way to go for now.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      Signed-off-by: NJens Axboe <jaxboe@fusionio.com>
      7b6d91da
  8. 25 7月, 2010 2 次提交
  9. 24 7月, 2010 1 次提交
    • R
      nilfs2: simplify nilfs_get_page function · c28e69d9
      Ryusuke Konishi 提交于
      Implementation of nilfs_get_page() is a bit old as below:
      
       - A common read_mapping_page inline function is now available instead
         of its read_cache_page use.
       - wait_on_page_locked() use in the function is eliminable since
         read_cache_page function does the same thing through wait_on_page_read().
       - PageUptodate() check is eliminable for the same reason.
      
      This renews nilfs_get_page() based on these points.
      Signed-off-by: NRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
      c28e69d9
  10. 23 7月, 2010 16 次提交