diff options
Diffstat (limited to 'fs/xfs/xfs_mount.c')
| -rw-r--r-- | fs/xfs/xfs_mount.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index da88f167af78..02df7b408a26 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c | |||
| @@ -41,6 +41,7 @@ | |||
| 41 | #include "xfs_fsops.h" | 41 | #include "xfs_fsops.h" |
| 42 | #include "xfs_trace.h" | 42 | #include "xfs_trace.h" |
| 43 | #include "xfs_icache.h" | 43 | #include "xfs_icache.h" |
| 44 | #include "xfs_dinode.h" | ||
| 44 | 45 | ||
| 45 | 46 | ||
| 46 | #ifdef HAVE_PERCPU_SB | 47 | #ifdef HAVE_PERCPU_SB |
| @@ -718,8 +719,22 @@ xfs_mountfs( | |||
| 718 | * Set the inode cluster size. | 719 | * Set the inode cluster size. |
| 719 | * This may still be overridden by the file system | 720 | * This may still be overridden by the file system |
| 720 | * block size if it is larger than the chosen cluster size. | 721 | * block size if it is larger than the chosen cluster size. |
| 722 | * | ||
| 723 | * For v5 filesystems, scale the cluster size with the inode size to | ||
| 724 | * keep a constant ratio of inode per cluster buffer, but only if mkfs | ||
| 725 | * has set the inode alignment value appropriately for larger cluster | ||
| 726 | * sizes. | ||
| 721 | */ | 727 | */ |
| 722 | mp->m_inode_cluster_size = XFS_INODE_BIG_CLUSTER_SIZE; | 728 | mp->m_inode_cluster_size = XFS_INODE_BIG_CLUSTER_SIZE; |
| 729 | if (xfs_sb_version_hascrc(&mp->m_sb)) { | ||
| 730 | int new_size = mp->m_inode_cluster_size; | ||
| 731 | |||
| 732 | new_size *= mp->m_sb.sb_inodesize / XFS_DINODE_MIN_SIZE; | ||
| 733 | if (mp->m_sb.sb_inoalignmt >= XFS_B_TO_FSBT(mp, new_size)) | ||
| 734 | mp->m_inode_cluster_size = new_size; | ||
| 735 | xfs_info(mp, "Using inode cluster size of %d bytes", | ||
| 736 | mp->m_inode_cluster_size); | ||
| 737 | } | ||
| 723 | 738 | ||
| 724 | /* | 739 | /* |
| 725 | * Set inode alignment fields | 740 | * Set inode alignment fields |
