diff options
Diffstat (limited to '')
| -rw-r--r-- | fs/xfs/xfs_super.c | 19 | 
1 files changed, 12 insertions, 7 deletions
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index 11ea5d51db56..0303f1005f88 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -546,7 +546,7 @@ xfs_showargs(  	return 0;  } -__uint64_t +static __uint64_t  xfs_max_file_offset(  	unsigned int		blockshift)  { @@ -1294,6 +1294,7 @@ xfs_fs_remount(  		 */  		xfs_restore_resvblks(mp);  		xfs_log_work_queue(mp); +		xfs_queue_eofblocks(mp);  	}  	/* rw -> ro */ @@ -1306,6 +1307,13 @@ xfs_fs_remount(  		 * return it to the same size.  		 */  		xfs_save_resvblks(mp); + +		/* +		 * Cancel background eofb scanning so it cannot race with the +		 * final log force+buftarg wait and deadlock the remount. +		 */ +		cancel_delayed_work_sync(&mp->m_eofblocks_work); +  		xfs_quiesce_attr(mp);  		mp->m_flags |= XFS_MOUNT_RDONLY;  	} @@ -1565,10 +1573,6 @@ xfs_fs_fill_super(  		}  	} -	if (xfs_sb_version_hassparseinodes(&mp->m_sb)) -		xfs_alert(mp, -	"EXPERIMENTAL sparse inode feature enabled. Use at your own risk!"); -  	error = xfs_mountfs(mp);  	if (error)  		goto out_filestream_unmount; @@ -1692,8 +1696,9 @@ xfs_init_zones(void)  	if (!xfs_log_ticket_zone)  		goto out_free_ioend_bioset; -	xfs_bmap_free_item_zone = kmem_zone_init(sizeof(xfs_bmap_free_item_t), -						"xfs_bmap_free_item"); +	xfs_bmap_free_item_zone = kmem_zone_init( +			sizeof(struct xfs_bmap_free_item), +			"xfs_bmap_free_item");  	if (!xfs_bmap_free_item_zone)  		goto out_destroy_log_ticket_zone;  | 
