]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/xfs/xfs_mount.c
Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux.git] / fs / xfs / xfs_mount.c
index ba5b6f3b2b88a13cf79b33cab58270db8075585d..fca65109cf242dd946b0585e116043f213018978 100644 (file)
@@ -425,45 +425,6 @@ xfs_update_alignment(xfs_mount_t *mp)
        return 0;
 }
 
-/*
- * Set the default minimum read and write sizes unless
- * already specified in a mount option.
- * We use smaller I/O sizes when the file system
- * is being used for NFS service (wsync mount option).
- */
-STATIC void
-xfs_set_rw_sizes(xfs_mount_t *mp)
-{
-       xfs_sb_t        *sbp = &(mp->m_sb);
-       int             readio_log, writeio_log;
-
-       if (!(mp->m_flags & XFS_MOUNT_DFLT_IOSIZE)) {
-               if (mp->m_flags & XFS_MOUNT_WSYNC) {
-                       readio_log = XFS_WSYNC_READIO_LOG;
-                       writeio_log = XFS_WSYNC_WRITEIO_LOG;
-               } else {
-                       readio_log = XFS_READIO_LOG_LARGE;
-                       writeio_log = XFS_WRITEIO_LOG_LARGE;
-               }
-       } else {
-               readio_log = mp->m_readio_log;
-               writeio_log = mp->m_writeio_log;
-       }
-
-       if (sbp->sb_blocklog > readio_log) {
-               mp->m_readio_log = sbp->sb_blocklog;
-       } else {
-               mp->m_readio_log = readio_log;
-       }
-       mp->m_readio_blocks = 1 << (mp->m_readio_log - sbp->sb_blocklog);
-       if (sbp->sb_blocklog > writeio_log) {
-               mp->m_writeio_log = sbp->sb_blocklog;
-       } else {
-               mp->m_writeio_log = writeio_log;
-       }
-       mp->m_writeio_blocks = 1 << (mp->m_writeio_log - sbp->sb_blocklog);
-}
-
 /*
  * precalculate the low space thresholds for dynamic speculative preallocation.
  */
@@ -706,7 +667,8 @@ xfs_mountfs(
        /* enable fail_at_unmount as default */
        mp->m_fail_unmount = true;
 
-       error = xfs_sysfs_init(&mp->m_kobj, &xfs_mp_ktype, NULL, mp->m_fsname);
+       error = xfs_sysfs_init(&mp->m_kobj, &xfs_mp_ktype,
+                              NULL, mp->m_super->s_id);
        if (error)
                goto out;
 
@@ -728,9 +690,12 @@ xfs_mountfs(
                goto out_remove_errortag;
 
        /*
-        * Set the minimum read and write sizes
+        * Update the preferred write size based on the information from the
+        * on-disk superblock.
         */
-       xfs_set_rw_sizes(mp);
+       mp->m_allocsize_log =
+               max_t(uint32_t, sbp->sb_blocklog, mp->m_allocsize_log);
+       mp->m_allocsize_blocks = 1U << (mp->m_allocsize_log - sbp->sb_blocklog);
 
        /* set the low space thresholds for dynamic preallocation */
        xfs_set_low_space_thresholds(mp);
@@ -796,9 +761,8 @@ xfs_mountfs(
                goto out_free_dir;
        }
 
-       if (!sbp->sb_logblocks) {
+       if (XFS_IS_CORRUPT(mp, !sbp->sb_logblocks)) {
                xfs_warn(mp, "no log defined");
-               XFS_ERROR_REPORT("xfs_mountfs", XFS_ERRLEVEL_LOW, mp);
                error = -EFSCORRUPTED;
                goto out_free_perag;
        }
@@ -836,12 +800,10 @@ xfs_mountfs(
 
        ASSERT(rip != NULL);
 
-       if (unlikely(!S_ISDIR(VFS_I(rip)->i_mode))) {
+       if (XFS_IS_CORRUPT(mp, !S_ISDIR(VFS_I(rip)->i_mode))) {
                xfs_warn(mp, "corrupted root inode %llu: not a directory",
                        (unsigned long long)rip->i_ino);
                xfs_iunlock(rip, XFS_ILOCK_EXCL);
-               XFS_ERROR_REPORT("xfs_mountfs_int(2)", XFS_ERRLEVEL_LOW,
-                                mp);
                error = -EFSCORRUPTED;
                goto out_rele_rip;
        }
@@ -1277,7 +1239,7 @@ xfs_mod_fdblocks(
        printk_once(KERN_WARNING
                "Filesystem \"%s\": reserve blocks depleted! "
                "Consider increasing reserve pool size.",
-               mp->m_fsname);
+               mp->m_super->s_id);
 fdblocks_enospc:
        spin_unlock(&mp->m_sb_lock);
        return -ENOSPC;