diff options
author | Dave Chinner | 2015-06-04 13:31:13 +1000 |
---|---|---|
committer | Dave Chinner | 2015-06-04 13:31:13 +1000 |
commit | 4497f28750cd129a669e32b7810dd755102aebbd (patch) | |
tree | 0e16a0ee8fc52793614dbf45e4c4ff051925bd47 /fs/xfs | |
parent | 66e8ac7bfa0a591b8cfaa447db2daa5b6e9221d0 (diff) | |
parent | 46fc58dacf6e9b00629c57998a8a23f85c262b3f (diff) |
Merge branch 'xfs-misc-fixes-for-4.2-2' into for-next
Diffstat (limited to 'fs/xfs')
-rw-r--r-- | fs/xfs/libxfs/xfs_ialloc.c | 15 | ||||
-rw-r--r-- | fs/xfs/xfs_inode.c | 7 |
2 files changed, 12 insertions, 10 deletions
diff --git a/fs/xfs/libxfs/xfs_ialloc.c b/fs/xfs/libxfs/xfs_ialloc.c index a18bc75cc216..66efc702452a 100644 --- a/fs/xfs/libxfs/xfs_ialloc.c +++ b/fs/xfs/libxfs/xfs_ialloc.c @@ -606,20 +606,20 @@ xfs_ialloc_ag_alloc( uint16_t allocmask = (uint16_t) -1; /* init. to full chunk */ struct xfs_inobt_rec_incore rec; struct xfs_perag *pag; - int do_sparse = 0; -#ifdef DEBUG - /* randomly do sparse inode allocations */ - if (xfs_sb_version_hassparseinodes(&tp->t_mountp->m_sb)) - do_sparse = prandom_u32() & 1; -#endif - memset(&args, 0, sizeof(args)); args.tp = tp; args.mp = tp->t_mountp; args.fsbno = NULLFSBLOCK; +#ifdef DEBUG + /* randomly do sparse inode allocations */ + if (xfs_sb_version_hassparseinodes(&tp->t_mountp->m_sb) && + args.mp->m_ialloc_min_blks < args.mp->m_ialloc_blks) + do_sparse = prandom_u32() & 1; +#endif + /* * Locking will ensure that we don't have two callers in here * at one time. @@ -768,6 +768,7 @@ sparse_alloc: return error; newlen = args.len << args.mp->m_sb.sb_inopblog; + ASSERT(newlen <= XFS_INODES_PER_CHUNK); allocmask = (1 << (newlen / XFS_INODES_PER_HOLEMASK_BIT)) - 1; } diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c index 4c054f6634b9..17cd90c19634 100644 --- a/fs/xfs/xfs_inode.c +++ b/fs/xfs/xfs_inode.c @@ -2244,6 +2244,7 @@ xfs_ifree_cluster( int inodes_per_cluster; int nbufs; int i, j; + int ioffset; xfs_daddr_t blkno; xfs_buf_t *bp; xfs_inode_t *ip; @@ -2264,9 +2265,9 @@ xfs_ifree_cluster( * physically allocated. Skip the cluster if an inode falls into * a sparse region. */ - if ((xic->alloc & XFS_INOBT_MASK(inum - xic->first_ino)) == 0) { - ASSERT(((inum - xic->first_ino) % - inodes_per_cluster) == 0); + ioffset = inum - xic->first_ino; + if ((xic->alloc & XFS_INOBT_MASK(ioffset)) == 0) { + ASSERT(do_mod(ioffset, inodes_per_cluster) == 0); continue; } |