Hi Linus, Please pull this branch with changes for xfs for 6.9-rc1. The major change involves expansion of online repair functionality. A brief summary of remaining changes are provided in the section "New code for 6.9" below. I did a test-merge with the main upstream branch as of a few minutes ago and noticed a trivial merge conflict. The following diff will resolve the resulting merge conflict. diff --cc fs/xfs/xfs_buf.c index 01b41fabbe3c,7fc26e64368d..71f3dfae3357 --- a/fs/xfs/xfs_buf.c +++ b/fs/xfs/xfs_buf.c @@@ -1951,9 -2030,8 +2030,9 @@@ xfs_free_buftarg fs_put_dax(btp->bt_daxdev, btp->bt_mount); /* the main block device is closed by kill_block_super */ if (btp->bt_bdev != btp->bt_mount->m_super->s_bdev) - bdev_release(btp->bt_bdev_handle); + fput(btp->bt_bdev_file); + - kmem_free(btp); + kfree(btp); } int @@@ -1994,20 -2095,20 +2096,20 @@@ out_destroy_lru struct xfs_buftarg * xfs_alloc_buftarg( struct xfs_mount *mp, - struct bdev_handle *bdev_handle) + struct file *bdev_file) { - xfs_buftarg_t *btp; + struct xfs_buftarg *btp; const struct dax_holder_operations *ops = NULL; #if defined(CONFIG_FS_DAX) && defined(CONFIG_MEMORY_FAILURE) ops = &xfs_dax_holder_operations; #endif - btp = kmem_zalloc(sizeof(*btp), KM_NOFS); + btp = kzalloc(sizeof(*btp), GFP_KERNEL | __GFP_NOFAIL); btp->bt_mount = mp; - btp->bt_bdev_handle = bdev_handle; - btp->bt_dev = bdev_handle->bdev->bd_dev; - btp->bt_bdev = bdev_handle->bdev; + btp->bt_bdev_file = bdev_file; + btp->bt_bdev = file_bdev(bdev_file); + btp->bt_dev = btp->bt_bdev->bd_dev; btp->bt_daxdev = fs_dax_get_by_bdev(btp->bt_bdev, &btp->bt_dax_part_off, mp, ops); diff --cc fs/xfs/xfs_buf.h index 304e858d04fb,73249abca968..b1580644501f --- a/fs/xfs/xfs_buf.h +++ b/fs/xfs/xfs_buf.h @@@ -96,11 -104,12 +104,12 @@@ void xfs_buf_cache_destroy(struct xfs_b * The latter is derived from the underlying device, and controls direct IO * alignment constraints. */ - typedef struct xfs_buftarg { + struct xfs_buftarg { dev_t bt_dev; - struct bdev_handle *bt_bdev_handle; + struct file *bt_bdev_file; struct block_device *bt_bdev; struct dax_device *bt_daxdev; + struct file *bt_file; u64 bt_dax_part_off; struct xfs_mount *bt_mount; unsigned int bt_meta_sectorsize; Please let me know if you encounter any problems. The following changes since commit 841c35169323cd833294798e58b9bf63fa4fa1de: Linux 6.8-rc4 (2024-02-11 12:18:13 -0800) are available in the Git repository at: https://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git tags/xfs-6.9-merge-8 for you to fetch changes up to 75bcffbb9e7563259b7aed0fa77459d6a3a35627: xfs: shrink failure needs to hold AGI buffer (2024-03-07 14:59:05 +0530) ---------------------------------------------------------------- New code for 6.9: * Online Repair; ** New ondisk structures being repaired. - Inode's mode field by trying to obtain file type value from the a directory entry. - Quota counters. - Link counts of inodes. - FS summary counters. - rmap btrees. Support for in-memory btrees has been added to support repair of rmap btrees. ** Misc changes - Report corruption of metadata to the health tracking subsystem. - Enable indirect health reporting when resources are scarce. - Reduce memory usage while reparing refcount btree. - Extend "Bmap update" intent item to support atomic extent swapping on the realtime device. - Extend "Bmap update" intent item to support extended attribute fork and unwritten extents. ** Code cleanups - Bmap log intent. - Btree block pointer checking. - Btree readahead. - Buffer target. - Symbolic link code. * Remove mrlock wrapper around the rwsem. * Convert all the GFP_NOFS flag usages to use the scoped memalloc_nofs_save() API instead of direct calls with the GFP_NOFS. * Refactor and simplify xfile abstraction. Lower level APIs in shmem.c are required to be exported in order to achieve this. * Skip checking alignment constraints for inode chunk allocations when block size is larger than inode chunk size. * Do not submit delwri buffers collected during log recovery when an error has been encountered. * Fix SEEK_HOLE/DATA for file regions which have active COW extents. * Fix lock order inversion when executing error handling path during shrinking a filesystem. * Remove duplicate ifdefs. Signed-off-by: Chandan Babu R <chandanbabu@xxxxxxxxxx> ---------------------------------------------------------------- Akira Yokosawa (2): kernel-doc: Add unary operator * to $type_param_ref mm/shmem.c: Use new form of *@param in kernel-doc Chandan Babu R (18): Merge tag 'repair-inode-mode-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'repair-quotacheck-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'scrub-nlinks-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'corruption-health-reports-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'indirect-health-reporting-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'repair-fscounters-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'btree-geometry-in-ops-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'btree-remove-btnum-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'btree-check-cleanups-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'btree-readahead-cleanups-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'buftarg-cleanups-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'in-memory-btrees-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'repair-rmap-btree-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'repair-refcount-scalability-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'bmap-intent-cleanups-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'realtime-bmap-intents-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'expand-bmap-intent-usage_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Merge tag 'symlink-cleanups-6.9_2024-02-23' of https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux into xfs-6.9-mergeC Christoph Hellwig (70): xfs: use kvfree for buf in xfs_ioc_getbmap mm: move mapping_set_update out of <linux/swap.h> shmem: move shmem_mapping out of line shmem: set a_ops earlier in shmem_symlink shmem: move the shmem_mapping assert into shmem_get_folio_gfp shmem: export shmem_get_folio shmem: export shmem_kernel_file_setup shmem: document how to "persist" data when using shmem_*file_setup xfs: use VM_NORESERVE in xfile_create xfs: shmem_file_setup can't return NULL xfs: use shmem_kernel_file_setup in xfile_create xfs: don't modify file and inode flags for shmem files xfs: remove xfile_stat xfs: remove the xfile_pread/pwrite APIs xfs: don't try to handle non-update pages in xfile_obj_load xfs: don't allow highmem pages in xfile mappings xfs: use shmem_get_folio in xfile_obj_store xfs: use shmem_get_folio in in xfile_load xfs: remove xfarray_sortinfo.page_kaddr xfs: fix a comment in xfarray.c xfs: remove bc_ino.flags xfs: consolidate the xfs_alloc_lookup_* helpers xfs: turn the allocbt cursor active field into a btree flag xfs: move the btree stats offset into struct btree_ops xfs: split out a btree type from the btree ops geometry flags xfs: split the per-btree union in struct xfs_btree_cur xfs: move comment about two 2 keys per pointer in the rmap btree xfs: add a xfs_btree_init_ptr_from_cur xfs: don't override bc_ops for staging btrees xfs: fold xfs_allocbt_init_common into xfs_allocbt_init_cursor xfs: remove xfs_allocbt_stage_cursor xfs: fold xfs_inobt_init_common into xfs_inobt_init_cursor xfs: remove xfs_inobt_stage_cursor xfs: fold xfs_refcountbt_init_common into xfs_refcountbt_init_cursor xfs: remove xfs_refcountbt_stage_cursor xfs: fold xfs_rmapbt_init_common into xfs_rmapbt_init_cursor xfs: remove xfs_rmapbt_stage_cursor xfs: make full use of xfs_btree_stage_ifakeroot in xfs_bmbt_stage_cursor xfs: fold xfs_bmbt_init_common into xfs_bmbt_init_cursor xfs: remove xfs_bmbt_stage_cursor xfs: split the agf_roots and agf_levels arrays xfs: add a name field to struct xfs_btree_ops xfs: add a sick_mask to struct xfs_btree_ops xfs: refactor the btree cursor allocation logic in xchk_ag_btcur_init xfs: split xfs_allocbt_init_cursor xfs: remove xfs_inobt_cur xfs: remove the btnum argument to xfs_inobt_count_blocks xfs: remove the which variable in xchk_iallocbt xfs: split xfs_inobt_insert_sprec xfs: split xfs_inobt_init_cursor xfs: pass a 'bool is_finobt' to xfs_inobt_insert xfs: remove xfs_btnum_t xfs: simplify xfs_btree_check_sblock_siblings xfs: simplify xfs_btree_check_lblock_siblings xfs: open code xfs_btree_check_lptr in xfs_bmap_btree_to_extents xfs: consolidate btree ptr checking xfs: misc cleanups for __xfs_btree_check_sblock xfs: remove the crc variable in __xfs_btree_check_lblock xfs: tighten up validation of root block in inode forks xfs: consolidate btree block verification xfs: rename btree helpers that depends on the block number representation xfs: factor out a __xfs_btree_check_lblock_hdr helper xfs: remove xfs_btree_reada_bufl xfs: remove xfs_btree_reada_bufs xfs: move and rename xfs_btree_read_bufl xfs: split xfs_buf_rele for cached vs uncached buffers xfs: remove the xfs_buftarg_t typedef xfs: remove xfs_setsize_buftarg_early xfs: move setting bt_logical_sectorsize out of xfs_setsize_buftarg xfs: add a xfs_btree_ptrs_equal helper Darrick J. Wong (88): xfs: disable sparse inode chunk alignment check when there is no alignment xfs: add file_{get,put}_folio xfs: convert xfarray_pagesort to deal with large folios xfs: remove xfile_{get,put}_page xfs: speed up xfs_iwalk_adjust_start a little bit xfs: implement live inode scan for scrub xfs: allow scrub to hook metadata updates in other writers xfs: stagger the starting AG of scrub iscans to reduce contention xfs: cache a bunch of inodes for repair scans xfs: iscan batching should handle unallocated inodes too xfs: create a static name for the dot entry too xfs: create a predicate to determine if two xfs_names are the same xfs: create a macro for decoding ftypes in tracepoints xfs: report the health of quota counts xfs: repair file modes by scanning for a dirent pointing to us xfs: create a xchk_trans_alloc_empty helper for scrub xfs: create a helper to count per-device inode block usage xfs: create a sparse load xfarray function xfs: implement live quotacheck inode scan xfs: track quota updates during live quotacheck xfs: repair cannot update the summary counters when logging quota flags xfs: repair dquots based on live quotacheck results xfs: report health of inode link counts xfs: teach scrub to check file nlinks xfs: track directory entry updates during live nlinks fsck xfs: teach repair to fix file nlinks xfs: separate the marking of sick and checked metadata xfs: report fs corruption errors to the health tracking system xfs: report ag header corruption errors to the health tracking system xfs: report block map corruption errors to the health tracking system xfs: report btree block corruption errors to the health system xfs: report dir/attr block corruption errors to the health system xfs: report symlink block corruption errors to the health system xfs: report inode corruption errors to the health system xfs: report quota block corruption errors to the health system xfs: report realtime metadata corruption errors to the health system xfs: report XFS_IS_CORRUPT errors to the health system xfs: add secondary and indirect classes to the health tracking system xfs: remember sick inodes that get inactivated xfs: update health status if we get a clean bill of health xfs: repair summary counters xfs: consolidate btree block freeing tracepoints xfs: consolidate btree block allocation tracepoints xfs: set the btree cursor bc_ops in xfs_btree_alloc_cursor xfs: drop XFS_BTREE_CRC_BLOCKS xfs: fix imprecise logic in xchk_btree_check_block_owner xfs: encode the btree geometry flags in the btree ops structure xfs: extern some btree ops structures xfs: initialize btree blocks using btree_ops structure xfs: rename btree block/buffer init functions xfs: btree convert xfs_btree_init_block to xfs_btree_init_buf calls xfs: remove the unnecessary daddr paramter to _init_block xfs: set btree block buffer ops in _init_buf xfs: move lru refs to the btree ops structure xfs: factor out a xfs_btree_owner helper xfs: factor out a btree block owner check xfs: store the btree pointer length in struct xfs_btree_ops xfs: create predicate to determine if cursor is at inode root level xfs: make staging file forks explicit xfs: teach buftargs to maintain their own buffer hashtable xfs: support in-memory buffer cache targets xfs: support in-memory btrees xfs: create a helper to decide if a file mapping targets the rt volume xfs: launder in-memory btree buffers before transaction commit xfs: create agblock bitmap helper to count the number of set regions xfs: repair the rmapbt xfs: create a shadow rmap btree during rmap repair xfs: define an in-memory btree for storing refcount bag info during repairs xfs: hook live rmap operations during a repair operation xfs: create refcount bag structure for btree repairs xfs: port refcount repair to the new refcount bag structure xfs: split tracepoint classes for deferred items xfs: clean up bmap log intent item tracepoint callsites xfs: remove xfs_trans_set_bmap_flags xfs: add a bi_entry helper xfs: reuse xfs_bmap_update_cancel_item xfs: move xfs_bmap_defer_add to xfs_bmap_item.c xfs: fix xfs_bunmapi to allow unmapping of partial rt extents xfs: add a xattr_entry helper xfs: add a realtime flag to the bmap update log redo items xfs: support recovering bmap intent items targetting realtime extents xfs: support deferred bmap updates on the attr fork xfs: xfs_bmap_finish_one should map unwritten extents properly xfs: move xfs_symlink_remote.c declarations to xfs_symlink_remote.h xfs: move remote symlink target read function to libxfs xfs: move symlink target write function to libxfs xfs: fix log recovery erroring out on refcount recovery failure xfs: fix scrub stats file permissions Dave Chinner (18): xfs: convert kmem_zalloc() to kzalloc() xfs: convert kmem_alloc() to kmalloc() xfs: move kmem_to_page() xfs: convert kmem_free() for kvmalloc users to kvfree() xfs: convert remaining kmem_free() to kfree() xfs: use an empty transaction for fstrim xfs: use __GFP_NOLOCKDEP instead of GFP_NOFS xfs: use GFP_KERNEL in pure transaction contexts xfs: place intent recovery under NOFS allocation context xfs: place the CIL under nofs allocation context xfs: clean up remaining GFP_NOFS users xfs: use xfs_defer_alloc a bit more xfs: use kvfree() in xfs_ioc_attr_list() xfs: use kvfree in xfs_ioc_getfsmap() xfs: fix SEEK_HOLE/DATA for regions with active COW extents xfs: xfs_btree_bload_prep_block() should use __GFP_NOFAIL xfs: use kvfree() in xlog_cil_free_logvec() xfs: shrink failure needs to hold AGI buffer Long Li (1): xfs: ensure submit buffers on LSN boundaries in error handlers Matthew Wilcox (Oracle) (3): locking: Add rwsem_assert_held() and rwsem_assert_held_write() xfs: Replace xfs_isilocked with xfs_assert_ilocked xfs: Remove mrlock wrapper Shrikanth Hegde (1): xfs: remove duplicate ifdefs .../filesystems/xfs/xfs-online-fsck-design.rst | 30 +- fs/xfs/Kconfig | 13 + fs/xfs/Makefile | 15 +- fs/xfs/kmem.c | 30 - fs/xfs/kmem.h | 83 - fs/xfs/libxfs/xfs_ag.c | 79 +- fs/xfs/libxfs/xfs_ag.h | 18 +- fs/xfs/libxfs/xfs_alloc.c | 258 +-- fs/xfs/libxfs/xfs_alloc_btree.c | 191 ++- fs/xfs/libxfs/xfs_alloc_btree.h | 10 +- fs/xfs/libxfs/xfs_attr.c | 5 +- fs/xfs/libxfs/xfs_attr_leaf.c | 22 +- fs/xfs/libxfs/xfs_attr_remote.c | 37 +- fs/xfs/libxfs/xfs_bmap.c | 365 +++-- fs/xfs/libxfs/xfs_bmap.h | 19 +- fs/xfs/libxfs/xfs_bmap_btree.c | 152 +- fs/xfs/libxfs/xfs_bmap_btree.h | 5 +- fs/xfs/libxfs/xfs_btree.c | 1098 ++++++++----- fs/xfs/libxfs/xfs_btree.h | 274 ++-- fs/xfs/libxfs/xfs_btree_mem.c | 347 ++++ fs/xfs/libxfs/xfs_btree_mem.h | 75 + fs/xfs/libxfs/xfs_btree_staging.c | 133 +- fs/xfs/libxfs/xfs_btree_staging.h | 10 +- fs/xfs/libxfs/xfs_da_btree.c | 59 +- fs/xfs/libxfs/xfs_da_format.h | 11 + fs/xfs/libxfs/xfs_defer.c | 25 +- fs/xfs/libxfs/xfs_dir2.c | 59 +- fs/xfs/libxfs/xfs_dir2.h | 13 + fs/xfs/libxfs/xfs_dir2_block.c | 8 +- fs/xfs/libxfs/xfs_dir2_data.c | 3 + fs/xfs/libxfs/xfs_dir2_leaf.c | 3 + fs/xfs/libxfs/xfs_dir2_node.c | 7 + fs/xfs/libxfs/xfs_dir2_sf.c | 16 +- fs/xfs/libxfs/xfs_format.h | 21 +- fs/xfs/libxfs/xfs_fs.h | 8 +- fs/xfs/libxfs/xfs_health.h | 95 +- fs/xfs/libxfs/xfs_ialloc.c | 240 ++- fs/xfs/libxfs/xfs_ialloc_btree.c | 159 +- fs/xfs/libxfs/xfs_ialloc_btree.h | 11 +- fs/xfs/libxfs/xfs_iext_tree.c | 26 +- fs/xfs/libxfs/xfs_inode_buf.c | 12 +- fs/xfs/libxfs/xfs_inode_fork.c | 49 +- fs/xfs/libxfs/xfs_inode_fork.h | 1 + fs/xfs/libxfs/xfs_log_format.h | 4 +- fs/xfs/libxfs/xfs_refcount.c | 69 +- fs/xfs/libxfs/xfs_refcount_btree.c | 80 +- fs/xfs/libxfs/xfs_refcount_btree.h | 2 - fs/xfs/libxfs/xfs_rmap.c | 284 +++- fs/xfs/libxfs/xfs_rmap.h | 31 +- fs/xfs/libxfs/xfs_rmap_btree.c | 239 ++- fs/xfs/libxfs/xfs_rmap_btree.h | 8 +- fs/xfs/libxfs/xfs_rtbitmap.c | 11 +- fs/xfs/libxfs/xfs_sb.c | 2 + fs/xfs/libxfs/xfs_shared.h | 67 +- fs/xfs/libxfs/xfs_symlink_remote.c | 155 +- fs/xfs/libxfs/xfs_symlink_remote.h | 26 + fs/xfs/libxfs/xfs_trans_inode.c | 6 +- fs/xfs/libxfs/xfs_types.h | 26 +- fs/xfs/mrlock.h | 78 - fs/xfs/scrub/agb_bitmap.h | 5 + fs/xfs/scrub/agheader.c | 12 +- fs/xfs/scrub/agheader_repair.c | 47 +- fs/xfs/scrub/alloc_repair.c | 27 +- fs/xfs/scrub/bitmap.c | 14 + fs/xfs/scrub/bitmap.h | 2 + fs/xfs/scrub/bmap.c | 2 +- fs/xfs/scrub/bmap_repair.c | 8 +- fs/xfs/scrub/btree.c | 58 +- fs/xfs/scrub/common.c | 133 +- fs/xfs/scrub/common.h | 13 + fs/xfs/scrub/cow_repair.c | 2 +- fs/xfs/scrub/dir.c | 4 +- fs/xfs/scrub/fscounters.c | 29 +- fs/xfs/scrub/fscounters.h | 20 + fs/xfs/scrub/fscounters_repair.c | 72 + fs/xfs/scrub/health.c | 140 +- fs/xfs/scrub/health.h | 5 +- fs/xfs/scrub/ialloc.c | 20 +- fs/xfs/scrub/ialloc_repair.c | 10 +- fs/xfs/scrub/inode_repair.c | 237 ++- fs/xfs/scrub/iscan.c | 767 +++++++++ fs/xfs/scrub/iscan.h | 84 + fs/xfs/scrub/newbt.c | 14 +- fs/xfs/scrub/newbt.h | 7 + fs/xfs/scrub/nlinks.c | 930 +++++++++++ fs/xfs/scrub/nlinks.h | 102 ++ fs/xfs/scrub/nlinks_repair.c | 223 +++ fs/xfs/scrub/quotacheck.c | 867 ++++++++++ fs/xfs/scrub/quotacheck.h | 76 + fs/xfs/scrub/quotacheck_repair.c | 261 +++ fs/xfs/scrub/rcbag.c | 307 ++++ fs/xfs/scrub/rcbag.h | 28 + fs/xfs/scrub/rcbag_btree.c | 370 +++++ fs/xfs/scrub/rcbag_btree.h | 81 + fs/xfs/scrub/readdir.c | 4 +- fs/xfs/scrub/reap.c | 2 +- fs/xfs/scrub/refcount.c | 12 + fs/xfs/scrub/refcount_repair.c | 177 +- fs/xfs/scrub/repair.c | 120 +- fs/xfs/scrub/repair.h | 23 +- fs/xfs/scrub/rmap.c | 26 +- fs/xfs/scrub/rmap_repair.c | 1697 ++++++++++++++++++++ fs/xfs/scrub/rtsummary.c | 6 +- fs/xfs/scrub/scrub.c | 37 +- fs/xfs/scrub/scrub.h | 18 +- fs/xfs/scrub/stats.c | 6 +- fs/xfs/scrub/symlink.c | 3 +- fs/xfs/scrub/trace.c | 8 +- fs/xfs/scrub/trace.h | 637 +++++++- fs/xfs/scrub/xfarray.c | 234 ++- fs/xfs/scrub/xfarray.h | 30 +- fs/xfs/scrub/xfile.c | 345 ++-- fs/xfs/scrub/xfile.h | 62 +- fs/xfs/xfs_acl.c | 4 +- fs/xfs/xfs_attr_inactive.c | 4 + fs/xfs/xfs_attr_item.c | 25 +- fs/xfs/xfs_attr_list.c | 26 +- fs/xfs/xfs_bmap_item.c | 119 +- fs/xfs/xfs_bmap_item.h | 4 + fs/xfs/xfs_bmap_util.c | 20 +- fs/xfs/xfs_buf.c | 320 ++-- fs/xfs/xfs_buf.h | 21 +- fs/xfs/xfs_buf_item.c | 8 +- fs/xfs/xfs_buf_item_recover.c | 8 +- fs/xfs/xfs_buf_mem.c | 270 ++++ fs/xfs/xfs_buf_mem.h | 34 + fs/xfs/xfs_dir2_readdir.c | 8 +- fs/xfs/xfs_discard.c | 19 +- fs/xfs/xfs_dquot.c | 36 +- fs/xfs/xfs_error.c | 8 +- fs/xfs/xfs_extent_busy.c | 5 +- fs/xfs/xfs_extfree_item.c | 8 +- fs/xfs/xfs_file.c | 4 +- fs/xfs/xfs_filestream.c | 6 +- fs/xfs/xfs_fsmap.c | 4 +- fs/xfs/xfs_health.c | 202 ++- fs/xfs/xfs_hooks.c | 52 + fs/xfs/xfs_hooks.h | 65 + fs/xfs/xfs_icache.c | 14 +- fs/xfs/xfs_icreate_item.c | 2 +- fs/xfs/xfs_inode.c | 274 +++- fs/xfs/xfs_inode.h | 37 +- fs/xfs/xfs_inode_item.c | 6 +- fs/xfs/xfs_inode_item_recover.c | 5 +- fs/xfs/xfs_ioctl.c | 8 +- fs/xfs/xfs_iomap.c | 19 +- fs/xfs/xfs_iops.c | 9 +- fs/xfs/xfs_itable.c | 12 +- fs/xfs/xfs_iwalk.c | 41 +- fs/xfs/xfs_linux.h | 17 +- fs/xfs/xfs_log.c | 34 +- fs/xfs/xfs_log_cil.c | 31 +- fs/xfs/xfs_log_recover.c | 102 +- fs/xfs/xfs_mount.c | 2 +- fs/xfs/xfs_mount.h | 12 +- fs/xfs/xfs_mru_cache.c | 17 +- fs/xfs/xfs_qm.c | 59 +- fs/xfs/xfs_qm.h | 16 + fs/xfs/xfs_qm_bhv.c | 1 + fs/xfs/xfs_quota.h | 46 + fs/xfs/xfs_refcount_item.c | 12 +- fs/xfs/xfs_reflink.c | 16 +- fs/xfs/xfs_rmap_item.c | 11 +- fs/xfs/xfs_rtalloc.c | 18 +- fs/xfs/xfs_stats.c | 4 +- fs/xfs/xfs_stats.h | 2 + fs/xfs/xfs_super.c | 20 +- fs/xfs/xfs_symlink.c | 158 +- fs/xfs/xfs_symlink.h | 1 - fs/xfs/xfs_sysfs.c | 4 - fs/xfs/xfs_trace.c | 3 + fs/xfs/xfs_trace.h | 607 +++++-- fs/xfs/xfs_trans.c | 2 +- fs/xfs/xfs_trans.h | 1 + fs/xfs/xfs_trans_ail.c | 7 +- fs/xfs/xfs_trans_buf.c | 42 + fs/xfs/xfs_trans_dquot.c | 171 +- include/linux/rwbase_rt.h | 9 +- include/linux/rwsem.h | 46 +- include/linux/shmem_fs.h | 6 +- include/linux/swap.h | 10 - mm/filemap.c | 9 + mm/internal.h | 4 + mm/shmem.c | 42 +- mm/workingset.c | 1 + scripts/kernel-doc | 2 +- 186 files changed, 13274 insertions(+), 3585 deletions(-) delete mode 100644 fs/xfs/kmem.c delete mode 100644 fs/xfs/kmem.h create mode 100644 fs/xfs/libxfs/xfs_btree_mem.c create mode 100644 fs/xfs/libxfs/xfs_btree_mem.h create mode 100644 fs/xfs/libxfs/xfs_symlink_remote.h delete mode 100644 fs/xfs/mrlock.h create mode 100644 fs/xfs/scrub/fscounters.h create mode 100644 fs/xfs/scrub/fscounters_repair.c create mode 100644 fs/xfs/scrub/iscan.c create mode 100644 fs/xfs/scrub/iscan.h create mode 100644 fs/xfs/scrub/nlinks.c create mode 100644 fs/xfs/scrub/nlinks.h create mode 100644 fs/xfs/scrub/nlinks_repair.c create mode 100644 fs/xfs/scrub/quotacheck.c create mode 100644 fs/xfs/scrub/quotacheck.h create mode 100644 fs/xfs/scrub/quotacheck_repair.c create mode 100644 fs/xfs/scrub/rcbag.c create mode 100644 fs/xfs/scrub/rcbag.h create mode 100644 fs/xfs/scrub/rcbag_btree.c create mode 100644 fs/xfs/scrub/rcbag_btree.h create mode 100644 fs/xfs/scrub/rmap_repair.c create mode 100644 fs/xfs/xfs_buf_mem.c create mode 100644 fs/xfs/xfs_buf_mem.h create mode 100644 fs/xfs/xfs_hooks.c create mode 100644 fs/xfs/xfs_hooks.h