linux-sg2042/fs/xfs
Dave Chinner c9fbd7bbc2 xfs: clear sb->s_fs_info on mount failure
We recently had an oops reported on a 4.14 kernel in
xfs_reclaim_inodes_count() where sb->s_fs_info pointed to garbage
and so the m_perag_tree lookup walked into lala land.

Essentially, the machine was under memory pressure when the mount
was being run, xfs_fs_fill_super() failed after allocating the
xfs_mount and attaching it to sb->s_fs_info. It then cleaned up and
freed the xfs_mount, but the sb->s_fs_info field still pointed to
the freed memory. Hence when the superblock shrinker then ran
it fell off the bad pointer.

With the superblock shrinker problem fixed at teh VFS level, this
stale s_fs_info pointer is still a problem - we use it
unconditionally in ->put_super when the superblock is being torn
down, and hence we can still trip over it after a ->fill_super
call failure. Hence we need to clear s_fs_info if
xfs-fs_fill_super() fails, and we need to check if it's valid in
the places it can potentially be dereferenced after a ->fill_super
failure.

Signed-Off-By: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
2018-05-15 17:57:05 -07:00
..
libxfs xfs: factor out nodiscard helpers 2018-05-15 17:57:05 -07:00
scrub xfs: refactor scrub transaction allocation function 2018-05-15 17:57:05 -07:00
Kconfig fs/*/Kconfig: drop links to 404-compliant http://acl.bestbits.at 2018-01-01 12:45:37 -07:00
Makefile xfs: use a b+tree for the in-core extent list 2017-11-06 11:53:41 -08:00
kmem.c xfs: fall back to vmalloc when allocation log vector buffers 2018-03-11 20:27:55 -07:00
kmem.h xfs: fall back to vmalloc when allocation log vector buffers 2018-03-11 20:27:55 -07:00
mrlock.h
xfs.h xfs: always define STATIC to static noinline 2017-11-06 11:53:58 -08:00
xfs_acl.c xfs: don't change inode mode if ACL update fails 2017-10-11 10:21:06 -07:00
xfs_acl.h xfs: Don't clear SGID when inheriting ACLs 2017-06-27 18:23:21 -07:00
xfs_aops.c iomap: add a swapfile activation function 2018-05-15 17:57:05 -07:00
xfs_aops.h xfs, dax: introduce xfs_dax_aops 2018-03-30 11:34:55 -07:00
xfs_attr.h xfs: scrub extended attributes 2017-10-26 15:38:26 -07:00
xfs_attr_inactive.c xfs: fail if xattr inactivation hits a hole 2017-10-26 15:38:22 -07:00
xfs_attr_list.c xfs: remove u_int* type usage 2017-11-09 15:50:29 -08:00
xfs_bmap_item.c xfs: log item flags are racy 2018-05-10 08:56:41 -07:00
xfs_bmap_item.h xfs: log recovery should replay deferred ops in order 2017-11-27 09:34:08 -08:00
xfs_bmap_util.c xfs: factor out nodiscard helpers 2018-05-15 17:57:05 -07:00
xfs_bmap_util.h xfs: simplify the xfs_getbmap interface 2017-10-26 15:38:20 -07:00
xfs_buf.c xfs: don't retry xfs_buf_find on XBF_TRYLOCK failure 2018-05-09 10:04:00 -07:00
xfs_buf.h xfs: make xfs_buf_incore out of line 2018-05-09 10:04:00 -07:00
xfs_buf_item.c xfs: get rid of the log item descriptor 2018-05-10 08:56:46 -07:00
xfs_buf_item.h Use list_head infra-structure for buffer's log items list 2018-01-29 07:27:22 -08:00
xfs_dir2_readdir.c xfs: directory scrubber must walk through data block to offset 2018-01-17 21:00:46 -08:00
xfs_discard.c Force log to disk before reading the AGF during a fstrim 2018-04-10 22:39:04 -07:00
xfs_discard.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
xfs_dquot.c xfs: refactor dquot iteration 2018-05-15 17:56:59 -07:00
xfs_dquot.h xfs: refactor dquot iteration 2018-05-15 17:56:59 -07:00
xfs_dquot_item.c xfs: don't spray logs when dquot flush/purge fail 2018-05-10 08:56:47 -07:00
xfs_dquot_item.h
xfs_error.c xfs: refactor inode buffer verifier error logging 2018-03-23 18:05:07 -07:00
xfs_error.h xfs: refactor inode buffer verifier error logging 2018-03-23 18:05:07 -07:00
xfs_export.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2018-04-05 11:56:35 -07:00
xfs_export.h
xfs_extent_busy.c xfs: merge _xfs_log_force and xfs_log_force 2018-03-14 11:12:52 -07:00
xfs_extent_busy.h xfs: improve handling of busy extents in the low-level allocator 2017-02-09 10:50:25 -08:00
xfs_extfree_item.c xfs: add bmapi nodiscard flag 2018-05-10 08:56:46 -07:00
xfs_extfree_item.h xfs: refactor redo intent item processing 2016-08-03 11:23:49 +10:00
xfs_file.c iomap: iomap_dio_rw() handles all sync writes 2018-05-09 10:04:01 -07:00
xfs_filestream.c xfs: non-scrub - remove unused function parameters 2018-04-09 10:23:42 -07:00
xfs_filestream.h
xfs_fsmap.c xfs: move two more RT specific functions into CONFIG_XFS_RT 2017-10-16 12:26:50 -07:00
xfs_fsmap.h xfs: implement the GETFSMAP ioctl 2017-04-03 15:18:17 -07:00
xfs_fsops.c xfs: convert XFS_AGFL_SIZE to a helper function 2018-03-11 20:27:56 -07:00
xfs_fsops.h xfs: hoist xfs_fs_geometry to libxfs 2018-01-08 10:54:48 -08:00
xfs_globals.c xfs: add mount delay debug option 2018-05-15 17:57:05 -07:00
xfs_icache.c xfs: halt auto-reclamation activities while rebuilding rmap 2018-05-15 17:57:05 -07:00
xfs_icache.h xfs: halt auto-reclamation activities while rebuilding rmap 2018-05-15 17:57:05 -07:00
xfs_icreate_item.c xfs: get rid of the log item descriptor 2018-05-10 08:56:46 -07:00
xfs_icreate_item.h
xfs_inode.c xfs: factor out nodiscard helpers 2018-05-15 17:57:05 -07:00
xfs_inode.h xfs: factor out nodiscard helpers 2018-05-15 17:57:05 -07:00
xfs_inode_item.c xfs: log item flags are racy 2018-05-10 08:56:41 -07:00
xfs_inode_item.h xfs: remove inode log format typedef 2017-11-01 15:03:16 -07:00
xfs_ioctl.c xfs: refactor the geometry structure filling function 2018-01-08 10:54:48 -08:00
xfs_ioctl.h xfs: remove u_int* type usage 2017-11-09 15:50:29 -08:00
xfs_ioctl32.c xfs: refactor the geometry structure filling function 2018-01-08 10:54:48 -08:00
xfs_ioctl32.h xfs: remove double-underscore integer types 2017-06-19 14:11:33 -07:00
xfs_iomap.c xfs: split out dqget for inodes from regular dqget 2018-05-10 08:56:48 -07:00
xfs_iomap.h xfs: update i_size after unwritten conversion in dio completion 2017-09-26 10:55:19 -07:00
xfs_iops.c xfs: remove unnecessary xfs_qm_dqattach parameter 2018-05-10 08:56:47 -07:00
xfs_iops.h xfs: Propagate dentry down to inode_change_ok() 2016-09-22 10:56:19 +02:00
xfs_itable.c xfs: remove if_rdev 2017-10-26 15:38:27 -07:00
xfs_itable.h xfs: create inode pointer verifiers 2017-10-26 15:38:23 -07:00
xfs_linux.h xfs: use %px for data pointers when debugging 2018-01-12 14:09:08 -08:00
xfs_log.c xfs: get rid of the log item descriptor 2018-05-10 08:56:46 -07:00
xfs_log.h xfs: non-scrub - remove unused function parameters 2018-04-09 10:23:42 -07:00
xfs_log_cil.c xfs: get rid of the log item descriptor 2018-05-10 08:56:46 -07:00
xfs_log_priv.h locking/atomics: COCCINELLE/treewide: Convert trivial ACCESS_ONCE() patterns to READ_ONCE()/WRITE_ONCE() 2017-10-25 11:01:08 +02:00
xfs_log_recover.c xfs: remove unused flags arg from xfs_dquot_verify 2018-05-09 10:04:01 -07:00
xfs_message.c xfs: define bug_on_assert debug mode sysfs tunable 2017-06-19 08:59:10 -07:00
xfs_message.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
xfs_mount.c xfs: halt auto-reclamation activities while rebuilding rmap 2018-05-15 17:57:05 -07:00
xfs_mount.h xfs: detect agfl count corruption and reset agfl 2018-03-23 18:05:06 -07:00
xfs_mru_cache.c xfs: remove filestream item xfs_inode reference 2018-04-09 10:23:39 -07:00
xfs_mru_cache.h xfs: remove filestream item xfs_inode reference 2018-04-09 10:23:39 -07:00
xfs_ondisk.h xfs: Don't log uninitialised fields in inode structures 2017-10-11 10:21:06 -07:00
xfs_pnfs.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
xfs_pnfs.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
xfs_qm.c xfs: rename on-disk dquot counter zap functions 2018-05-10 08:56:48 -07:00
xfs_qm.h xfs: refactor XFS_QMOPT_DQNEXT out of existence 2018-05-10 08:56:47 -07:00
xfs_qm_bhv.c xfs: replace XFS_QMOPT_DQALLOC with a simple boolean 2018-05-10 08:56:48 -07:00
xfs_qm_syscalls.c xfs: replace XFS_QMOPT_DQALLOC with a simple boolean 2018-05-10 08:56:48 -07:00
xfs_quota.h xfs: split out dqget for inodes from regular dqget 2018-05-10 08:56:48 -07:00
xfs_quotaops.c xfs: refactor XFS_QMOPT_DQNEXT out of existence 2018-05-10 08:56:47 -07:00
xfs_refcount_item.c xfs: log item flags are racy 2018-05-10 08:56:41 -07:00
xfs_refcount_item.h xfs: log recovery should replay deferred ops in order 2017-11-27 09:34:08 -08:00
xfs_reflink.c xfs: split out dqget for inodes from regular dqget 2018-05-10 08:56:48 -07:00
xfs_reflink.h xfs: separate function to check if inode shares extents 2017-06-19 14:11:35 -07:00
xfs_rmap_item.c xfs: log item flags are racy 2018-05-10 08:56:41 -07:00
xfs_rmap_item.h xfs: convert RUI log formats to use variable length arrays 2016-09-19 10:24:27 +10:00
xfs_rtalloc.c xfs: remove the ip argument to xfs_defer_finish 2017-09-01 10:55:30 -07:00
xfs_rtalloc.h xfs: cross-reference the realtime bitmap 2018-01-17 21:00:46 -08:00
xfs_stats.c xfs: remove double-underscore integer types 2017-06-19 14:11:33 -07:00
xfs_stats.h xfs: remove double-underscore integer types 2017-06-19 14:11:33 -07:00
xfs_super.c xfs: clear sb->s_fs_info on mount failure 2018-05-15 17:57:05 -07:00
xfs_super.h xfs: add scrub to XFS_BUILD_OPTIONS 2018-02-01 21:06:15 -08:00
xfs_symlink.c xfs: fix double ijoin in xfs_inactive_symlink_rmt() 2018-05-10 08:56:46 -07:00
xfs_symlink.h xfs: allow reading of already-locked remote symbolic link 2017-06-20 10:45:22 -07:00
xfs_sysctl.c xfs: garbage collect old cowextsz reservations 2016-10-05 16:26:28 -07:00
xfs_sysctl.h xfs: add mount delay debug option 2018-05-15 17:57:05 -07:00
xfs_sysfs.c xfs: add mount delay debug option 2018-05-15 17:57:05 -07:00
xfs_sysfs.h xfs: configurable error behavior via sysfs 2016-05-18 10:58:51 +10:00
xfs_trace.c fs: xfs: remove duplicate includes 2017-12-08 17:51:05 -08:00
xfs_trace.h xfs: get rid of the log item descriptor 2018-05-10 08:56:46 -07:00
xfs_trans.c xfs: get rid of the log item descriptor 2018-05-10 08:56:46 -07:00
xfs_trans.h xfs: add bmapi nodiscard flag 2018-05-10 08:56:46 -07:00
xfs_trans_ail.c xfs: don't assert fail with AIL lock held 2018-05-10 08:56:46 -07:00
xfs_trans_bmap.c xfs: get rid of the log item descriptor 2018-05-10 08:56:46 -07:00
xfs_trans_buf.c xfs: get rid of the log item descriptor 2018-05-10 08:56:46 -07:00
xfs_trans_dquot.c xfs: get rid of the log item descriptor 2018-05-10 08:56:46 -07:00
xfs_trans_extfree.c xfs: factor out nodiscard helpers 2018-05-15 17:57:05 -07:00
xfs_trans_inode.c xfs: get rid of the log item descriptor 2018-05-10 08:56:46 -07:00
xfs_trans_priv.h xfs: get rid of the log item descriptor 2018-05-10 08:56:46 -07:00
xfs_trans_refcount.c xfs: get rid of the log item descriptor 2018-05-10 08:56:46 -07:00
xfs_trans_rmap.c xfs: get rid of the log item descriptor 2018-05-10 08:56:46 -07:00
xfs_xattr.c xfs: several xattr functions can be void 2016-12-05 12:32:14 +11:00