From mboxrd@z Thu Jan 1 00:00:00 1970 From: Al Viro Subject: [git pull] vfs pile 1 Date: Sun, 6 Sep 2015 03:55:04 +0100 Message-ID: <20150906025504.GH22011@ZenIV.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org To: Linus Torvalds Return-path: Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org In this one: d_move fixes (Eric), UFS fixes (me; locking is mostly sane now, a bunch of bugs in error handling ought to be fixed), switch of sb_writers to percpu rwsem (Oleg), superblock scalability (Josef and Dave), swapon(2) race fix (Hugh). Please, pull from the usual place - git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git for-linus Shortlog: Al Viro (47): ufs: kill more lock_ufs() calls ufs: switch ufs_evict_inode() to trimmed-down variant of ufs_truncate() ufs: free excessive blocks upon ->write_begin() failure/short copy ufs: move truncate_setsize() down into ufs_truncate() ufs: move lock_ufs() down into __ufs_truncate_blocks() ufs: bforget() indirect blocks before freeing them ufs: don't use lock_ufs() for block pointers tree protection ufs: kill lock_ufs() ufs: ufs_trunc_direct() always returns 0 ufs: ufs_trunc_...() has exclusion with everything that might cause allocations ufs: no retries are needed on truncate ufs: move truncate code into inode.c ufs: the offsets ufs_block_to_path() puts into array are not sector_t ufs: beginning of __ufs_truncate_block() massage ufs_trunc_tindirect(): pass the number of blocks to keep ufs_trunc_indirect(): pass the index of the first pointer to free ufs_trunc_dindirect(): pass the number of blocks to keep __ufs_truncate(); find cutoff distances into branches by offsets[] array ufs_trunc_...indirect(): pass the array of indices instead of offsets ufs_trunc_..indirect(): more massage towards unifying unify ufs_trunc_..indirect() __ufs_truncate_blocks(): unify freeing the full branches __ufs_trunc_blocks(): turn the part after switch into a loop ufs_trunc_branch(): never call with offsets != NULL && depth2 == 0 ufs_trunc_branch(): separate the calls with non-NULL offsets ufs: unify the logics for collecting adjacent data blocks to free split ufs_truncate_branch() into full- and partial-branch variants ufs_trunc_branch(): massage towards killing recursion ufs_trunc_branch(): kill recursion free_full_branch(): saner calling conventions move marking inode dirty to the end of __ufs_truncate_blocks() free_full_branch(): don't bother modifying the block we are going to free __ufs_truncate_blocks(): avoid excessive dirtying of indirect blocks ufs_inode_get{frag,block}(): get rid of retries ufs: move calculation of offsets into ufs_getfrag_block() ufs: use the branch depth in ufs_getfrag_block() ufs_inode_get{frag,block}(): consolidate success exits ufs_getfrag_block(): get rid of macro jungles ufs_inode_get{frag,block}(): leave sb_getblk() to caller ufs_inode_getblock(): pass index instead of 'fragment' ufs_inode_getblock(): pass indirect block number and full index ufs_inode_getfrag(): split extending the partial blocks off ufs_inode_getfrag(): pass index instead of 'fragment' ufs_getfrag_block(): turn following indirects into a loop ufs_inode_getblock(): failure to read an indirect block is -EIO ufs_getfrag_block(): tidy up a bit ufs_inode_get{frag,block}(): get rid of 'phys' argument Dave Chinner (4): writeback: plug writeback at a high level inode: convert inode_sb_list_lock to per-sb sync: serialise per-superblock sync operations inode: rename i_wb_list to i_io_list Eric W. Biederman (3): dcache: Handle escaped paths in prepend_path dcache: Reduce the scope of i_lock in d_splice_alias vfs: Test for and handle paths that are unreachable from their mnt_root Hugh Dickins (1): mm: fix potential data race in SyS_swapon Josef Bacik (2): inode: add hlist_fake to avoid the inode hash lock in evict inode: don't softlockup when evicting inodes Oleg Nesterov (8): introduce __sb_writers_{acquired,release}() helpers fix the broken lockdep logic in __sb_start_write() document rwsem_release() in sb_wait_write() percpu-rwsem: introduce percpu_down_read_trylock() percpu-rwsem: introduce percpu_rwsem_release() and percpu_rwsem_acquire() percpu-rwsem: kill CONFIG_PERCPU_RWSEM shift percpu_counter_destroy() into destroy_super_work() change sb_writers to use percpu_rw_semaphore Diffstat: arch/Kconfig | 1 - fs/block_dev.c | 12 +- fs/btrfs/transaction.c | 8 +- fs/dcache.c | 14 +- fs/drop_caches.c | 10 +- fs/fs-writeback.c | 72 +-- fs/inode.c | 50 ++- fs/internal.h | 3 +- fs/namei.c | 27 +- fs/notify/inode_mark.c | 20 +- fs/quota/dquot.c | 16 +- fs/super.c | 175 ++++---- fs/ufs/Makefile | 2 +- fs/ufs/balloc.c | 4 + fs/ufs/inode.c | 948 ++++++++++++++++++++++++++------------- fs/ufs/super.c | 36 +- fs/ufs/truncate.c | 523 --------------------- fs/ufs/ufs.h | 13 +- fs/xfs/xfs_aops.c | 6 +- include/linux/fs.h | 33 +- include/linux/fsnotify_backend.h | 4 +- include/linux/list.h | 5 + include/linux/percpu-rwsem.h | 20 + init/Kconfig | 1 - kernel/locking/Makefile | 3 +- kernel/locking/percpu-rwsem.c | 13 + lib/Kconfig | 3 - mm/backing-dev.c | 8 +- mm/swapfile.c | 25 +- 29 files changed, 936 insertions(+), 1119 deletions(-) delete mode 100644 fs/ufs/truncate.c