summaryrefslogtreecommitdiffstats
path: root/fs/xfs
diff options
context:
space:
mode:
authorDave Chinner <david@fromorbit.com>2015-06-04 13:31:13 +1000
committerDave Chinner <david@fromorbit.com>2015-06-04 13:31:13 +1000
commit4497f28750cd129a669e32b7810dd755102aebbd (patch)
tree0e16a0ee8fc52793614dbf45e4c4ff051925bd47 /fs/xfs
parent66e8ac7bfa0a591b8cfaa447db2daa5b6e9221d0 (diff)
parent46fc58dacf6e9b00629c57998a8a23f85c262b3f (diff)
downloadlinux-4497f28750cd129a669e32b7810dd755102aebbd.tar.bz2
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.c15
-rw-r--r--fs/xfs/xfs_inode.c7
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;
}