From: "Darrick J. Wong" <darrick.wong@oracle.com> To: david@fromorbit.com, darrick.wong@oracle.com Cc: linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, xfs@oss.sgi.com, Dave Chinner <dchinner@redhat.com> Subject: [PATCH 031/119] xfs: rmap btree requires more reserved free space Date: Thu, 16 Jun 2016 18:21:11 -0700 [thread overview] Message-ID: <146612647122.12839.13018596528662402580.stgit@birch.djwong.org> (raw) In-Reply-To: <146612627129.12839.3827886950949809165.stgit@birch.djwong.org> From: Dave Chinner <dchinner@redhat.com> The rmap btree is allocated from the AGFL, which means we have to ensure ENOSPC is reported to userspace before we run out of free space in each AG. The last allocation in an AG can cause a full height rmap btree split, and that means we have to reserve at least this many blocks *in each AG* to be placed on the AGFL at ENOSPC. Update the various space calculation functiosn to handle this. Also, because the macros are now executing conditional code and are called quite frequently, convert them to functions that initialise varaibles in the struct xfs_mount, use the new variables everywhere and document the calculations better. v2: If rmapbt is disabled, it is incorrect to require 1 extra AGFL block for the rmapbt (due to the + 1); the entire clause needs to be gated on the feature flag. v3: Use m_rmap_maxlevels to determine min_free. [darrick.wong@oracle.com: don't reserve blocks if !rmap] [dchinner@redhat.com: update m_ag_max_usable after growfs] Signed-off-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com> --- fs/xfs/libxfs/xfs_alloc.c | 71 +++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/libxfs/xfs_alloc.h | 41 +++----------------------- fs/xfs/libxfs/xfs_bmap.c | 2 + fs/xfs/libxfs/xfs_sb.c | 2 + fs/xfs/xfs_discard.c | 2 + fs/xfs/xfs_fsops.c | 5 ++- fs/xfs/xfs_log_recover.c | 1 + fs/xfs/xfs_mount.c | 2 + fs/xfs/xfs_mount.h | 2 + fs/xfs/xfs_super.c | 2 + 10 files changed, 88 insertions(+), 42 deletions(-) diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c index 570ca17..4c8ffd4 100644 --- a/fs/xfs/libxfs/xfs_alloc.c +++ b/fs/xfs/libxfs/xfs_alloc.c @@ -63,6 +63,72 @@ xfs_prealloc_blocks( } /* + * In order to avoid ENOSPC-related deadlock caused by out-of-order locking of + * AGF buffer (PV 947395), we place constraints on the relationship among + * actual allocations for data blocks, freelist blocks, and potential file data + * bmap btree blocks. However, these restrictions may result in no actual space + * allocated for a delayed extent, for example, a data block in a certain AG is + * allocated but there is no additional block for the additional bmap btree + * block due to a split of the bmap btree of the file. The result of this may + * lead to an infinite loop when the file gets flushed to disk and all delayed + * extents need to be actually allocated. To get around this, we explicitly set + * aside a few blocks which will not be reserved in delayed allocation. + * + * The minimum number of needed freelist blocks is 4 fsbs _per AG_ when we are + * not using rmap btrees a potential split of file's bmap btree requires 1 fsb, + * so we set the number of set-aside blocks to 4 + 4*agcount when not using + * rmap btrees. + * + * When rmap btrees are active, we have to consider that using the last block + * in the AG can cause a full height rmap btree split and we need enough blocks + * on the AGFL to be able to handle this. That means we have, in addition to + * the above consideration, another (2 * mp->m_rmap_levels) - 1 blocks required + * to be available to the free list. + */ +unsigned int +xfs_alloc_set_aside( + struct xfs_mount *mp) +{ + unsigned int blocks; + + blocks = 4 + (mp->m_sb.sb_agcount * XFS_ALLOC_AGFL_RESERVE); + if (!xfs_sb_version_hasrmapbt(&mp->m_sb)) + return blocks; + return blocks + (mp->m_sb.sb_agcount * (2 * mp->m_rmap_maxlevels) - 1); +} + +/* + * When deciding how much space to allocate out of an AG, we limit the + * allocation maximum size to the size the AG. However, we cannot use all the + * blocks in the AG - some are permanently used by metadata. These + * blocks are generally: + * - the AG superblock, AGF, AGI and AGFL + * - the AGF (bno and cnt) and AGI btree root blocks, and optionally + * the AGI free inode and rmap btree root blocks. + * - blocks on the AGFL according to xfs_alloc_set_aside() limits + * + * The AG headers are sector sized, so the amount of space they take up is + * dependent on filesystem geometry. The others are all single blocks. + */ +unsigned int +xfs_alloc_ag_max_usable(struct xfs_mount *mp) +{ + unsigned int blocks; + + blocks = XFS_BB_TO_FSB(mp, XFS_FSS_TO_BB(mp, 4)); /* ag headers */ + blocks += XFS_ALLOC_AGFL_RESERVE; + blocks += 3; /* AGF, AGI btree root blocks */ + if (xfs_sb_version_hasfinobt(&mp->m_sb)) + blocks++; /* finobt root block */ + if (xfs_sb_version_hasrmapbt(&mp->m_sb)) { + /* rmap root block + full tree split on full AG */ + blocks += 1 + (2 * mp->m_ag_maxlevels) - 1; + } + + return mp->m_sb.sb_agblocks - blocks; +} + +/* * Lookup the record equal to [bno, len] in the btree given by cur. */ STATIC int /* error */ @@ -1904,6 +1970,11 @@ xfs_alloc_min_freelist( /* space needed by-size freespace btree */ min_free += min_t(unsigned int, pag->pagf_levels[XFS_BTNUM_CNTi] + 1, mp->m_ag_maxlevels); + /* space needed reverse mapping used space btree */ + if (xfs_sb_version_hasrmapbt(&mp->m_sb)) + min_free += min_t(unsigned int, + pag->pagf_levels[XFS_BTNUM_RMAPi] + 1, + mp->m_rmap_maxlevels); return min_free; } diff --git a/fs/xfs/libxfs/xfs_alloc.h b/fs/xfs/libxfs/xfs_alloc.h index 0721a48..7b6c66b 100644 --- a/fs/xfs/libxfs/xfs_alloc.h +++ b/fs/xfs/libxfs/xfs_alloc.h @@ -56,42 +56,6 @@ typedef unsigned int xfs_alloctype_t; #define XFS_ALLOC_FLAG_FREEING 0x00000002 /* indicate caller is freeing extents*/ /* - * In order to avoid ENOSPC-related deadlock caused by - * out-of-order locking of AGF buffer (PV 947395), we place - * constraints on the relationship among actual allocations for - * data blocks, freelist blocks, and potential file data bmap - * btree blocks. However, these restrictions may result in no - * actual space allocated for a delayed extent, for example, a data - * block in a certain AG is allocated but there is no additional - * block for the additional bmap btree block due to a split of the - * bmap btree of the file. The result of this may lead to an - * infinite loop in xfssyncd when the file gets flushed to disk and - * all delayed extents need to be actually allocated. To get around - * this, we explicitly set aside a few blocks which will not be - * reserved in delayed allocation. Considering the minimum number of - * needed freelist blocks is 4 fsbs _per AG_, a potential split of file's bmap - * btree requires 1 fsb, so we set the number of set-aside blocks - * to 4 + 4*agcount. - */ -#define XFS_ALLOC_SET_ASIDE(mp) (4 + ((mp)->m_sb.sb_agcount * 4)) - -/* - * When deciding how much space to allocate out of an AG, we limit the - * allocation maximum size to the size the AG. However, we cannot use all the - * blocks in the AG - some are permanently used by metadata. These - * blocks are generally: - * - the AG superblock, AGF, AGI and AGFL - * - the AGF (bno and cnt) and AGI btree root blocks - * - 4 blocks on the AGFL according to XFS_ALLOC_SET_ASIDE() limits - * - * The AG headers are sector sized, so the amount of space they take up is - * dependent on filesystem geometry. The others are all single blocks. - */ -#define XFS_ALLOC_AG_MAX_USABLE(mp) \ - ((mp)->m_sb.sb_agblocks - XFS_BB_TO_FSB(mp, XFS_FSS_TO_BB(mp, 4)) - 7) - - -/* * Argument structure for xfs_alloc routines. * This is turned into a structure to avoid having 20 arguments passed * down several levels of the stack. @@ -133,6 +97,11 @@ typedef struct xfs_alloc_arg { #define XFS_ALLOC_INITIAL_USER_DATA (1 << 1)/* special case start of file */ #define XFS_ALLOC_USERDATA_ZERO (1 << 2)/* zero extent on allocation */ +/* freespace limit calculations */ +#define XFS_ALLOC_AGFL_RESERVE 4 +unsigned int xfs_alloc_set_aside(struct xfs_mount *mp); +unsigned int xfs_alloc_ag_max_usable(struct xfs_mount *mp); + xfs_extlen_t xfs_alloc_longest_free_extent(struct xfs_mount *mp, struct xfs_perag *pag, xfs_extlen_t need); unsigned int xfs_alloc_min_freelist(struct xfs_mount *mp, diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index 2c28f2a..61c0231 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c @@ -3672,7 +3672,7 @@ xfs_bmap_btalloc( args.fsbno = ap->blkno; /* Trim the allocation back to the maximum an AG can fit. */ - args.maxlen = MIN(ap->length, XFS_ALLOC_AG_MAX_USABLE(mp)); + args.maxlen = MIN(ap->length, mp->m_ag_max_usable); args.firstblock = *ap->firstblock; blen = 0; if (nullfb) { diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c index f86226b..59c9f59 100644 --- a/fs/xfs/libxfs/xfs_sb.c +++ b/fs/xfs/libxfs/xfs_sb.c @@ -749,6 +749,8 @@ xfs_sb_mount_common( mp->m_ialloc_min_blks = sbp->sb_spino_align; else mp->m_ialloc_min_blks = mp->m_ialloc_blks; + mp->m_alloc_set_aside = xfs_alloc_set_aside(mp); + mp->m_ag_max_usable = xfs_alloc_ag_max_usable(mp); } /* diff --git a/fs/xfs/xfs_discard.c b/fs/xfs/xfs_discard.c index 272c3f8..4ff499a 100644 --- a/fs/xfs/xfs_discard.c +++ b/fs/xfs/xfs_discard.c @@ -179,7 +179,7 @@ xfs_ioc_trim( * matter as trimming blocks is an advisory interface. */ if (range.start >= XFS_FSB_TO_B(mp, mp->m_sb.sb_dblocks) || - range.minlen > XFS_FSB_TO_B(mp, XFS_ALLOC_AG_MAX_USABLE(mp)) || + range.minlen > XFS_FSB_TO_B(mp, mp->m_ag_max_usable) || range.len < mp->m_sb.sb_blocksize) return -EINVAL; diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c index 8a85e49..3772f6c 100644 --- a/fs/xfs/xfs_fsops.c +++ b/fs/xfs/xfs_fsops.c @@ -583,6 +583,7 @@ xfs_growfs_data_private( } else mp->m_maxicount = 0; xfs_set_low_space_thresholds(mp); + mp->m_alloc_set_aside = xfs_alloc_set_aside(mp); /* update secondary superblocks. */ for (agno = 1; agno < nagcount; agno++) { @@ -720,7 +721,7 @@ xfs_fs_counts( cnt->allocino = percpu_counter_read_positive(&mp->m_icount); cnt->freeino = percpu_counter_read_positive(&mp->m_ifree); cnt->freedata = percpu_counter_read_positive(&mp->m_fdblocks) - - XFS_ALLOC_SET_ASIDE(mp); + mp->m_alloc_set_aside; spin_lock(&mp->m_sb_lock); cnt->freertx = mp->m_sb.sb_frextents; @@ -793,7 +794,7 @@ retry: __int64_t free; free = percpu_counter_sum(&mp->m_fdblocks) - - XFS_ALLOC_SET_ASIDE(mp); + mp->m_alloc_set_aside; if (!free) goto out; /* ENOSPC and fdblks_delta = 0 */ diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 0c41bd2..b33187b 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -5027,6 +5027,7 @@ xlog_do_recover( xfs_warn(mp, "Failed post-recovery per-ag init: %d", error); return error; } + mp->m_alloc_set_aside = xfs_alloc_set_aside(mp); xlog_recover_check_summary(log); diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 8af1c88..879f3ef 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -1219,7 +1219,7 @@ xfs_mod_fdblocks( batch = XFS_FDBLOCKS_BATCH; __percpu_counter_add(&mp->m_fdblocks, delta, batch); - if (__percpu_counter_compare(&mp->m_fdblocks, XFS_ALLOC_SET_ASIDE(mp), + if (__percpu_counter_compare(&mp->m_fdblocks, mp->m_alloc_set_aside, XFS_FDBLOCKS_BATCH) >= 0) { /* we had space! */ return 0; diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index 0ed0f29..b36676c 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -123,6 +123,8 @@ typedef struct xfs_mount { uint m_in_maxlevels; /* max inobt btree levels. */ uint m_rmap_maxlevels; /* max rmap btree levels */ xfs_extlen_t m_ag_prealloc_blocks; /* reserved ag blocks */ + uint m_alloc_set_aside; /* space we can't use */ + uint m_ag_max_usable; /* max space per AG */ struct radix_tree_root m_perag_tree; /* per-ag accounting info */ spinlock_t m_perag_lock; /* lock for m_perag_tree */ struct mutex m_growlock; /* growfs mutex */ diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index bf63f6d..1575849 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -1076,7 +1076,7 @@ xfs_fs_statfs( statp->f_blocks = sbp->sb_dblocks - lsize; spin_unlock(&mp->m_sb_lock); - statp->f_bfree = fdblocks - XFS_ALLOC_SET_ASIDE(mp); + statp->f_bfree = fdblocks - mp->m_alloc_set_aside; statp->f_bavail = statp->f_bfree; fakeinos = statp->f_bfree << sbp->sb_inopblog;
WARNING: multiple messages have this Message-ID (diff)
From: "Darrick J. Wong" <darrick.wong@oracle.com> To: david@fromorbit.com, darrick.wong@oracle.com Cc: linux-fsdevel@vger.kernel.org, vishal.l.verma@intel.com, Dave Chinner <dchinner@redhat.com>, xfs@oss.sgi.com Subject: [PATCH 031/119] xfs: rmap btree requires more reserved free space Date: Thu, 16 Jun 2016 18:21:11 -0700 [thread overview] Message-ID: <146612647122.12839.13018596528662402580.stgit@birch.djwong.org> (raw) In-Reply-To: <146612627129.12839.3827886950949809165.stgit@birch.djwong.org> From: Dave Chinner <dchinner@redhat.com> The rmap btree is allocated from the AGFL, which means we have to ensure ENOSPC is reported to userspace before we run out of free space in each AG. The last allocation in an AG can cause a full height rmap btree split, and that means we have to reserve at least this many blocks *in each AG* to be placed on the AGFL at ENOSPC. Update the various space calculation functiosn to handle this. Also, because the macros are now executing conditional code and are called quite frequently, convert them to functions that initialise varaibles in the struct xfs_mount, use the new variables everywhere and document the calculations better. v2: If rmapbt is disabled, it is incorrect to require 1 extra AGFL block for the rmapbt (due to the + 1); the entire clause needs to be gated on the feature flag. v3: Use m_rmap_maxlevels to determine min_free. [darrick.wong@oracle.com: don't reserve blocks if !rmap] [dchinner@redhat.com: update m_ag_max_usable after growfs] Signed-off-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com> --- fs/xfs/libxfs/xfs_alloc.c | 71 +++++++++++++++++++++++++++++++++++++++++++++ fs/xfs/libxfs/xfs_alloc.h | 41 +++----------------------- fs/xfs/libxfs/xfs_bmap.c | 2 + fs/xfs/libxfs/xfs_sb.c | 2 + fs/xfs/xfs_discard.c | 2 + fs/xfs/xfs_fsops.c | 5 ++- fs/xfs/xfs_log_recover.c | 1 + fs/xfs/xfs_mount.c | 2 + fs/xfs/xfs_mount.h | 2 + fs/xfs/xfs_super.c | 2 + 10 files changed, 88 insertions(+), 42 deletions(-) diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c index 570ca17..4c8ffd4 100644 --- a/fs/xfs/libxfs/xfs_alloc.c +++ b/fs/xfs/libxfs/xfs_alloc.c @@ -63,6 +63,72 @@ xfs_prealloc_blocks( } /* + * In order to avoid ENOSPC-related deadlock caused by out-of-order locking of + * AGF buffer (PV 947395), we place constraints on the relationship among + * actual allocations for data blocks, freelist blocks, and potential file data + * bmap btree blocks. However, these restrictions may result in no actual space + * allocated for a delayed extent, for example, a data block in a certain AG is + * allocated but there is no additional block for the additional bmap btree + * block due to a split of the bmap btree of the file. The result of this may + * lead to an infinite loop when the file gets flushed to disk and all delayed + * extents need to be actually allocated. To get around this, we explicitly set + * aside a few blocks which will not be reserved in delayed allocation. + * + * The minimum number of needed freelist blocks is 4 fsbs _per AG_ when we are + * not using rmap btrees a potential split of file's bmap btree requires 1 fsb, + * so we set the number of set-aside blocks to 4 + 4*agcount when not using + * rmap btrees. + * + * When rmap btrees are active, we have to consider that using the last block + * in the AG can cause a full height rmap btree split and we need enough blocks + * on the AGFL to be able to handle this. That means we have, in addition to + * the above consideration, another (2 * mp->m_rmap_levels) - 1 blocks required + * to be available to the free list. + */ +unsigned int +xfs_alloc_set_aside( + struct xfs_mount *mp) +{ + unsigned int blocks; + + blocks = 4 + (mp->m_sb.sb_agcount * XFS_ALLOC_AGFL_RESERVE); + if (!xfs_sb_version_hasrmapbt(&mp->m_sb)) + return blocks; + return blocks + (mp->m_sb.sb_agcount * (2 * mp->m_rmap_maxlevels) - 1); +} + +/* + * When deciding how much space to allocate out of an AG, we limit the + * allocation maximum size to the size the AG. However, we cannot use all the + * blocks in the AG - some are permanently used by metadata. These + * blocks are generally: + * - the AG superblock, AGF, AGI and AGFL + * - the AGF (bno and cnt) and AGI btree root blocks, and optionally + * the AGI free inode and rmap btree root blocks. + * - blocks on the AGFL according to xfs_alloc_set_aside() limits + * + * The AG headers are sector sized, so the amount of space they take up is + * dependent on filesystem geometry. The others are all single blocks. + */ +unsigned int +xfs_alloc_ag_max_usable(struct xfs_mount *mp) +{ + unsigned int blocks; + + blocks = XFS_BB_TO_FSB(mp, XFS_FSS_TO_BB(mp, 4)); /* ag headers */ + blocks += XFS_ALLOC_AGFL_RESERVE; + blocks += 3; /* AGF, AGI btree root blocks */ + if (xfs_sb_version_hasfinobt(&mp->m_sb)) + blocks++; /* finobt root block */ + if (xfs_sb_version_hasrmapbt(&mp->m_sb)) { + /* rmap root block + full tree split on full AG */ + blocks += 1 + (2 * mp->m_ag_maxlevels) - 1; + } + + return mp->m_sb.sb_agblocks - blocks; +} + +/* * Lookup the record equal to [bno, len] in the btree given by cur. */ STATIC int /* error */ @@ -1904,6 +1970,11 @@ xfs_alloc_min_freelist( /* space needed by-size freespace btree */ min_free += min_t(unsigned int, pag->pagf_levels[XFS_BTNUM_CNTi] + 1, mp->m_ag_maxlevels); + /* space needed reverse mapping used space btree */ + if (xfs_sb_version_hasrmapbt(&mp->m_sb)) + min_free += min_t(unsigned int, + pag->pagf_levels[XFS_BTNUM_RMAPi] + 1, + mp->m_rmap_maxlevels); return min_free; } diff --git a/fs/xfs/libxfs/xfs_alloc.h b/fs/xfs/libxfs/xfs_alloc.h index 0721a48..7b6c66b 100644 --- a/fs/xfs/libxfs/xfs_alloc.h +++ b/fs/xfs/libxfs/xfs_alloc.h @@ -56,42 +56,6 @@ typedef unsigned int xfs_alloctype_t; #define XFS_ALLOC_FLAG_FREEING 0x00000002 /* indicate caller is freeing extents*/ /* - * In order to avoid ENOSPC-related deadlock caused by - * out-of-order locking of AGF buffer (PV 947395), we place - * constraints on the relationship among actual allocations for - * data blocks, freelist blocks, and potential file data bmap - * btree blocks. However, these restrictions may result in no - * actual space allocated for a delayed extent, for example, a data - * block in a certain AG is allocated but there is no additional - * block for the additional bmap btree block due to a split of the - * bmap btree of the file. The result of this may lead to an - * infinite loop in xfssyncd when the file gets flushed to disk and - * all delayed extents need to be actually allocated. To get around - * this, we explicitly set aside a few blocks which will not be - * reserved in delayed allocation. Considering the minimum number of - * needed freelist blocks is 4 fsbs _per AG_, a potential split of file's bmap - * btree requires 1 fsb, so we set the number of set-aside blocks - * to 4 + 4*agcount. - */ -#define XFS_ALLOC_SET_ASIDE(mp) (4 + ((mp)->m_sb.sb_agcount * 4)) - -/* - * When deciding how much space to allocate out of an AG, we limit the - * allocation maximum size to the size the AG. However, we cannot use all the - * blocks in the AG - some are permanently used by metadata. These - * blocks are generally: - * - the AG superblock, AGF, AGI and AGFL - * - the AGF (bno and cnt) and AGI btree root blocks - * - 4 blocks on the AGFL according to XFS_ALLOC_SET_ASIDE() limits - * - * The AG headers are sector sized, so the amount of space they take up is - * dependent on filesystem geometry. The others are all single blocks. - */ -#define XFS_ALLOC_AG_MAX_USABLE(mp) \ - ((mp)->m_sb.sb_agblocks - XFS_BB_TO_FSB(mp, XFS_FSS_TO_BB(mp, 4)) - 7) - - -/* * Argument structure for xfs_alloc routines. * This is turned into a structure to avoid having 20 arguments passed * down several levels of the stack. @@ -133,6 +97,11 @@ typedef struct xfs_alloc_arg { #define XFS_ALLOC_INITIAL_USER_DATA (1 << 1)/* special case start of file */ #define XFS_ALLOC_USERDATA_ZERO (1 << 2)/* zero extent on allocation */ +/* freespace limit calculations */ +#define XFS_ALLOC_AGFL_RESERVE 4 +unsigned int xfs_alloc_set_aside(struct xfs_mount *mp); +unsigned int xfs_alloc_ag_max_usable(struct xfs_mount *mp); + xfs_extlen_t xfs_alloc_longest_free_extent(struct xfs_mount *mp, struct xfs_perag *pag, xfs_extlen_t need); unsigned int xfs_alloc_min_freelist(struct xfs_mount *mp, diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c index 2c28f2a..61c0231 100644 --- a/fs/xfs/libxfs/xfs_bmap.c +++ b/fs/xfs/libxfs/xfs_bmap.c @@ -3672,7 +3672,7 @@ xfs_bmap_btalloc( args.fsbno = ap->blkno; /* Trim the allocation back to the maximum an AG can fit. */ - args.maxlen = MIN(ap->length, XFS_ALLOC_AG_MAX_USABLE(mp)); + args.maxlen = MIN(ap->length, mp->m_ag_max_usable); args.firstblock = *ap->firstblock; blen = 0; if (nullfb) { diff --git a/fs/xfs/libxfs/xfs_sb.c b/fs/xfs/libxfs/xfs_sb.c index f86226b..59c9f59 100644 --- a/fs/xfs/libxfs/xfs_sb.c +++ b/fs/xfs/libxfs/xfs_sb.c @@ -749,6 +749,8 @@ xfs_sb_mount_common( mp->m_ialloc_min_blks = sbp->sb_spino_align; else mp->m_ialloc_min_blks = mp->m_ialloc_blks; + mp->m_alloc_set_aside = xfs_alloc_set_aside(mp); + mp->m_ag_max_usable = xfs_alloc_ag_max_usable(mp); } /* diff --git a/fs/xfs/xfs_discard.c b/fs/xfs/xfs_discard.c index 272c3f8..4ff499a 100644 --- a/fs/xfs/xfs_discard.c +++ b/fs/xfs/xfs_discard.c @@ -179,7 +179,7 @@ xfs_ioc_trim( * matter as trimming blocks is an advisory interface. */ if (range.start >= XFS_FSB_TO_B(mp, mp->m_sb.sb_dblocks) || - range.minlen > XFS_FSB_TO_B(mp, XFS_ALLOC_AG_MAX_USABLE(mp)) || + range.minlen > XFS_FSB_TO_B(mp, mp->m_ag_max_usable) || range.len < mp->m_sb.sb_blocksize) return -EINVAL; diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c index 8a85e49..3772f6c 100644 --- a/fs/xfs/xfs_fsops.c +++ b/fs/xfs/xfs_fsops.c @@ -583,6 +583,7 @@ xfs_growfs_data_private( } else mp->m_maxicount = 0; xfs_set_low_space_thresholds(mp); + mp->m_alloc_set_aside = xfs_alloc_set_aside(mp); /* update secondary superblocks. */ for (agno = 1; agno < nagcount; agno++) { @@ -720,7 +721,7 @@ xfs_fs_counts( cnt->allocino = percpu_counter_read_positive(&mp->m_icount); cnt->freeino = percpu_counter_read_positive(&mp->m_ifree); cnt->freedata = percpu_counter_read_positive(&mp->m_fdblocks) - - XFS_ALLOC_SET_ASIDE(mp); + mp->m_alloc_set_aside; spin_lock(&mp->m_sb_lock); cnt->freertx = mp->m_sb.sb_frextents; @@ -793,7 +794,7 @@ retry: __int64_t free; free = percpu_counter_sum(&mp->m_fdblocks) - - XFS_ALLOC_SET_ASIDE(mp); + mp->m_alloc_set_aside; if (!free) goto out; /* ENOSPC and fdblks_delta = 0 */ diff --git a/fs/xfs/xfs_log_recover.c b/fs/xfs/xfs_log_recover.c index 0c41bd2..b33187b 100644 --- a/fs/xfs/xfs_log_recover.c +++ b/fs/xfs/xfs_log_recover.c @@ -5027,6 +5027,7 @@ xlog_do_recover( xfs_warn(mp, "Failed post-recovery per-ag init: %d", error); return error; } + mp->m_alloc_set_aside = xfs_alloc_set_aside(mp); xlog_recover_check_summary(log); diff --git a/fs/xfs/xfs_mount.c b/fs/xfs/xfs_mount.c index 8af1c88..879f3ef 100644 --- a/fs/xfs/xfs_mount.c +++ b/fs/xfs/xfs_mount.c @@ -1219,7 +1219,7 @@ xfs_mod_fdblocks( batch = XFS_FDBLOCKS_BATCH; __percpu_counter_add(&mp->m_fdblocks, delta, batch); - if (__percpu_counter_compare(&mp->m_fdblocks, XFS_ALLOC_SET_ASIDE(mp), + if (__percpu_counter_compare(&mp->m_fdblocks, mp->m_alloc_set_aside, XFS_FDBLOCKS_BATCH) >= 0) { /* we had space! */ return 0; diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h index 0ed0f29..b36676c 100644 --- a/fs/xfs/xfs_mount.h +++ b/fs/xfs/xfs_mount.h @@ -123,6 +123,8 @@ typedef struct xfs_mount { uint m_in_maxlevels; /* max inobt btree levels. */ uint m_rmap_maxlevels; /* max rmap btree levels */ xfs_extlen_t m_ag_prealloc_blocks; /* reserved ag blocks */ + uint m_alloc_set_aside; /* space we can't use */ + uint m_ag_max_usable; /* max space per AG */ struct radix_tree_root m_perag_tree; /* per-ag accounting info */ spinlock_t m_perag_lock; /* lock for m_perag_tree */ struct mutex m_growlock; /* growfs mutex */ diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c index bf63f6d..1575849 100644 --- a/fs/xfs/xfs_super.c +++ b/fs/xfs/xfs_super.c @@ -1076,7 +1076,7 @@ xfs_fs_statfs( statp->f_blocks = sbp->sb_dblocks - lsize; spin_unlock(&mp->m_sb_lock); - statp->f_bfree = fdblocks - XFS_ALLOC_SET_ASIDE(mp); + statp->f_bfree = fdblocks - mp->m_alloc_set_aside; statp->f_bavail = statp->f_bfree; fakeinos = statp->f_bfree << sbp->sb_inopblog; _______________________________________________ xfs mailing list xfs@oss.sgi.com http://oss.sgi.com/mailman/listinfo/xfs
next prev parent reply other threads:[~2016-06-17 1:21 UTC|newest] Thread overview: 472+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-06-17 1:17 [PATCH v6 000/119] xfs: add reverse mapping, reflink, dedupe, and online scrub support Darrick J. Wong 2016-06-17 1:17 ` Darrick J. Wong 2016-06-17 1:17 ` [PATCH 001/119] vfs: fix return type of ioctl_file_dedupe_range Darrick J. Wong 2016-06-17 1:17 ` Darrick J. Wong 2016-06-17 11:32 ` Christoph Hellwig 2016-06-17 11:32 ` Christoph Hellwig 2016-06-28 19:19 ` Darrick J. Wong 2016-06-28 19:19 ` Darrick J. Wong 2016-06-17 1:18 ` [PATCH 002/119] vfs: support FS_XFLAG_REFLINK and FS_XFLAG_COWEXTSIZE Darrick J. Wong 2016-06-17 1:18 ` Darrick J. Wong 2016-06-17 11:41 ` Christoph Hellwig 2016-06-17 11:41 ` Christoph Hellwig 2016-06-17 12:16 ` Brian Foster 2016-06-17 12:16 ` Brian Foster 2016-06-17 15:06 ` Christoph Hellwig 2016-06-17 15:06 ` Christoph Hellwig 2016-06-17 16:54 ` Darrick J. Wong 2016-06-17 16:54 ` Darrick J. Wong 2016-06-17 17:38 ` Brian Foster 2016-06-17 17:38 ` Brian Foster 2016-06-17 1:18 ` [PATCH 003/119] xfs: check offsets of variable length structures Darrick J. Wong 2016-06-17 1:18 ` Darrick J. Wong 2016-06-17 11:33 ` Christoph Hellwig 2016-06-17 11:33 ` Christoph Hellwig 2016-06-17 17:34 ` Brian Foster 2016-06-17 17:34 ` Brian Foster 2016-06-18 18:01 ` Darrick J. Wong 2016-06-18 18:01 ` Darrick J. Wong 2016-06-20 12:38 ` Brian Foster 2016-06-20 12:38 ` Brian Foster 2016-06-17 1:18 ` [PATCH 004/119] xfs: enable buffer deadlock postmortem diagnosis via ftrace Darrick J. Wong 2016-06-17 1:18 ` Darrick J. Wong 2016-06-17 11:34 ` Christoph Hellwig 2016-06-17 11:34 ` Christoph Hellwig 2016-06-21 0:47 ` Dave Chinner 2016-06-21 0:47 ` Dave Chinner 2016-06-17 1:18 ` [PATCH 005/119] xfs: check for a valid error_tag in errortag_add Darrick J. Wong 2016-06-17 1:18 ` Darrick J. Wong 2016-06-17 11:34 ` Christoph Hellwig 2016-06-17 11:34 ` Christoph Hellwig 2016-06-17 1:18 ` [PATCH 006/119] xfs: port differences from xfsprogs libxfs Darrick J. Wong 2016-06-17 1:18 ` Darrick J. Wong 2016-06-17 15:06 ` Christoph Hellwig 2016-06-20 0:21 ` Dave Chinner 2016-06-20 0:21 ` Dave Chinner 2016-07-13 23:39 ` Darrick J. Wong 2016-07-13 23:39 ` Darrick J. Wong 2016-06-17 1:18 ` [PATCH 007/119] xfs: rearrange xfs_bmap_add_free parameters Darrick J. Wong 2016-06-17 1:18 ` Darrick J. Wong 2016-06-17 11:39 ` Christoph Hellwig 2016-06-17 11:39 ` Christoph Hellwig 2016-06-17 1:18 ` [PATCH 008/119] xfs: separate freelist fixing into a separate helper Darrick J. Wong 2016-06-17 1:18 ` Darrick J. Wong 2016-06-17 11:52 ` Christoph Hellwig 2016-06-17 11:52 ` Christoph Hellwig 2016-06-21 0:48 ` Dave Chinner 2016-06-21 0:48 ` Dave Chinner 2016-06-21 1:40 ` Dave Chinner 2016-06-21 1:40 ` Dave Chinner 2016-06-17 1:18 ` [PATCH 009/119] xfs: convert list of extents to free into a regular list Darrick J. Wong 2016-06-17 1:18 ` Darrick J. Wong 2016-06-17 11:59 ` Christoph Hellwig 2016-06-17 11:59 ` Christoph Hellwig 2016-06-18 20:15 ` Darrick J. Wong 2016-06-18 20:15 ` Darrick J. Wong 2016-06-21 0:57 ` Dave Chinner 2016-06-21 0:57 ` Dave Chinner 2016-07-18 3:30 ` Eric Sandeen 2016-06-17 1:18 ` [PATCH 010/119] xfs: create a standard btree size calculator code Darrick J. Wong 2016-06-17 1:18 ` Darrick J. Wong 2016-06-20 14:31 ` Brian Foster 2016-06-20 14:31 ` Brian Foster 2016-06-20 19:34 ` Darrick J. Wong 2016-06-20 19:34 ` Darrick J. Wong 2016-06-17 1:19 ` [PATCH 011/119] xfs: refactor btree maxlevels computation Darrick J. Wong 2016-06-17 1:19 ` Darrick J. Wong 2016-06-20 14:31 ` Brian Foster 2016-06-20 14:31 ` Brian Foster 2016-06-20 18:23 ` Darrick J. Wong 2016-06-20 18:23 ` Darrick J. Wong 2016-06-17 1:19 ` [PATCH 012/119] xfs: during btree split, save new block key & ptr for future insertion Darrick J. Wong 2016-06-17 1:19 ` Darrick J. Wong 2016-06-21 13:00 ` Brian Foster 2016-06-21 13:00 ` Brian Foster 2016-06-27 22:30 ` Darrick J. Wong 2016-06-27 22:30 ` Darrick J. Wong 2016-06-28 12:31 ` Brian Foster 2016-06-28 12:31 ` Brian Foster 2016-06-17 1:19 ` [PATCH 013/119] xfs: support btrees with overlapping intervals for keys Darrick J. Wong 2016-06-17 1:19 ` Darrick J. Wong 2016-06-22 15:17 ` Brian Foster 2016-06-22 15:17 ` Brian Foster 2016-06-28 3:26 ` Darrick J. Wong 2016-06-28 3:26 ` Darrick J. Wong 2016-06-28 12:32 ` Brian Foster 2016-06-28 12:32 ` Brian Foster 2016-06-28 17:36 ` Darrick J. Wong 2016-06-28 17:36 ` Darrick J. Wong 2016-07-06 4:59 ` Dave Chinner 2016-07-06 4:59 ` Dave Chinner 2016-07-06 8:09 ` Darrick J. Wong 2016-07-06 8:09 ` Darrick J. Wong 2016-06-17 1:19 ` [PATCH 014/119] xfs: introduce interval queries on btrees Darrick J. Wong 2016-06-17 1:19 ` Darrick J. Wong 2016-06-22 15:18 ` Brian Foster 2016-06-22 15:18 ` Brian Foster 2016-06-27 21:07 ` Darrick J. Wong 2016-06-27 21:07 ` Darrick J. Wong 2016-06-28 12:32 ` Brian Foster 2016-06-28 12:32 ` Brian Foster 2016-06-28 16:29 ` Darrick J. Wong 2016-06-28 16:29 ` Darrick J. Wong 2016-06-17 1:19 ` [PATCH 015/119] xfs: refactor btree owner change into a separate visit-blocks function Darrick J. Wong 2016-06-17 1:19 ` Darrick J. Wong 2016-06-23 17:19 ` Brian Foster 2016-06-23 17:19 ` Brian Foster 2016-06-17 1:19 ` [PATCH 016/119] xfs: move deferred operations into a separate file Darrick J. Wong 2016-06-17 1:19 ` Darrick J. Wong 2016-06-27 13:14 ` Brian Foster 2016-06-27 13:14 ` Brian Foster 2016-06-27 19:14 ` Darrick J. Wong 2016-06-27 19:14 ` Darrick J. Wong 2016-06-28 12:32 ` Brian Foster 2016-06-28 12:32 ` Brian Foster 2016-06-28 18:51 ` Darrick J. Wong 2016-06-28 18:51 ` Darrick J. Wong 2016-06-17 1:19 ` [PATCH 017/119] xfs: add tracepoints for the deferred ops mechanism Darrick J. Wong 2016-06-17 1:19 ` Darrick J. Wong 2016-06-27 13:15 ` Brian Foster 2016-06-27 13:15 ` Brian Foster 2016-06-17 1:19 ` [PATCH 018/119] xfs: enable the xfs_defer mechanism to process extents to free Darrick J. Wong 2016-06-17 1:19 ` Darrick J. Wong 2016-06-27 13:15 ` Brian Foster 2016-06-27 13:15 ` Brian Foster 2016-06-27 21:41 ` Darrick J. Wong 2016-06-27 21:41 ` Darrick J. Wong 2016-06-27 22:00 ` Darrick J. Wong 2016-06-27 22:00 ` Darrick J. Wong 2016-06-28 12:32 ` Brian Foster 2016-06-28 12:32 ` Brian Foster 2016-06-28 16:33 ` Darrick J. Wong 2016-06-28 16:33 ` Darrick J. Wong 2016-06-17 1:19 ` [PATCH 019/119] xfs: rework xfs_bmap_free callers to use xfs_defer_ops Darrick J. Wong 2016-06-17 1:19 ` Darrick J. Wong 2016-06-17 1:20 ` [PATCH 020/119] xfs: change xfs_bmap_{finish, cancel, init, free} -> xfs_defer_* Darrick J. Wong 2016-06-17 1:20 ` Darrick J. Wong 2016-06-30 0:11 ` Darrick J. Wong 2016-06-30 0:11 ` Darrick J. Wong 2016-06-17 1:20 ` [PATCH 021/119] xfs: rename flist/free_list to dfops Darrick J. Wong 2016-06-17 1:20 ` Darrick J. Wong 2016-06-17 1:20 ` [PATCH 022/119] xfs: add tracepoints and error injection for deferred extent freeing Darrick J. Wong 2016-06-17 1:20 ` Darrick J. Wong 2016-06-17 1:20 ` [PATCH 023/119] xfs: introduce rmap btree definitions Darrick J. Wong 2016-06-17 1:20 ` Darrick J. Wong 2016-06-30 17:32 ` Brian Foster 2016-06-30 17:32 ` Brian Foster 2016-06-17 1:20 ` [PATCH 024/119] xfs: add rmap btree stats infrastructure Darrick J. Wong 2016-06-17 1:20 ` Darrick J. Wong 2016-06-30 17:32 ` Brian Foster 2016-06-30 17:32 ` Brian Foster 2016-06-17 1:20 ` [PATCH 025/119] xfs: rmap btree add more reserved blocks Darrick J. Wong 2016-06-17 1:20 ` Darrick J. Wong 2016-06-30 17:32 ` Brian Foster 2016-06-30 17:32 ` Brian Foster 2016-06-17 1:20 ` [PATCH 026/119] xfs: add owner field to extent allocation and freeing Darrick J. Wong 2016-06-17 1:20 ` Darrick J. Wong 2016-07-06 4:01 ` Dave Chinner 2016-07-06 4:01 ` Dave Chinner 2016-07-06 6:44 ` Darrick J. Wong 2016-07-06 6:44 ` Darrick J. Wong 2016-07-07 15:12 ` Brian Foster 2016-07-07 15:12 ` Brian Foster 2016-07-07 19:09 ` Darrick J. Wong 2016-07-07 19:09 ` Darrick J. Wong 2016-07-07 22:55 ` Dave Chinner 2016-07-07 22:55 ` Dave Chinner 2016-07-08 11:37 ` Brian Foster 2016-07-08 11:37 ` Brian Foster 2016-06-17 1:20 ` [PATCH 027/119] xfs: introduce rmap extent operation stubs Darrick J. Wong 2016-06-17 1:20 ` Darrick J. Wong 2016-06-17 1:20 ` [PATCH 028/119] xfs: define the on-disk rmap btree format Darrick J. Wong 2016-06-17 1:20 ` Darrick J. Wong 2016-07-06 4:05 ` Dave Chinner 2016-07-06 4:05 ` Dave Chinner 2016-07-06 6:44 ` Darrick J. Wong 2016-07-06 6:44 ` Darrick J. Wong 2016-07-07 18:41 ` Brian Foster 2016-07-07 18:41 ` Brian Foster 2016-07-07 19:18 ` Darrick J. Wong 2016-07-07 19:18 ` Darrick J. Wong 2016-07-07 23:14 ` Dave Chinner 2016-07-07 23:14 ` Dave Chinner 2016-07-07 23:58 ` Darrick J. Wong 2016-07-07 23:58 ` Darrick J. Wong 2016-06-17 1:20 ` [PATCH 029/119] xfs: add rmap btree growfs support Darrick J. Wong 2016-06-17 1:20 ` Darrick J. Wong 2016-06-17 1:21 ` [PATCH 030/119] xfs: rmap btree transaction reservations Darrick J. Wong 2016-06-17 1:21 ` Darrick J. Wong 2016-07-08 13:21 ` Brian Foster 2016-07-08 13:21 ` Brian Foster 2016-06-17 1:21 ` Darrick J. Wong [this message] 2016-06-17 1:21 ` [PATCH 031/119] xfs: rmap btree requires more reserved free space Darrick J. Wong 2016-07-08 13:21 ` Brian Foster 2016-07-08 13:21 ` Brian Foster 2016-07-13 16:50 ` Darrick J. Wong 2016-07-13 16:50 ` Darrick J. Wong 2016-07-13 18:32 ` Brian Foster 2016-07-13 18:32 ` Brian Foster 2016-07-13 23:50 ` Dave Chinner 2016-07-13 23:50 ` Dave Chinner 2016-06-17 1:21 ` [PATCH 032/119] xfs: add rmap btree operations Darrick J. Wong 2016-06-17 1:21 ` Darrick J. Wong 2016-07-08 18:33 ` Brian Foster 2016-07-08 18:33 ` Brian Foster 2016-07-08 23:53 ` Darrick J. Wong 2016-07-08 23:53 ` Darrick J. Wong 2016-06-17 1:21 ` [PATCH 033/119] xfs: support overlapping intervals in the rmap btree Darrick J. Wong 2016-06-17 1:21 ` Darrick J. Wong 2016-07-08 18:33 ` Brian Foster 2016-07-08 18:33 ` Brian Foster 2016-07-09 0:14 ` Darrick J. Wong 2016-07-09 0:14 ` Darrick J. Wong 2016-07-09 13:25 ` Brian Foster 2016-07-09 13:25 ` Brian Foster 2016-06-17 1:21 ` [PATCH 034/119] xfs: teach rmapbt to support interval queries Darrick J. Wong 2016-06-17 1:21 ` Darrick J. Wong 2016-07-08 18:34 ` Brian Foster 2016-07-08 18:34 ` Brian Foster 2016-07-09 0:16 ` Darrick J. Wong 2016-07-09 0:16 ` Darrick J. Wong 2016-07-09 13:25 ` Brian Foster 2016-07-09 13:25 ` Brian Foster 2016-06-17 1:21 ` [PATCH 035/119] xfs: add tracepoints for the rmap functions Darrick J. Wong 2016-06-17 1:21 ` Darrick J. Wong 2016-07-08 18:34 ` Brian Foster 2016-07-08 18:34 ` Brian Foster 2016-06-17 1:21 ` [PATCH 036/119] xfs: add an extent to the rmap btree Darrick J. Wong 2016-06-17 1:21 ` Darrick J. Wong 2016-07-11 18:49 ` Brian Foster 2016-07-11 18:49 ` Brian Foster 2016-07-11 23:01 ` Darrick J. Wong 2016-07-11 23:01 ` Darrick J. Wong 2016-06-17 1:21 ` [PATCH 037/119] xfs: remove an extent from " Darrick J. Wong 2016-06-17 1:21 ` Darrick J. Wong 2016-07-11 18:49 ` Brian Foster 2016-07-11 18:49 ` Brian Foster 2016-06-17 1:21 ` [PATCH 038/119] xfs: convert unwritten status of reverse mappings Darrick J. Wong 2016-06-17 1:21 ` Darrick J. Wong 2016-06-30 0:15 ` Darrick J. Wong 2016-06-30 0:15 ` Darrick J. Wong 2016-07-13 18:27 ` Brian Foster 2016-07-13 18:27 ` Brian Foster 2016-07-13 20:43 ` Darrick J. Wong 2016-07-13 20:43 ` Darrick J. Wong 2016-06-17 1:22 ` [PATCH 039/119] xfs: add rmap btree insert and delete helpers Darrick J. Wong 2016-06-17 1:22 ` Darrick J. Wong 2016-07-13 18:28 ` Brian Foster 2016-07-13 18:28 ` Brian Foster 2016-07-13 18:37 ` Darrick J. Wong 2016-07-13 18:37 ` Darrick J. Wong 2016-07-13 18:42 ` Brian Foster 2016-07-13 18:42 ` Brian Foster 2016-06-17 1:22 ` [PATCH 040/119] xfs: create helpers for mapping, unmapping, and converting file fork extents Darrick J. Wong 2016-06-17 1:22 ` Darrick J. Wong 2016-07-13 18:28 ` Brian Foster 2016-07-13 18:28 ` Brian Foster 2016-07-13 18:47 ` Darrick J. Wong 2016-07-13 18:47 ` Darrick J. Wong 2016-07-13 23:54 ` Dave Chinner 2016-07-13 23:54 ` Dave Chinner 2016-07-13 23:55 ` Darrick J. Wong 2016-07-13 23:55 ` Darrick J. Wong 2016-06-17 1:22 ` [PATCH 041/119] xfs: create rmap update intent log items Darrick J. Wong 2016-06-17 1:22 ` Darrick J. Wong 2016-07-15 18:33 ` Brian Foster 2016-07-15 18:33 ` Brian Foster 2016-07-16 7:10 ` Darrick J. Wong 2016-07-16 7:10 ` Darrick J. Wong 2016-06-17 1:22 ` [PATCH 042/119] xfs: log rmap intent items Darrick J. Wong 2016-06-17 1:22 ` Darrick J. Wong 2016-07-15 18:33 ` Brian Foster 2016-07-15 18:33 ` Brian Foster 2016-07-16 7:34 ` Darrick J. Wong 2016-07-16 7:34 ` Darrick J. Wong 2016-07-18 12:55 ` Brian Foster 2016-07-18 12:55 ` Brian Foster 2016-07-19 17:10 ` Darrick J. Wong 2016-07-19 17:10 ` Darrick J. Wong 2016-06-17 1:22 ` [PATCH 043/119] xfs: enable the xfs_defer mechanism to process rmaps to update Darrick J. Wong 2016-06-17 1:22 ` Darrick J. Wong 2016-07-15 18:33 ` Brian Foster 2016-07-15 18:33 ` Brian Foster 2016-06-17 1:22 ` [PATCH 044/119] xfs: propagate bmap updates to rmapbt Darrick J. Wong 2016-06-17 1:22 ` Darrick J. Wong 2016-07-15 18:33 ` Brian Foster 2016-07-15 18:33 ` Brian Foster 2016-07-16 7:26 ` Darrick J. Wong 2016-07-16 7:26 ` Darrick J. Wong 2016-07-18 1:21 ` Dave Chinner 2016-07-18 1:21 ` Dave Chinner 2016-07-18 12:56 ` Brian Foster 2016-07-18 12:56 ` Brian Foster 2016-07-18 12:55 ` Brian Foster 2016-07-18 12:55 ` Brian Foster 2016-07-19 1:53 ` Darrick J. Wong 2016-07-19 1:53 ` Darrick J. Wong 2016-07-19 11:37 ` Brian Foster 2016-07-19 11:37 ` Brian Foster 2016-06-17 1:22 ` [PATCH 045/119] xfs: add rmap btree geometry feature flag Darrick J. Wong 2016-06-17 1:22 ` Darrick J. Wong 2016-07-18 13:34 ` Brian Foster 2016-07-18 13:34 ` Brian Foster 2016-06-17 1:22 ` [PATCH 046/119] xfs: add rmap btree block detection to log recovery Darrick J. Wong 2016-06-17 1:22 ` Darrick J. Wong 2016-07-18 13:34 ` Brian Foster 2016-07-18 13:34 ` Brian Foster 2016-06-17 1:22 ` [PATCH 047/119] xfs: disable XFS_IOC_SWAPEXT when rmap btree is enabled Darrick J. Wong 2016-06-17 1:22 ` Darrick J. Wong 2016-07-18 13:34 ` Brian Foster 2016-07-18 13:34 ` Brian Foster 2016-07-18 16:18 ` Darrick J. Wong 2016-07-18 16:18 ` Darrick J. Wong 2016-06-17 1:22 ` [PATCH 048/119] xfs: don't update rmapbt when fixing agfl Darrick J. Wong 2016-06-17 1:22 ` Darrick J. Wong 2016-07-18 13:34 ` Brian Foster 2016-07-18 13:34 ` Brian Foster 2016-07-18 15:53 ` Darrick J. Wong 2016-07-18 15:53 ` Darrick J. Wong 2016-06-17 1:23 ` [PATCH 049/119] xfs: enable the rmap btree functionality Darrick J. Wong 2016-06-17 1:23 ` Darrick J. Wong 2016-07-18 13:34 ` Brian Foster 2016-07-18 13:34 ` Brian Foster 2016-06-17 1:23 ` [PATCH 050/119] xfs: count the blocks in a btree Darrick J. Wong 2016-06-17 1:23 ` Darrick J. Wong 2016-06-17 1:23 ` [PATCH 051/119] xfs: introduce tracepoints for AG reservation code Darrick J. Wong 2016-06-17 1:23 ` Darrick J. Wong 2016-06-17 1:23 ` [PATCH 052/119] xfs: set up per-AG free space reservations Darrick J. Wong 2016-06-17 1:23 ` Darrick J. Wong 2016-06-17 1:23 ` [PATCH 053/119] xfs: define tracepoints for refcount btree activities Darrick J. Wong 2016-06-17 1:23 ` Darrick J. Wong 2016-06-17 1:23 ` [PATCH 054/119] xfs: introduce refcount btree definitions Darrick J. Wong 2016-06-17 1:23 ` Darrick J. Wong 2016-06-17 1:23 ` [PATCH 055/119] xfs: add refcount btree stats infrastructure Darrick J. Wong 2016-06-17 1:23 ` Darrick J. Wong 2016-06-17 1:23 ` [PATCH 056/119] xfs: refcount btree add more reserved blocks Darrick J. Wong 2016-06-17 1:23 ` Darrick J. Wong 2016-06-17 1:23 ` [PATCH 057/119] xfs: define the on-disk refcount btree format Darrick J. Wong 2016-06-17 1:23 ` Darrick J. Wong 2016-06-17 1:24 ` [PATCH 058/119] xfs: add refcount btree support to growfs Darrick J. Wong 2016-06-17 1:24 ` Darrick J. Wong 2016-06-17 1:24 ` [PATCH 059/119] xfs: account for the refcount btree in the alloc/free log reservation Darrick J. Wong 2016-06-17 1:24 ` Darrick J. Wong 2016-06-17 1:24 ` [PATCH 060/119] xfs: add refcount btree operations Darrick J. Wong 2016-06-17 1:24 ` Darrick J. Wong 2016-06-17 1:24 ` [PATCH 061/119] xfs: create refcount update intent log items Darrick J. Wong 2016-06-17 1:24 ` Darrick J. Wong 2016-06-17 1:24 ` [PATCH 062/119] xfs: log refcount intent items Darrick J. Wong 2016-06-17 1:24 ` Darrick J. Wong 2016-06-17 1:24 ` [PATCH 063/119] xfs: adjust refcount of an extent of blocks in refcount btree Darrick J. Wong 2016-06-17 1:24 ` Darrick J. Wong 2016-06-17 1:24 ` [PATCH 064/119] xfs: connect refcount adjust functions to upper layers Darrick J. Wong 2016-06-17 1:24 ` Darrick J. Wong 2016-06-17 1:24 ` [PATCH 065/119] xfs: adjust refcount when unmapping file blocks Darrick J. Wong 2016-06-17 1:24 ` Darrick J. Wong 2016-06-17 1:24 ` [PATCH 066/119] xfs: add refcount btree block detection to log recovery Darrick J. Wong 2016-06-17 1:24 ` Darrick J. Wong 2016-06-17 1:25 ` [PATCH 067/119] xfs: refcount btree requires more reserved space Darrick J. Wong 2016-06-17 1:25 ` Darrick J. Wong 2016-06-17 1:25 ` [PATCH 068/119] xfs: introduce reflink utility functions Darrick J. Wong 2016-06-17 1:25 ` Darrick J. Wong 2016-06-17 1:25 ` [PATCH 069/119] xfs: create bmbt update intent log items Darrick J. Wong 2016-06-17 1:25 ` Darrick J. Wong 2016-06-17 1:25 ` [PATCH 070/119] xfs: log bmap intent items Darrick J. Wong 2016-06-17 1:25 ` Darrick J. Wong 2016-06-17 1:25 ` [PATCH 071/119] xfs: map an inode's offset to an exact physical block Darrick J. Wong 2016-06-17 1:25 ` Darrick J. Wong 2016-06-17 1:25 ` [PATCH 072/119] xfs: implement deferred bmbt map/unmap operations Darrick J. Wong 2016-06-17 1:25 ` Darrick J. Wong 2016-06-17 1:25 ` [PATCH 073/119] xfs: return work remaining at the end of a bunmapi operation Darrick J. Wong 2016-06-17 1:25 ` Darrick J. Wong 2016-06-17 1:25 ` [PATCH 074/119] xfs: define tracepoints for reflink activities Darrick J. Wong 2016-06-17 1:25 ` Darrick J. Wong 2016-06-17 1:25 ` [PATCH 075/119] xfs: add reflink feature flag to geometry Darrick J. Wong 2016-06-17 1:25 ` Darrick J. Wong 2016-06-17 1:25 ` [PATCH 076/119] xfs: don't allow reflinked dir/dev/fifo/socket/pipe files Darrick J. Wong 2016-06-17 1:25 ` Darrick J. Wong 2016-06-17 1:26 ` [PATCH 077/119] xfs: introduce the CoW fork Darrick J. Wong 2016-06-17 1:26 ` Darrick J. Wong 2016-06-17 1:26 ` [PATCH 078/119] xfs: support bmapping delalloc extents in " Darrick J. Wong 2016-06-17 1:26 ` Darrick J. Wong 2016-06-17 1:26 ` [PATCH 079/119] xfs: create delalloc extents in " Darrick J. Wong 2016-06-17 1:26 ` Darrick J. Wong 2016-06-17 1:26 ` [PATCH 080/119] xfs: support allocating delayed " Darrick J. Wong 2016-06-17 1:26 ` Darrick J. Wong 2016-06-17 1:26 ` [PATCH 081/119] xfs: allocate " Darrick J. Wong 2016-06-17 1:26 ` Darrick J. Wong 2016-06-17 1:26 ` [PATCH 082/119] xfs: support removing extents from " Darrick J. Wong 2016-06-17 1:26 ` Darrick J. Wong 2016-06-17 1:26 ` [PATCH 083/119] xfs: move mappings from cow fork to data fork after copy-write Darrick J. Wong 2016-06-17 1:26 ` Darrick J. Wong 2016-06-17 1:26 ` [PATCH 084/119] xfs: implement CoW for directio writes Darrick J. Wong 2016-06-17 1:26 ` Darrick J. Wong 2016-06-17 1:26 ` [PATCH 085/119] xfs: copy-on-write reflinked blocks when zeroing ranges of blocks Darrick J. Wong 2016-06-17 1:26 ` Darrick J. Wong 2016-06-17 1:27 ` [PATCH 086/119] xfs: cancel CoW reservations and clear inode reflink flag when freeing blocks Darrick J. Wong 2016-06-17 1:27 ` Darrick J. Wong 2016-06-17 1:27 ` [PATCH 087/119] xfs: cancel pending CoW reservations when destroying inodes Darrick J. Wong 2016-06-17 1:27 ` Darrick J. Wong 2016-06-17 1:27 ` [PATCH 088/119] xfs: store in-progress CoW allocations in the refcount btree Darrick J. Wong 2016-06-17 1:27 ` Darrick J. Wong 2016-06-17 1:27 ` [PATCH 089/119] xfs: reflink extents from one file to another Darrick J. Wong 2016-06-17 1:27 ` Darrick J. Wong 2016-06-17 1:27 ` [PATCH 090/119] xfs: add clone file and clone range vfs functions Darrick J. Wong 2016-06-17 1:27 ` Darrick J. Wong 2016-06-17 1:27 ` [PATCH 091/119] xfs: add dedupe range vfs function Darrick J. Wong 2016-06-17 1:27 ` Darrick J. Wong 2016-06-17 1:27 ` [PATCH 092/119] xfs: teach get_bmapx and fiemap about shared extents and the CoW fork Darrick J. Wong 2016-06-17 1:27 ` Darrick J. Wong 2016-06-17 1:27 ` [PATCH 093/119] xfs: swap inode reflink flags when swapping inode extents Darrick J. Wong 2016-06-17 1:27 ` Darrick J. Wong 2016-06-17 1:27 ` [PATCH 094/119] xfs: unshare a range of blocks via fallocate Darrick J. Wong 2016-06-17 1:27 ` Darrick J. Wong 2016-06-17 1:28 ` [PATCH 095/119] xfs: CoW shared EOF block when truncating file Darrick J. Wong 2016-06-17 1:28 ` Darrick J. Wong 2016-06-17 1:28 ` [PATCH 096/119] xfs: support FS_XFLAG_REFLINK on reflink filesystems Darrick J. Wong 2016-06-17 1:28 ` Darrick J. Wong 2016-06-17 1:28 ` [PATCH 097/119] xfs: create a separate cow extent size hint for the allocator Darrick J. Wong 2016-06-17 1:28 ` Darrick J. Wong 2016-06-17 1:28 ` [PATCH 098/119] xfs: preallocate blocks for worst-case btree expansion Darrick J. Wong 2016-06-17 1:28 ` Darrick J. Wong 2016-06-17 1:28 ` [PATCH 099/119] xfs: don't allow reflink when the AG is low on space Darrick J. Wong 2016-06-17 1:28 ` Darrick J. Wong 2016-06-17 1:28 ` [PATCH 100/119] xfs: try other AGs to allocate a BMBT block Darrick J. Wong 2016-06-17 1:28 ` Darrick J. Wong 2016-06-17 1:28 ` [PATCH 101/119] xfs: promote buffered writes to CoW when cowextsz is set Darrick J. Wong 2016-06-17 1:28 ` Darrick J. Wong 2016-06-17 1:28 ` [PATCH 102/119] xfs: garbage collect old cowextsz reservations Darrick J. Wong 2016-06-17 1:28 ` Darrick J. Wong 2016-06-17 1:28 ` [PATCH 103/119] xfs: provide switch to force filesystem to copy-on-write all the time Darrick J. Wong 2016-06-17 1:28 ` Darrick J. Wong 2016-06-17 1:29 ` [PATCH 104/119] xfs: increase log reservations for reflink Darrick J. Wong 2016-06-17 1:29 ` Darrick J. Wong 2016-06-17 1:29 ` [PATCH 105/119] xfs: use interval query for rmap alloc operations on shared files Darrick J. Wong 2016-06-17 1:29 ` Darrick J. Wong 2016-06-17 1:29 ` [PATCH 106/119] xfs: convert unwritten status of reverse mappings for " Darrick J. Wong 2016-06-17 1:29 ` Darrick J. Wong 2016-06-17 1:29 ` [PATCH 107/119] xfs: set a default CoW extent size of 32 blocks Darrick J. Wong 2016-06-17 1:29 ` Darrick J. Wong 2016-06-17 1:29 ` [PATCH 108/119] xfs: don't allow realtime and reflinked files to mix Darrick J. Wong 2016-06-17 1:29 ` Darrick J. Wong 2016-06-17 1:29 ` [PATCH 109/119] xfs: don't mix reflink and DAX mode for now Darrick J. Wong 2016-06-17 1:29 ` Darrick J. Wong 2016-06-17 1:29 ` [PATCH 110/119] xfs: fail ->bmap for reflink inodes Darrick J. Wong 2016-06-17 1:29 ` Darrick J. Wong 2016-06-17 1:29 ` [PATCH 111/119] xfs: recognize the reflink feature bit Darrick J. Wong 2016-06-17 1:29 ` Darrick J. Wong 2016-06-17 1:29 ` [PATCH 112/119] xfs: introduce the XFS_IOC_GETFSMAPX ioctl Darrick J. Wong 2016-06-17 1:29 ` Darrick J. Wong 2016-06-17 1:30 ` [PATCH 113/119] xfs: scrub btree records and pointers while querying Darrick J. Wong 2016-06-17 1:30 ` Darrick J. Wong 2016-06-17 1:30 ` [PATCH 114/119] xfs: create sysfs hooks to scrub various files Darrick J. Wong 2016-06-17 1:30 ` Darrick J. Wong 2016-06-17 1:30 ` [PATCH 115/119] xfs: support scrubbing free space btrees Darrick J. Wong 2016-06-17 1:30 ` Darrick J. Wong 2016-06-17 1:30 ` [PATCH 116/119] xfs: support scrubbing inode btrees Darrick J. Wong 2016-06-17 1:30 ` Darrick J. Wong 2016-06-17 1:30 ` [PATCH 117/119] xfs: support scrubbing rmap btree Darrick J. Wong 2016-06-17 1:30 ` Darrick J. Wong 2016-06-17 1:30 ` [PATCH 118/119] xfs: support scrubbing refcount btree Darrick J. Wong 2016-06-17 1:30 ` Darrick J. Wong 2016-06-17 1:30 ` [PATCH 119/119] xfs: add btree scrub tracepoints Darrick J. Wong 2016-06-17 1:30 ` Darrick J. Wong
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=146612647122.12839.13018596528662402580.stgit@birch.djwong.org \ --to=darrick.wong@oracle.com \ --cc=david@fromorbit.com \ --cc=dchinner@redhat.com \ --cc=linux-fsdevel@vger.kernel.org \ --cc=vishal.l.verma@intel.com \ --cc=xfs@oss.sgi.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.