All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] [RFC] xfs: allocate log vector buffers outside CIL context lock
@ 2016-01-19  4:31 Dave Chinner
  2016-01-20  1:58 ` [PATCH v2] " Dave Chinner
  0 siblings, 1 reply; 9+ messages in thread
From: Dave Chinner @ 2016-01-19  4:31 UTC (permalink / raw)
  To: xfs

From: Dave Chinner <dchinner@redhat.com>

One of the problems we currently have with delayed logging is that
under serious memory pressure we can deadlock memory reclaim. THis
occurs when memory reclaim (such as run by kswapd) is reclaiming XFS
inodes and issues a log force to unpin inodes that are dirty in the
CIL.

The CIL is pushed, but this will only occur once it gets the CIL
context lock to ensure that all committing transactions are complete
and no new transactions start being committed to the CIL while the
push switches to a new context.

The deadlock occurs when the CIL context lock is held by a
committing process that is doing memory allocation for log vector
buffers, and that allocation is then blocked on memory reclaim
making progress. Memory reclaim, however, is blocked waiting for
a log force to make progress, and so we effectively deadlock at this
point.

To solve this problem, we have to move the CIL log vector buffer
allocation outside of the context lock so that memory reclaim can
always make progress when it needs to force the log. The problem
with doing this is that a CIL push can take place while we are
determining if we need to allocate a new log vector buffer for
an item and hence the current log vector may go away without
warning. That means we canot rely on the existing log vector being
present when we finally grab the context lock and so we must have a
replacement buffer ready to go at all times.

To ensure this, introduce a "shadow log vector" buffer that is
always guaranteed to be present when we gain the CIL context lock
and format the item. This shadow buffer may or may not be used
during the formatting, but if the log item does not have an existing
log vector buffer or that buffer is too small for the new
modifications, we swap it for the new shadow buffer and format
the modifications into that new log vector buffer.

The result of this is that for any object we modify more than once
in a given CIL checkpoint, we double the memory required
to track dirty regions in the log. For single modifications then
we consume the shadow log vectorwe allocate on commit, and that gets
consumed by the checkpoint. However, if we make multiple
modifications, then the second transaction commit will allocate a
shadow log vector and hence we will end up with double the memory
usage as only one of the log vectors is consumed by the CIL
checkpoint. The remaining shadow vector will be freed when th elog
item is freed.

This can probably be optimised - access to the shadow log vector is
serialised by the object lock (as opposited to the active log
vector, which is controlled by the CIL context lock) and so we can
probably free shadow log vector from some objects when the log item
is marked clean on removal from the AIL.

The patch survives smoke testing and some load testing. I haven't
done any real performance testing, but I have done some load and low
memory testing and it hasn't exploded (perf did - it failed several
order 2 memory allocations, which XFS continued along just fine).

That said, I don't have a reliable deadlock reproducer in the first
place, so I'm interested i hearing what people think about this
approach to solve the problem and ways to test and improve it.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
---
 fs/xfs/xfs_buf_item.c     |   1 +
 fs/xfs/xfs_dquot.c        |   1 +
 fs/xfs/xfs_dquot_item.c   |   2 +
 fs/xfs/xfs_extfree_item.c |   2 +
 fs/xfs/xfs_inode_item.c   |   1 +
 fs/xfs/xfs_log_cil.c      | 258 +++++++++++++++++++++++++++++++++++-----------
 fs/xfs/xfs_trans.h        |   1 +
 7 files changed, 203 insertions(+), 63 deletions(-)

diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c
index 9220283..3f39d96 100644
--- a/fs/xfs/xfs_buf_item.c
+++ b/fs/xfs/xfs_buf_item.c
@@ -833,6 +833,7 @@ xfs_buf_item_free(
 	xfs_buf_log_item_t	*bip)
 {
 	xfs_buf_item_free_format(bip);
+	kmem_free(bip->bli_item.li_lv_shadow);
 	kmem_zone_free(xfs_buf_item_zone, bip);
 }
 
diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c
index 9c44d38..4569cc4 100644
--- a/fs/xfs/xfs_dquot.c
+++ b/fs/xfs/xfs_dquot.c
@@ -74,6 +74,7 @@ xfs_qm_dqdestroy(
 {
 	ASSERT(list_empty(&dqp->q_lru));
 
+	kmem_free(dqp->q_logitem.qli_item.li_lv_shadow);
 	mutex_destroy(&dqp->q_qlock);
 
 	XFS_STATS_DEC(dqp->q_mount, xs_qm_dquot);
diff --git a/fs/xfs/xfs_dquot_item.c b/fs/xfs/xfs_dquot_item.c
index 814cff9..2c7a162 100644
--- a/fs/xfs/xfs_dquot_item.c
+++ b/fs/xfs/xfs_dquot_item.c
@@ -370,6 +370,8 @@ xfs_qm_qoffend_logitem_committed(
 	spin_lock(&ailp->xa_lock);
 	xfs_trans_ail_delete(ailp, &qfs->qql_item, SHUTDOWN_LOG_IO_ERROR);
 
+	kmem_free(qfs->qql_item.li_lv_shadow);
+	kmem_free(lip->li_lv_shadow);
 	kmem_free(qfs);
 	kmem_free(qfe);
 	return (xfs_lsn_t)-1;
diff --git a/fs/xfs/xfs_extfree_item.c b/fs/xfs/xfs_extfree_item.c
index 4aa0153..ab77946 100644
--- a/fs/xfs/xfs_extfree_item.c
+++ b/fs/xfs/xfs_extfree_item.c
@@ -40,6 +40,7 @@ void
 xfs_efi_item_free(
 	struct xfs_efi_log_item	*efip)
 {
+	kmem_free(efip->efi_item.li_lv_shadow);
 	if (efip->efi_format.efi_nextents > XFS_EFI_MAX_FAST_EXTENTS)
 		kmem_free(efip);
 	else
@@ -300,6 +301,7 @@ static inline struct xfs_efd_log_item *EFD_ITEM(struct xfs_log_item *lip)
 STATIC void
 xfs_efd_item_free(struct xfs_efd_log_item *efdp)
 {
+	kmem_free(efdp->efd_item.li_lv_shadow);
 	if (efdp->efd_format.efd_nextents > XFS_EFD_MAX_FAST_EXTENTS)
 		kmem_free(efdp);
 	else
diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c
index bd9808f..45a882f 100644
--- a/fs/xfs/xfs_inode_item.c
+++ b/fs/xfs/xfs_inode_item.c
@@ -649,6 +649,7 @@ void
 xfs_inode_item_destroy(
 	xfs_inode_t	*ip)
 {
+	kmem_free(ip->i_itemp->ili_item.li_lv_shadow);
 	kmem_zone_free(xfs_ili_zone, ip->i_itemp);
 }
 
diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c
index 4e76493..bde71e5 100644
--- a/fs/xfs/xfs_log_cil.c
+++ b/fs/xfs/xfs_log_cil.c
@@ -79,6 +79,144 @@ xlog_cil_init_post_recovery(
 	log->l_cilp->xc_ctx->sequence = 1;
 }
 
+static inline int
+xlog_cil_iovec_space(
+	uint	niovecs)
+{
+	return round_up((sizeof(struct xfs_log_vec) +
+					niovecs * sizeof(struct xfs_log_iovec)),
+			sizeof(uint64_t));
+}
+
+/*
+ * Allocate or pin log vector buffers for CIL insertion.
+ *
+ * The CIL currently uses disposable buffers for copying a snapshot of the
+ * modified items into the log during a push. The biggest problem with this is
+ * the requirement to allocate the disposable buffer during the commit if:
+ *	a) does not exist; or
+ *	b) it is too small
+ *
+ * If we do this allocation within xlog_cil_insert_format_items(), it is done
+ * under the xc_ctx_lock, which means that a CIL push cannot occur during
+ * the memory allocation. This means that we have a potential deadlock situation
+ * under low memory conditions when we have lots of dirty metadata pinned in
+ * the CIL and we need a CIL commit to occur to free memory.
+ *
+ * To avoid this, we need to move the memory allocation outside the
+ * xc_ctx_lock(), but because the log vector buffers are disposable, that opens
+ * up a TOCTOU race condition w.r.t. the CIL commiting and removing the log
+ * vector buffers between the check and the formatting of the item into the
+ * log vector buffer within the xc_ctx_lock.
+ *
+ * Because the log vector buffer needs to be unchanged during the CIL push
+ * process, we cannot share the buffer between the transaction commit (which
+ * modifies the buffer) and the CIL push context that is writing the changes
+ * into the log. This means skipping preallocation of buffer space is
+ * unreliable, but we most definitely do not want to be allocating and freeing
+ * buffers unnecessarily during commits when overwrites can be done safely.
+ *
+ * The simplest solution to this problem is to allocate a shadow buffer when a
+ * log item is committed for the second time, and then to only use this buffer
+ * if necessary. The buffer can remain attached to the log item until such time
+ * it is needed, and this is the buffer that is reallocated to match the size of
+ * the incoming modification. Then during the formatting of the item we can swap
+ * the active buffer with the new one if we can't reuse the existing buffer. We
+ * don't free the old buffer as it may be reused on the next modification if
+ * it's size is right, otherwise we'll free and reallocate it at that point.
+ *
+ * This function builds a vector for the changes in each log item in the
+ * transaction. It then works out the length of the buffer needed for each log
+ * item, allocates them and attaches the vector to the log item in preparation
+ * for the formatting step which occurs under the xc_ctx_lock.
+ *
+ * While this means the memory footprint goes up, it avoids the repeated
+ * alloc/free pattern that repeated modifications of an item would otherwise
+ * cause, and hence minimises the CPU overhead of such behaviour.
+ */
+static void
+xlog_cil_alloc_shadow_bufs(
+	struct xlog		*log,
+	struct xfs_trans	*tp)
+{
+	struct xfs_log_item_desc *lidp;
+
+	list_for_each_entry(lidp, &tp->t_items, lid_trans) {
+		struct xfs_log_item *lip = lidp->lid_item;
+		struct xfs_log_vec *lv;
+		int	niovecs = 0;
+		int	nbytes = 0;
+		int	buf_size;
+		bool	ordered = false;
+
+		/* Skip items which aren't dirty in this transaction. */
+		if (!(lidp->lid_flags & XFS_LID_DIRTY))
+			continue;
+
+		/* get number of vecs and size of data to be stored */
+		lip->li_ops->iop_size(lip, &niovecs, &nbytes);
+
+		/*
+		 * Ordered items need to be tracked but we do not wish to write
+		 * them. We need a logvec to track the object, but we do not
+		 * need an iovec or buffer to be allocated for copying data.
+		 */
+		if (niovecs == XFS_LOG_VEC_ORDERED) {
+			ordered = true;
+			niovecs = 0;
+			nbytes = 0;
+		}
+
+		/*
+		 * We 64-bit align the length of each iovec so that the start
+		 * of the next one is naturally aligned.  We'll need to
+		 * account for that slack space here. Then round nbytes up
+		 * to 64-bit alignment so that the initial buffer alignment is
+		 * easy to calculate and verify.
+		 */
+		nbytes += niovecs * sizeof(uint64_t);
+		nbytes = round_up(nbytes, sizeof(uint64_t));
+
+		/*
+		 * The data buffer needs to start 64-bit aligned, so round up
+		 * that space to ensure we can align it appropriately and not
+		 * overrun the buffer.
+		 */
+		buf_size = nbytes + xlog_cil_iovec_space(niovecs);
+
+		/*
+		 * if we have no shadow buffer, or it is too small, we need to
+		 * reallocate it.
+		 */
+		if (!lip->li_lv_shadow ||
+		    buf_size > lip->li_lv_shadow->lv_size) {
+
+			kmem_free(lip->li_lv_shadow);
+
+			lv = kmem_zalloc(buf_size, KM_SLEEP|KM_NOFS);
+			lv->lv_item = lip;
+			lv->lv_size = buf_size;
+			if (ordered)
+				lv->lv_buf_len = XFS_LOG_VEC_ORDERED;
+			else
+				lv->lv_iovecp = (struct xfs_log_iovec *)&lv[1];
+			lip->li_lv_shadow = lv;
+		} else {
+			/* same or smaller, optimise common overwrite case */
+			lv = lip->li_lv_shadow;
+			lv->lv_buf_len = 0;
+			lv->lv_bytes = 0;
+		}
+
+		/* Ensure the lv is set up according to ->iop_size */
+		lv->lv_niovecs = niovecs;
+
+		/* The allocated data region lies beyond the iovec region */
+		lv->lv_buf = (char *)lv + xlog_cil_iovec_space(niovecs);
+	}
+
+}
+
 /*
  * Prepare the log item for insertion into the CIL. Calculate the difference in
  * log space and vectors it will consume, and if it is a new item pin it as
@@ -101,16 +239,19 @@ xfs_cil_prepare_item(
 	/*
 	 * If there is no old LV, this is the first time we've seen the item in
 	 * this CIL context and so we need to pin it. If we are replacing the
-	 * old_lv, then remove the space it accounts for and free it.
+	 * old_lv, then remove the space it accounts for and make it the shadow
+	 * buffer for later freeing. In both cases we are now switching to the
+	 * shadow buffer, so update the the pointer to it appropriately.
 	 */
-	if (!old_lv)
+	if (!old_lv) {
 		lv->lv_item->li_ops->iop_pin(lv->lv_item);
-	else if (old_lv != lv) {
+		lv->lv_item->li_lv_shadow = NULL;
+	} else if (old_lv != lv) {
 		ASSERT(lv->lv_buf_len != XFS_LOG_VEC_ORDERED);
 
 		*diff_len -= old_lv->lv_bytes;
 		*diff_iovecs -= old_lv->lv_niovecs;
-		kmem_free(old_lv);
+		lv->lv_item->li_lv_shadow = old_lv;
 	}
 
 	/* attach new log vector to log item */
@@ -134,11 +275,13 @@ xfs_cil_prepare_item(
  * write it out asynchronously without needing to relock the object that was
  * modified at the time it gets written into the iclog.
  *
- * This function builds a vector for the changes in each log item in the
- * transaction. It then works out the length of the buffer needed for each log
- * item, allocates them and formats the vector for the item into the buffer.
- * The buffer is then attached to the log item are then inserted into the
- * Committed Item List for tracking until the next checkpoint is written out.
+ * This function takes the prepared log vectors attached to each log item, and
+ * formats the changes into the log vector buffer. The buffer it uses is
+ * dependent on the current state of the vector in the CIL - the shadow lv is
+ * guaranteed to be large enough for the current modification, but we will only
+ * use that if we can't reuse the existing lv. If we can't reuse the existing
+ * lv, then simple swap it out for the shadow lv. We don't free it - that is
+ * done lazily either by th enext modification or the freeing of the log item.
  *
  * We don't set up region headers during this process; we simply copy the
  * regions into the flat buffer. We can do this because we still have to do a
@@ -171,59 +314,44 @@ xlog_cil_insert_format_items(
 	list_for_each_entry(lidp, &tp->t_items, lid_trans) {
 		struct xfs_log_item *lip = lidp->lid_item;
 		struct xfs_log_vec *lv;
-		struct xfs_log_vec *old_lv;
-		int	niovecs = 0;
-		int	nbytes = 0;
-		int	buf_size;
+		struct xfs_log_vec *old_lv = NULL;
+		struct xfs_log_vec *shadow;
 		bool	ordered = false;
 
 		/* Skip items which aren't dirty in this transaction. */
 		if (!(lidp->lid_flags & XFS_LID_DIRTY))
 			continue;
 
-		/* get number of vecs and size of data to be stored */
-		lip->li_ops->iop_size(lip, &niovecs, &nbytes);
-
-		/* Skip items that do not have any vectors for writing */
-		if (!niovecs)
-			continue;
-
 		/*
-		 * Ordered items need to be tracked but we do not wish to write
-		 * them. We need a logvec to track the object, but we do not
-		 * need an iovec or buffer to be allocated for copying data.
+		 * The formatting size information is already attached to
+		 * the shadow lv on the log item.
 		 */
-		if (niovecs == XFS_LOG_VEC_ORDERED) {
+		shadow = lip->li_lv_shadow;
+		if (shadow->lv_buf_len == XFS_LOG_VEC_ORDERED)
 			ordered = true;
-			niovecs = 0;
-			nbytes = 0;
-		}
 
-		/*
-		 * We 64-bit align the length of each iovec so that the start
-		 * of the next one is naturally aligned.  We'll need to
-		 * account for that slack space here. Then round nbytes up
-		 * to 64-bit alignment so that the initial buffer alignment is
-		 * easy to calculate and verify.
-		 */
-		nbytes += niovecs * sizeof(uint64_t);
-		nbytes = round_up(nbytes, sizeof(uint64_t));
-
-		/* grab the old item if it exists for reservation accounting */
-		old_lv = lip->li_lv;
+		/* Skip items that do not have any vectors for writing */
+		if (!shadow->lv_niovecs && !ordered)
+			continue;
 
-		/*
-		 * The data buffer needs to start 64-bit aligned, so round up
-		 * that space to ensure we can align it appropriately and not
-		 * overrun the buffer.
-		 */
-		buf_size = nbytes +
-			   round_up((sizeof(struct xfs_log_vec) +
-				     niovecs * sizeof(struct xfs_log_iovec)),
-				    sizeof(uint64_t));
+/*
+		if ((lv = lip->li_lv))
+		xfs_warn(NULL,
+	"lv %p: next %p, size %d buflen %d niov %d bytes %d iovecp %p, buf %p",
+			lv, lv->lv_next, lv->lv_size, lv->lv_buf_len,
+			lv->lv_niovecs, lv->lv_bytes, lv->lv_iovecp,
+			lv->lv_buf);
+		if ((lv = lip->li_lv_shadow))
+		xfs_warn(NULL,
+	"shadow lv %p: next %p, size %d buflen %d niov %d bytes %d iovecp %p, buf %p",
+			lv, lv->lv_next, lv->lv_size, lv->lv_buf_len,
+			lv->lv_niovecs, lv->lv_bytes, lv->lv_iovecp,
+			lv->lv_buf);
+*/
 
 		/* compare to existing item size */
-		if (lip->li_lv && buf_size <= lip->li_lv->lv_size) {
+		old_lv = lip->li_lv;
+		if (lip->li_lv && shadow->lv_size <= lip->li_lv->lv_size) {
 			/* same or smaller, optimise common overwrite case */
 			lv = lip->li_lv;
 			lv->lv_next = NULL;
@@ -237,32 +365,29 @@ xlog_cil_insert_format_items(
 			 */
 			*diff_iovecs -= lv->lv_niovecs;
 			*diff_len -= lv->lv_bytes;
+
+			/* Ensure the lv is set up according to ->iop_size */
+			lv->lv_niovecs = shadow->lv_niovecs;
+
+			/* reset the lv buffer information for new formatting */
+			lv->lv_buf_len = 0;
+			lv->lv_bytes = 0;
+			lv->lv_buf = (char *)lv +
+					xlog_cil_iovec_space(lv->lv_niovecs);
 		} else {
-			/* allocate new data chunk */
-			lv = kmem_zalloc(buf_size, KM_SLEEP|KM_NOFS);
+			/* switch to shadow buffer! */
+			lv = shadow;
 			lv->lv_item = lip;
-			lv->lv_size = buf_size;
 			if (ordered) {
 				/* track as an ordered logvec */
 				ASSERT(lip->li_lv == NULL);
-				lv->lv_buf_len = XFS_LOG_VEC_ORDERED;
 				goto insert;
 			}
-			lv->lv_iovecp = (struct xfs_log_iovec *)&lv[1];
 		}
 
-		/* Ensure the lv is set up according to ->iop_size */
-		lv->lv_niovecs = niovecs;
-
-		/* The allocated data region lies beyond the iovec region */
-		lv->lv_buf_len = 0;
-		lv->lv_bytes = 0;
-		lv->lv_buf = (char *)lv + buf_size - nbytes;
 		ASSERT(IS_ALIGNED((unsigned long)lv->lv_buf, sizeof(uint64_t)));
-
 		lip->li_ops->iop_format(lip, lv);
 insert:
-		ASSERT(lv->lv_buf_len <= nbytes);
 		xfs_cil_prepare_item(log, lv, old_lv, diff_len, diff_iovecs);
 	}
 }
@@ -784,6 +909,13 @@ xfs_log_commit_cil(
 	struct xlog		*log = mp->m_log;
 	struct xfs_cil		*cil = log->l_cilp;
 
+	/*
+	 * Do all necessary memory allocation before we lock the CIL.
+	 * This ensures the allocation does not deadlock with a CIL
+	 * push in memory reclaim (e.g. from kswapd).
+	 */
+	xlog_cil_alloc_shadow_bufs(log, tp);
+
 	/* lock out background commit */
 	down_read(&cil->xc_ctx_lock);
 
diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h
index 4643070..74e6819 100644
--- a/fs/xfs/xfs_trans.h
+++ b/fs/xfs/xfs_trans.h
@@ -52,6 +52,7 @@ typedef struct xfs_log_item {
 	/* delayed logging */
 	struct list_head		li_cil;		/* CIL pointers */
 	struct xfs_log_vec		*li_lv;		/* active log vector */
+	struct xfs_log_vec		*li_lv_shadow;	/* standby vector */
 	xfs_lsn_t			li_seq;		/* CIL commit seq */
 } xfs_log_item_t;
 
-- 
2.5.0

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v2] [RFC] xfs: allocate log vector buffers outside CIL context lock
  2016-01-19  4:31 [PATCH] [RFC] xfs: allocate log vector buffers outside CIL context lock Dave Chinner
@ 2016-01-20  1:58 ` Dave Chinner
  2016-01-26 14:17   ` Brian Foster
  0 siblings, 1 reply; 9+ messages in thread
From: Dave Chinner @ 2016-01-20  1:58 UTC (permalink / raw)
  To: xfs

From: Dave Chinner <dchinner@redhat.com>

One of the problems we currently have with delayed logging is that
under serious memory pressure we can deadlock memory reclaim. THis
occurs when memory reclaim (such as run by kswapd) is reclaiming XFS
inodes and issues a log force to unpin inodes that are dirty in the
CIL.

The CIL is pushed, but this will only occur once it gets the CIL
context lock to ensure that all committing transactions are complete
and no new transactions start being committed to the CIL while the
push switches to a new context.

The deadlock occurs when the CIL context lock is held by a
committing process that is doing memory allocation for log vector
buffers, and that allocation is then blocked on memory reclaim
making progress. Memory reclaim, however, is blocked waiting for
a log force to make progress, and so we effectively deadlock at this
point.

To solve this problem, we have to move the CIL log vector buffer
allocation outside of the context lock so that memory reclaim can
always make progress when it needs to force the log. The problem
with doing this is that a CIL push can take place while we are
determining if we need to allocate a new log vector buffer for
an item and hence the current log vector may go away without
warning. That means we canot rely on the existing log vector being
present when we finally grab the context lock and so we must have a
replacement buffer ready to go at all times.

To ensure this, introduce a "shadow log vector" buffer that is
always guaranteed to be present when we gain the CIL context lock
and format the item. This shadow buffer may or may not be used
during the formatting, but if the log item does not have an existing
log vector buffer or that buffer is too small for the new
modifications, we swap it for the new shadow buffer and format
the modifications into that new log vector buffer.

The result of this is that for any object we modify more than once
in a given CIL checkpoint, we double the memory required
to track dirty regions in the log. For single modifications then
we consume the shadow log vectorwe allocate on commit, and that gets
consumed by the checkpoint. However, if we make multiple
modifications, then the second transaction commit will allocate a
shadow log vector and hence we will end up with double the memory
usage as only one of the log vectors is consumed by the CIL
checkpoint. The remaining shadow vector will be freed when th elog
item is freed.

This can probably be optimised - access to the shadow log vector is
serialised by the object lock (as opposited to the active log
vector, which is controlled by the CIL context lock) and so we can
probably free shadow log vector from some objects when the log item
is marked clean on removal from the AIL.

The patch survives smoke testing and some load testing. I haven't
done any real performance testing, but I have done some load and low
memory testing and it hasn't exploded (perf did - it failed several
order 2 memory allocations, which XFS continued along just fine).

That said, I don't have a reliable deadlock reproducer in the first
place, so I'm interested i hearing what people think about this
approach to solve the problem and ways to test and improve it.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
---

Version 2:
- this one doesn't crash and burn in generic/324
- fixed handling of order items when recycling shadow buffers
- correctly set up log iovec pointers in all cases
- fixed moving current log vector back to the shadow vector when
  they are switched during formatting.

 fs/xfs/xfs_buf_item.c     |   1 +
 fs/xfs/xfs_dquot.c        |   1 +
 fs/xfs/xfs_dquot_item.c   |   2 +
 fs/xfs/xfs_extfree_item.c |   2 +
 fs/xfs/xfs_inode_item.c   |   1 +
 fs/xfs/xfs_log_cil.c      | 249 ++++++++++++++++++++++++++++++++++------------
 fs/xfs/xfs_trans.h        |   1 +
 7 files changed, 193 insertions(+), 64 deletions(-)

diff --git a/fs/xfs/xfs_buf_item.c b/fs/xfs/xfs_buf_item.c
index 9220283..3f39d96 100644
--- a/fs/xfs/xfs_buf_item.c
+++ b/fs/xfs/xfs_buf_item.c
@@ -833,6 +833,7 @@ xfs_buf_item_free(
 	xfs_buf_log_item_t	*bip)
 {
 	xfs_buf_item_free_format(bip);
+	kmem_free(bip->bli_item.li_lv_shadow);
 	kmem_zone_free(xfs_buf_item_zone, bip);
 }
 
diff --git a/fs/xfs/xfs_dquot.c b/fs/xfs/xfs_dquot.c
index 9c44d38..4569cc4 100644
--- a/fs/xfs/xfs_dquot.c
+++ b/fs/xfs/xfs_dquot.c
@@ -74,6 +74,7 @@ xfs_qm_dqdestroy(
 {
 	ASSERT(list_empty(&dqp->q_lru));
 
+	kmem_free(dqp->q_logitem.qli_item.li_lv_shadow);
 	mutex_destroy(&dqp->q_qlock);
 
 	XFS_STATS_DEC(dqp->q_mount, xs_qm_dquot);
diff --git a/fs/xfs/xfs_dquot_item.c b/fs/xfs/xfs_dquot_item.c
index 814cff9..2c7a162 100644
--- a/fs/xfs/xfs_dquot_item.c
+++ b/fs/xfs/xfs_dquot_item.c
@@ -370,6 +370,8 @@ xfs_qm_qoffend_logitem_committed(
 	spin_lock(&ailp->xa_lock);
 	xfs_trans_ail_delete(ailp, &qfs->qql_item, SHUTDOWN_LOG_IO_ERROR);
 
+	kmem_free(qfs->qql_item.li_lv_shadow);
+	kmem_free(lip->li_lv_shadow);
 	kmem_free(qfs);
 	kmem_free(qfe);
 	return (xfs_lsn_t)-1;
diff --git a/fs/xfs/xfs_extfree_item.c b/fs/xfs/xfs_extfree_item.c
index 4aa0153..ab77946 100644
--- a/fs/xfs/xfs_extfree_item.c
+++ b/fs/xfs/xfs_extfree_item.c
@@ -40,6 +40,7 @@ void
 xfs_efi_item_free(
 	struct xfs_efi_log_item	*efip)
 {
+	kmem_free(efip->efi_item.li_lv_shadow);
 	if (efip->efi_format.efi_nextents > XFS_EFI_MAX_FAST_EXTENTS)
 		kmem_free(efip);
 	else
@@ -300,6 +301,7 @@ static inline struct xfs_efd_log_item *EFD_ITEM(struct xfs_log_item *lip)
 STATIC void
 xfs_efd_item_free(struct xfs_efd_log_item *efdp)
 {
+	kmem_free(efdp->efd_item.li_lv_shadow);
 	if (efdp->efd_format.efd_nextents > XFS_EFD_MAX_FAST_EXTENTS)
 		kmem_free(efdp);
 	else
diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c
index bd9808f..45a882f 100644
--- a/fs/xfs/xfs_inode_item.c
+++ b/fs/xfs/xfs_inode_item.c
@@ -649,6 +649,7 @@ void
 xfs_inode_item_destroy(
 	xfs_inode_t	*ip)
 {
+	kmem_free(ip->i_itemp->ili_item.li_lv_shadow);
 	kmem_zone_free(xfs_ili_zone, ip->i_itemp);
 }
 
diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c
index 4e76493..f5567fb 100644
--- a/fs/xfs/xfs_log_cil.c
+++ b/fs/xfs/xfs_log_cil.c
@@ -79,6 +79,148 @@ xlog_cil_init_post_recovery(
 	log->l_cilp->xc_ctx->sequence = 1;
 }
 
+static inline int
+xlog_cil_iovec_space(
+	uint	niovecs)
+{
+	return round_up((sizeof(struct xfs_log_vec) +
+					niovecs * sizeof(struct xfs_log_iovec)),
+			sizeof(uint64_t));
+}
+
+/*
+ * Allocate or pin log vector buffers for CIL insertion.
+ *
+ * The CIL currently uses disposable buffers for copying a snapshot of the
+ * modified items into the log during a push. The biggest problem with this is
+ * the requirement to allocate the disposable buffer during the commit if:
+ *	a) does not exist; or
+ *	b) it is too small
+ *
+ * If we do this allocation within xlog_cil_insert_format_items(), it is done
+ * under the xc_ctx_lock, which means that a CIL push cannot occur during
+ * the memory allocation. This means that we have a potential deadlock situation
+ * under low memory conditions when we have lots of dirty metadata pinned in
+ * the CIL and we need a CIL commit to occur to free memory.
+ *
+ * To avoid this, we need to move the memory allocation outside the
+ * xc_ctx_lock(), but because the log vector buffers are disposable, that opens
+ * up a TOCTOU race condition w.r.t. the CIL commiting and removing the log
+ * vector buffers between the check and the formatting of the item into the
+ * log vector buffer within the xc_ctx_lock.
+ *
+ * Because the log vector buffer needs to be unchanged during the CIL push
+ * process, we cannot share the buffer between the transaction commit (which
+ * modifies the buffer) and the CIL push context that is writing the changes
+ * into the log. This means skipping preallocation of buffer space is
+ * unreliable, but we most definitely do not want to be allocating and freeing
+ * buffers unnecessarily during commits when overwrites can be done safely.
+ *
+ * The simplest solution to this problem is to allocate a shadow buffer when a
+ * log item is committed for the second time, and then to only use this buffer
+ * if necessary. The buffer can remain attached to the log item until such time
+ * it is needed, and this is the buffer that is reallocated to match the size of
+ * the incoming modification. Then during the formatting of the item we can swap
+ * the active buffer with the new one if we can't reuse the existing buffer. We
+ * don't free the old buffer as it may be reused on the next modification if
+ * it's size is right, otherwise we'll free and reallocate it at that point.
+ *
+ * This function builds a vector for the changes in each log item in the
+ * transaction. It then works out the length of the buffer needed for each log
+ * item, allocates them and attaches the vector to the log item in preparation
+ * for the formatting step which occurs under the xc_ctx_lock.
+ *
+ * While this means the memory footprint goes up, it avoids the repeated
+ * alloc/free pattern that repeated modifications of an item would otherwise
+ * cause, and hence minimises the CPU overhead of such behaviour.
+ */
+static void
+xlog_cil_alloc_shadow_bufs(
+	struct xlog		*log,
+	struct xfs_trans	*tp)
+{
+	struct xfs_log_item_desc *lidp;
+
+	list_for_each_entry(lidp, &tp->t_items, lid_trans) {
+		struct xfs_log_item *lip = lidp->lid_item;
+		struct xfs_log_vec *lv;
+		int	niovecs = 0;
+		int	nbytes = 0;
+		int	buf_size;
+		bool	ordered = false;
+
+		/* Skip items which aren't dirty in this transaction. */
+		if (!(lidp->lid_flags & XFS_LID_DIRTY))
+			continue;
+
+		/* get number of vecs and size of data to be stored */
+		lip->li_ops->iop_size(lip, &niovecs, &nbytes);
+
+		/*
+		 * Ordered items need to be tracked but we do not wish to write
+		 * them. We need a logvec to track the object, but we do not
+		 * need an iovec or buffer to be allocated for copying data.
+		 */
+		if (niovecs == XFS_LOG_VEC_ORDERED) {
+			ordered = true;
+			niovecs = 0;
+			nbytes = 0;
+		}
+
+		/*
+		 * We 64-bit align the length of each iovec so that the start
+		 * of the next one is naturally aligned.  We'll need to
+		 * account for that slack space here. Then round nbytes up
+		 * to 64-bit alignment so that the initial buffer alignment is
+		 * easy to calculate and verify.
+		 */
+		nbytes += niovecs * sizeof(uint64_t);
+		nbytes = round_up(nbytes, sizeof(uint64_t));
+
+		/*
+		 * The data buffer needs to start 64-bit aligned, so round up
+		 * that space to ensure we can align it appropriately and not
+		 * overrun the buffer.
+		 */
+		buf_size = nbytes + xlog_cil_iovec_space(niovecs);
+
+		/*
+		 * if we have no shadow buffer, or it is too small, we need to
+		 * reallocate it.
+		 */
+		if (!lip->li_lv_shadow ||
+		    buf_size > lip->li_lv_shadow->lv_size) {
+
+			kmem_free(lip->li_lv_shadow);
+
+			lv = kmem_zalloc(buf_size, KM_SLEEP|KM_NOFS);
+			lv->lv_item = lip;
+			lv->lv_size = buf_size;
+			if (ordered)
+				lv->lv_buf_len = XFS_LOG_VEC_ORDERED;
+			else
+				lv->lv_iovecp = (struct xfs_log_iovec *)&lv[1];
+			lip->li_lv_shadow = lv;
+		} else {
+			/* same or smaller, optimise common overwrite case */
+			lv = lip->li_lv_shadow;
+			if (ordered)
+				lv->lv_buf_len = XFS_LOG_VEC_ORDERED;
+			else
+				lv->lv_buf_len = 0;
+			lv->lv_bytes = 0;
+			lv->lv_next = NULL;
+		}
+
+		/* Ensure the lv is set up according to ->iop_size */
+		lv->lv_niovecs = niovecs;
+
+		/* The allocated data region lies beyond the iovec region */
+		lv->lv_buf = (char *)lv + xlog_cil_iovec_space(niovecs);
+	}
+
+}
+
 /*
  * Prepare the log item for insertion into the CIL. Calculate the difference in
  * log space and vectors it will consume, and if it is a new item pin it as
@@ -101,16 +243,19 @@ xfs_cil_prepare_item(
 	/*
 	 * If there is no old LV, this is the first time we've seen the item in
 	 * this CIL context and so we need to pin it. If we are replacing the
-	 * old_lv, then remove the space it accounts for and free it.
+	 * old_lv, then remove the space it accounts for and make it the shadow
+	 * buffer for later freeing. In both cases we are now switching to the
+	 * shadow buffer, so update the the pointer to it appropriately.
 	 */
-	if (!old_lv)
+	if (!old_lv) {
 		lv->lv_item->li_ops->iop_pin(lv->lv_item);
-	else if (old_lv != lv) {
+		lv->lv_item->li_lv_shadow = NULL;
+	} else if (old_lv != lv) {
 		ASSERT(lv->lv_buf_len != XFS_LOG_VEC_ORDERED);
 
 		*diff_len -= old_lv->lv_bytes;
 		*diff_iovecs -= old_lv->lv_niovecs;
-		kmem_free(old_lv);
+		lv->lv_item->li_lv_shadow = old_lv;
 	}
 
 	/* attach new log vector to log item */
@@ -134,11 +279,13 @@ xfs_cil_prepare_item(
  * write it out asynchronously without needing to relock the object that was
  * modified at the time it gets written into the iclog.
  *
- * This function builds a vector for the changes in each log item in the
- * transaction. It then works out the length of the buffer needed for each log
- * item, allocates them and formats the vector for the item into the buffer.
- * The buffer is then attached to the log item are then inserted into the
- * Committed Item List for tracking until the next checkpoint is written out.
+ * This function takes the prepared log vectors attached to each log item, and
+ * formats the changes into the log vector buffer. The buffer it uses is
+ * dependent on the current state of the vector in the CIL - the shadow lv is
+ * guaranteed to be large enough for the current modification, but we will only
+ * use that if we can't reuse the existing lv. If we can't reuse the existing
+ * lv, then simple swap it out for the shadow lv. We don't free it - that is
+ * done lazily either by th enext modification or the freeing of the log item.
  *
  * We don't set up region headers during this process; we simply copy the
  * regions into the flat buffer. We can do this because we still have to do a
@@ -171,59 +318,29 @@ xlog_cil_insert_format_items(
 	list_for_each_entry(lidp, &tp->t_items, lid_trans) {
 		struct xfs_log_item *lip = lidp->lid_item;
 		struct xfs_log_vec *lv;
-		struct xfs_log_vec *old_lv;
-		int	niovecs = 0;
-		int	nbytes = 0;
-		int	buf_size;
+		struct xfs_log_vec *old_lv = NULL;
+		struct xfs_log_vec *shadow;
 		bool	ordered = false;
 
 		/* Skip items which aren't dirty in this transaction. */
 		if (!(lidp->lid_flags & XFS_LID_DIRTY))
 			continue;
 
-		/* get number of vecs and size of data to be stored */
-		lip->li_ops->iop_size(lip, &niovecs, &nbytes);
-
-		/* Skip items that do not have any vectors for writing */
-		if (!niovecs)
-			continue;
-
 		/*
-		 * Ordered items need to be tracked but we do not wish to write
-		 * them. We need a logvec to track the object, but we do not
-		 * need an iovec or buffer to be allocated for copying data.
+		 * The formatting size information is already attached to
+		 * the shadow lv on the log item.
 		 */
-		if (niovecs == XFS_LOG_VEC_ORDERED) {
+		shadow = lip->li_lv_shadow;
+		if (shadow->lv_buf_len == XFS_LOG_VEC_ORDERED)
 			ordered = true;
-			niovecs = 0;
-			nbytes = 0;
-		}
 
-		/*
-		 * We 64-bit align the length of each iovec so that the start
-		 * of the next one is naturally aligned.  We'll need to
-		 * account for that slack space here. Then round nbytes up
-		 * to 64-bit alignment so that the initial buffer alignment is
-		 * easy to calculate and verify.
-		 */
-		nbytes += niovecs * sizeof(uint64_t);
-		nbytes = round_up(nbytes, sizeof(uint64_t));
-
-		/* grab the old item if it exists for reservation accounting */
-		old_lv = lip->li_lv;
-
-		/*
-		 * The data buffer needs to start 64-bit aligned, so round up
-		 * that space to ensure we can align it appropriately and not
-		 * overrun the buffer.
-		 */
-		buf_size = nbytes +
-			   round_up((sizeof(struct xfs_log_vec) +
-				     niovecs * sizeof(struct xfs_log_iovec)),
-				    sizeof(uint64_t));
+		/* Skip items that do not have any vectors for writing */
+		if (!shadow->lv_niovecs && !ordered)
+			continue;
 
 		/* compare to existing item size */
-		if (lip->li_lv && buf_size <= lip->li_lv->lv_size) {
+		old_lv = lip->li_lv;
+		if (lip->li_lv && shadow->lv_size <= lip->li_lv->lv_size) {
 			/* same or smaller, optimise common overwrite case */
 			lv = lip->li_lv;
 			lv->lv_next = NULL;
@@ -237,32 +354,29 @@ xlog_cil_insert_format_items(
 			 */
 			*diff_iovecs -= lv->lv_niovecs;
 			*diff_len -= lv->lv_bytes;
+
+			/* Ensure the lv is set up according to ->iop_size */
+			lv->lv_niovecs = shadow->lv_niovecs;
+
+			/* reset the lv buffer information for new formatting */
+			lv->lv_buf_len = 0;
+			lv->lv_bytes = 0;
+			lv->lv_buf = (char *)lv +
+					xlog_cil_iovec_space(lv->lv_niovecs);
 		} else {
-			/* allocate new data chunk */
-			lv = kmem_zalloc(buf_size, KM_SLEEP|KM_NOFS);
+			/* switch to shadow buffer! */
+			lv = shadow;
 			lv->lv_item = lip;
-			lv->lv_size = buf_size;
 			if (ordered) {
 				/* track as an ordered logvec */
 				ASSERT(lip->li_lv == NULL);
-				lv->lv_buf_len = XFS_LOG_VEC_ORDERED;
 				goto insert;
 			}
-			lv->lv_iovecp = (struct xfs_log_iovec *)&lv[1];
 		}
 
-		/* Ensure the lv is set up according to ->iop_size */
-		lv->lv_niovecs = niovecs;
-
-		/* The allocated data region lies beyond the iovec region */
-		lv->lv_buf_len = 0;
-		lv->lv_bytes = 0;
-		lv->lv_buf = (char *)lv + buf_size - nbytes;
 		ASSERT(IS_ALIGNED((unsigned long)lv->lv_buf, sizeof(uint64_t)));
-
 		lip->li_ops->iop_format(lip, lv);
 insert:
-		ASSERT(lv->lv_buf_len <= nbytes);
 		xfs_cil_prepare_item(log, lv, old_lv, diff_len, diff_iovecs);
 	}
 }
@@ -784,6 +898,13 @@ xfs_log_commit_cil(
 	struct xlog		*log = mp->m_log;
 	struct xfs_cil		*cil = log->l_cilp;
 
+	/*
+	 * Do all necessary memory allocation before we lock the CIL.
+	 * This ensures the allocation does not deadlock with a CIL
+	 * push in memory reclaim (e.g. from kswapd).
+	 */
+	xlog_cil_alloc_shadow_bufs(log, tp);
+
 	/* lock out background commit */
 	down_read(&cil->xc_ctx_lock);
 
diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h
index 4643070..74e6819 100644
--- a/fs/xfs/xfs_trans.h
+++ b/fs/xfs/xfs_trans.h
@@ -52,6 +52,7 @@ typedef struct xfs_log_item {
 	/* delayed logging */
 	struct list_head		li_cil;		/* CIL pointers */
 	struct xfs_log_vec		*li_lv;		/* active log vector */
+	struct xfs_log_vec		*li_lv_shadow;	/* standby vector */
 	xfs_lsn_t			li_seq;		/* CIL commit seq */
 } xfs_log_item_t;
 
-- 
Dave Chinner
david@fromorbit.com

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v2] [RFC] xfs: allocate log vector buffers outside CIL context lock
  2016-01-20  1:58 ` [PATCH v2] " Dave Chinner
@ 2016-01-26 14:17   ` Brian Foster
  2016-02-13 17:09     ` Jens Rosenboom
  0 siblings, 1 reply; 9+ messages in thread
From: Brian Foster @ 2016-01-26 14:17 UTC (permalink / raw)
  To: Dave Chinner; +Cc: xfs

On Wed, Jan 20, 2016 at 12:58:53PM +1100, Dave Chinner wrote:
> From: Dave Chinner <dchinner@redhat.com>
> 
> One of the problems we currently have with delayed logging is that
> under serious memory pressure we can deadlock memory reclaim. THis
> occurs when memory reclaim (such as run by kswapd) is reclaiming XFS
> inodes and issues a log force to unpin inodes that are dirty in the
> CIL.
> 
> The CIL is pushed, but this will only occur once it gets the CIL
> context lock to ensure that all committing transactions are complete
> and no new transactions start being committed to the CIL while the
> push switches to a new context.
> 
> The deadlock occurs when the CIL context lock is held by a
> committing process that is doing memory allocation for log vector
> buffers, and that allocation is then blocked on memory reclaim
> making progress. Memory reclaim, however, is blocked waiting for
> a log force to make progress, and so we effectively deadlock at this
> point.
> 
> To solve this problem, we have to move the CIL log vector buffer
> allocation outside of the context lock so that memory reclaim can
> always make progress when it needs to force the log. The problem
> with doing this is that a CIL push can take place while we are
> determining if we need to allocate a new log vector buffer for
> an item and hence the current log vector may go away without
> warning. That means we canot rely on the existing log vector being
> present when we finally grab the context lock and so we must have a
> replacement buffer ready to go at all times.
> 
> To ensure this, introduce a "shadow log vector" buffer that is
> always guaranteed to be present when we gain the CIL context lock
> and format the item. This shadow buffer may or may not be used
> during the formatting, but if the log item does not have an existing
> log vector buffer or that buffer is too small for the new
> modifications, we swap it for the new shadow buffer and format
> the modifications into that new log vector buffer.
> 
> The result of this is that for any object we modify more than once
> in a given CIL checkpoint, we double the memory required
> to track dirty regions in the log. For single modifications then
> we consume the shadow log vectorwe allocate on commit, and that gets
> consumed by the checkpoint. However, if we make multiple
> modifications, then the second transaction commit will allocate a
> shadow log vector and hence we will end up with double the memory
> usage as only one of the log vectors is consumed by the CIL
> checkpoint. The remaining shadow vector will be freed when th elog
> item is freed.
> 
> This can probably be optimised - access to the shadow log vector is
> serialised by the object lock (as opposited to the active log
> vector, which is controlled by the CIL context lock) and so we can
> probably free shadow log vector from some objects when the log item
> is marked clean on removal from the AIL.
> 
> The patch survives smoke testing and some load testing. I haven't
> done any real performance testing, but I have done some load and low
> memory testing and it hasn't exploded (perf did - it failed several
> order 2 memory allocations, which XFS continued along just fine).
> 
> That said, I don't have a reliable deadlock reproducer in the first
> place, so I'm interested i hearing what people think about this
> approach to solve the problem and ways to test and improve it.
> 
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> ---

This seems reasonable to me in principle. It would be nice to have some
kind of feedback in terms of effectiveness resolving the original
deadlock report. I can't think of a good way of testing short of
actually instrumenting the deadlock one way or another, unfortunately.
Was there a user that might be willing to test or had a detailed enough
description of the workload/environment?

I also wonder whether the lazy shadow vector freeing is noticeably
effective in terms of performance. After all, it seems like it's going
to be freed anyways in the event that a log force occurs due to memory
pressure. Perhaps the logic is to optimize the case where relogging
occurs without memory pressure in the picture..? In that case, the
question is probably whether the lazy allocation actually contributes to
memory pressure in any significant way. Perhaps one or more new stat
counters might be useful to demonstrate that, but that could be
overboard as well if performance testing doesn't show any major
regressions. That said, something that demonstrates lazy freeing is
actually taken advantage of might be useful, even if just for a data
point in the commit log description. By that I mean, how do we know in
practice that the current code isn't always doing reallocations anyways
due to size requirements, in which case lazy freeing could just be
unnecessary complexity? Or that we end up holding on to larger than
necessary buffers for reuse and thus trade off allocation calls for an
even worse memory footprint..? Etc.

Just some thoughts. One additional comment below...

> 
> Version 2:
> - this one doesn't crash and burn in generic/324
> - fixed handling of order items when recycling shadow buffers
> - correctly set up log iovec pointers in all cases
> - fixed moving current log vector back to the shadow vector when
>   they are switched during formatting.
> 
>  fs/xfs/xfs_buf_item.c     |   1 +
>  fs/xfs/xfs_dquot.c        |   1 +
>  fs/xfs/xfs_dquot_item.c   |   2 +
>  fs/xfs/xfs_extfree_item.c |   2 +
>  fs/xfs/xfs_inode_item.c   |   1 +
>  fs/xfs/xfs_log_cil.c      | 249 ++++++++++++++++++++++++++++++++++------------
>  fs/xfs/xfs_trans.h        |   1 +
>  7 files changed, 193 insertions(+), 64 deletions(-)
> 
...
> diff --git a/fs/xfs/xfs_log_cil.c b/fs/xfs/xfs_log_cil.c
> index 4e76493..f5567fb 100644
> --- a/fs/xfs/xfs_log_cil.c
> +++ b/fs/xfs/xfs_log_cil.c
> @@ -79,6 +79,148 @@ xlog_cil_init_post_recovery(
>  	log->l_cilp->xc_ctx->sequence = 1;
>  }
>  
...
> +static void
> +xlog_cil_alloc_shadow_bufs(
> +	struct xlog		*log,
> +	struct xfs_trans	*tp)
> +{
> +	struct xfs_log_item_desc *lidp;
> +
> +	list_for_each_entry(lidp, &tp->t_items, lid_trans) {
> +		struct xfs_log_item *lip = lidp->lid_item;
> +		struct xfs_log_vec *lv;
> +		int	niovecs = 0;
> +		int	nbytes = 0;
> +		int	buf_size;
> +		bool	ordered = false;
> +
> +		/* Skip items which aren't dirty in this transaction. */
> +		if (!(lidp->lid_flags & XFS_LID_DIRTY))
> +			continue;
> +
> +		/* get number of vecs and size of data to be stored */
> +		lip->li_ops->iop_size(lip, &niovecs, &nbytes);
> +

I'm not sure how relevant it is, but there was also a !niovecs check
here in xlog_cil_insert_format_items().

Brian

> +		/*
> +		 * Ordered items need to be tracked but we do not wish to write
> +		 * them. We need a logvec to track the object, but we do not
> +		 * need an iovec or buffer to be allocated for copying data.
> +		 */
> +		if (niovecs == XFS_LOG_VEC_ORDERED) {
> +			ordered = true;
> +			niovecs = 0;
> +			nbytes = 0;
> +		}
> +
> +		/*
> +		 * We 64-bit align the length of each iovec so that the start
> +		 * of the next one is naturally aligned.  We'll need to
> +		 * account for that slack space here. Then round nbytes up
> +		 * to 64-bit alignment so that the initial buffer alignment is
> +		 * easy to calculate and verify.
> +		 */
> +		nbytes += niovecs * sizeof(uint64_t);
> +		nbytes = round_up(nbytes, sizeof(uint64_t));
> +
> +		/*
> +		 * The data buffer needs to start 64-bit aligned, so round up
> +		 * that space to ensure we can align it appropriately and not
> +		 * overrun the buffer.
> +		 */
> +		buf_size = nbytes + xlog_cil_iovec_space(niovecs);
> +
> +		/*
> +		 * if we have no shadow buffer, or it is too small, we need to
> +		 * reallocate it.
> +		 */
> +		if (!lip->li_lv_shadow ||
> +		    buf_size > lip->li_lv_shadow->lv_size) {
> +
> +			kmem_free(lip->li_lv_shadow);
> +
> +			lv = kmem_zalloc(buf_size, KM_SLEEP|KM_NOFS);
> +			lv->lv_item = lip;
> +			lv->lv_size = buf_size;
> +			if (ordered)
> +				lv->lv_buf_len = XFS_LOG_VEC_ORDERED;
> +			else
> +				lv->lv_iovecp = (struct xfs_log_iovec *)&lv[1];
> +			lip->li_lv_shadow = lv;
> +		} else {
> +			/* same or smaller, optimise common overwrite case */
> +			lv = lip->li_lv_shadow;
> +			if (ordered)
> +				lv->lv_buf_len = XFS_LOG_VEC_ORDERED;
> +			else
> +				lv->lv_buf_len = 0;
> +			lv->lv_bytes = 0;
> +			lv->lv_next = NULL;
> +		}
> +
> +		/* Ensure the lv is set up according to ->iop_size */
> +		lv->lv_niovecs = niovecs;
> +
> +		/* The allocated data region lies beyond the iovec region */
> +		lv->lv_buf = (char *)lv + xlog_cil_iovec_space(niovecs);
> +	}
> +
> +}
> +
>  /*
>   * Prepare the log item for insertion into the CIL. Calculate the difference in
>   * log space and vectors it will consume, and if it is a new item pin it as
> @@ -101,16 +243,19 @@ xfs_cil_prepare_item(
>  	/*
>  	 * If there is no old LV, this is the first time we've seen the item in
>  	 * this CIL context and so we need to pin it. If we are replacing the
> -	 * old_lv, then remove the space it accounts for and free it.
> +	 * old_lv, then remove the space it accounts for and make it the shadow
> +	 * buffer for later freeing. In both cases we are now switching to the
> +	 * shadow buffer, so update the the pointer to it appropriately.
>  	 */
> -	if (!old_lv)
> +	if (!old_lv) {
>  		lv->lv_item->li_ops->iop_pin(lv->lv_item);
> -	else if (old_lv != lv) {
> +		lv->lv_item->li_lv_shadow = NULL;
> +	} else if (old_lv != lv) {
>  		ASSERT(lv->lv_buf_len != XFS_LOG_VEC_ORDERED);
>  
>  		*diff_len -= old_lv->lv_bytes;
>  		*diff_iovecs -= old_lv->lv_niovecs;
> -		kmem_free(old_lv);
> +		lv->lv_item->li_lv_shadow = old_lv;
>  	}
>  
>  	/* attach new log vector to log item */
> @@ -134,11 +279,13 @@ xfs_cil_prepare_item(
>   * write it out asynchronously without needing to relock the object that was
>   * modified at the time it gets written into the iclog.
>   *
> - * This function builds a vector for the changes in each log item in the
> - * transaction. It then works out the length of the buffer needed for each log
> - * item, allocates them and formats the vector for the item into the buffer.
> - * The buffer is then attached to the log item are then inserted into the
> - * Committed Item List for tracking until the next checkpoint is written out.
> + * This function takes the prepared log vectors attached to each log item, and
> + * formats the changes into the log vector buffer. The buffer it uses is
> + * dependent on the current state of the vector in the CIL - the shadow lv is
> + * guaranteed to be large enough for the current modification, but we will only
> + * use that if we can't reuse the existing lv. If we can't reuse the existing
> + * lv, then simple swap it out for the shadow lv. We don't free it - that is
> + * done lazily either by th enext modification or the freeing of the log item.
>   *
>   * We don't set up region headers during this process; we simply copy the
>   * regions into the flat buffer. We can do this because we still have to do a
> @@ -171,59 +318,29 @@ xlog_cil_insert_format_items(
>  	list_for_each_entry(lidp, &tp->t_items, lid_trans) {
>  		struct xfs_log_item *lip = lidp->lid_item;
>  		struct xfs_log_vec *lv;
> -		struct xfs_log_vec *old_lv;
> -		int	niovecs = 0;
> -		int	nbytes = 0;
> -		int	buf_size;
> +		struct xfs_log_vec *old_lv = NULL;
> +		struct xfs_log_vec *shadow;
>  		bool	ordered = false;
>  
>  		/* Skip items which aren't dirty in this transaction. */
>  		if (!(lidp->lid_flags & XFS_LID_DIRTY))
>  			continue;
>  
> -		/* get number of vecs and size of data to be stored */
> -		lip->li_ops->iop_size(lip, &niovecs, &nbytes);
> -
> -		/* Skip items that do not have any vectors for writing */
> -		if (!niovecs)
> -			continue;
> -
>  		/*
> -		 * Ordered items need to be tracked but we do not wish to write
> -		 * them. We need a logvec to track the object, but we do not
> -		 * need an iovec or buffer to be allocated for copying data.
> +		 * The formatting size information is already attached to
> +		 * the shadow lv on the log item.
>  		 */
> -		if (niovecs == XFS_LOG_VEC_ORDERED) {
> +		shadow = lip->li_lv_shadow;
> +		if (shadow->lv_buf_len == XFS_LOG_VEC_ORDERED)
>  			ordered = true;
> -			niovecs = 0;
> -			nbytes = 0;
> -		}
>  
> -		/*
> -		 * We 64-bit align the length of each iovec so that the start
> -		 * of the next one is naturally aligned.  We'll need to
> -		 * account for that slack space here. Then round nbytes up
> -		 * to 64-bit alignment so that the initial buffer alignment is
> -		 * easy to calculate and verify.
> -		 */
> -		nbytes += niovecs * sizeof(uint64_t);
> -		nbytes = round_up(nbytes, sizeof(uint64_t));
> -
> -		/* grab the old item if it exists for reservation accounting */
> -		old_lv = lip->li_lv;
> -
> -		/*
> -		 * The data buffer needs to start 64-bit aligned, so round up
> -		 * that space to ensure we can align it appropriately and not
> -		 * overrun the buffer.
> -		 */
> -		buf_size = nbytes +
> -			   round_up((sizeof(struct xfs_log_vec) +
> -				     niovecs * sizeof(struct xfs_log_iovec)),
> -				    sizeof(uint64_t));
> +		/* Skip items that do not have any vectors for writing */
> +		if (!shadow->lv_niovecs && !ordered)
> +			continue;
>  
>  		/* compare to existing item size */
> -		if (lip->li_lv && buf_size <= lip->li_lv->lv_size) {
> +		old_lv = lip->li_lv;
> +		if (lip->li_lv && shadow->lv_size <= lip->li_lv->lv_size) {
>  			/* same or smaller, optimise common overwrite case */
>  			lv = lip->li_lv;
>  			lv->lv_next = NULL;
> @@ -237,32 +354,29 @@ xlog_cil_insert_format_items(
>  			 */
>  			*diff_iovecs -= lv->lv_niovecs;
>  			*diff_len -= lv->lv_bytes;
> +
> +			/* Ensure the lv is set up according to ->iop_size */
> +			lv->lv_niovecs = shadow->lv_niovecs;
> +
> +			/* reset the lv buffer information for new formatting */
> +			lv->lv_buf_len = 0;
> +			lv->lv_bytes = 0;
> +			lv->lv_buf = (char *)lv +
> +					xlog_cil_iovec_space(lv->lv_niovecs);
>  		} else {
> -			/* allocate new data chunk */
> -			lv = kmem_zalloc(buf_size, KM_SLEEP|KM_NOFS);
> +			/* switch to shadow buffer! */
> +			lv = shadow;
>  			lv->lv_item = lip;
> -			lv->lv_size = buf_size;
>  			if (ordered) {
>  				/* track as an ordered logvec */
>  				ASSERT(lip->li_lv == NULL);
> -				lv->lv_buf_len = XFS_LOG_VEC_ORDERED;
>  				goto insert;
>  			}
> -			lv->lv_iovecp = (struct xfs_log_iovec *)&lv[1];
>  		}
>  
> -		/* Ensure the lv is set up according to ->iop_size */
> -		lv->lv_niovecs = niovecs;
> -
> -		/* The allocated data region lies beyond the iovec region */
> -		lv->lv_buf_len = 0;
> -		lv->lv_bytes = 0;
> -		lv->lv_buf = (char *)lv + buf_size - nbytes;
>  		ASSERT(IS_ALIGNED((unsigned long)lv->lv_buf, sizeof(uint64_t)));
> -
>  		lip->li_ops->iop_format(lip, lv);
>  insert:
> -		ASSERT(lv->lv_buf_len <= nbytes);
>  		xfs_cil_prepare_item(log, lv, old_lv, diff_len, diff_iovecs);
>  	}
>  }
> @@ -784,6 +898,13 @@ xfs_log_commit_cil(
>  	struct xlog		*log = mp->m_log;
>  	struct xfs_cil		*cil = log->l_cilp;
>  
> +	/*
> +	 * Do all necessary memory allocation before we lock the CIL.
> +	 * This ensures the allocation does not deadlock with a CIL
> +	 * push in memory reclaim (e.g. from kswapd).
> +	 */
> +	xlog_cil_alloc_shadow_bufs(log, tp);
> +
>  	/* lock out background commit */
>  	down_read(&cil->xc_ctx_lock);
>  
> diff --git a/fs/xfs/xfs_trans.h b/fs/xfs/xfs_trans.h
> index 4643070..74e6819 100644
> --- a/fs/xfs/xfs_trans.h
> +++ b/fs/xfs/xfs_trans.h
> @@ -52,6 +52,7 @@ typedef struct xfs_log_item {
>  	/* delayed logging */
>  	struct list_head		li_cil;		/* CIL pointers */
>  	struct xfs_log_vec		*li_lv;		/* active log vector */
> +	struct xfs_log_vec		*li_lv_shadow;	/* standby vector */
>  	xfs_lsn_t			li_seq;		/* CIL commit seq */
>  } xfs_log_item_t;
>  
> -- 
> Dave Chinner
> david@fromorbit.com
> 
> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2] [RFC] xfs: allocate log vector buffers outside CIL context lock
  2016-01-26 14:17   ` Brian Foster
@ 2016-02-13 17:09     ` Jens Rosenboom
  2016-02-14  0:16       ` Dave Chinner
  0 siblings, 1 reply; 9+ messages in thread
From: Jens Rosenboom @ 2016-02-13 17:09 UTC (permalink / raw)
  To: Brian Foster; +Cc: xfs

2016-01-26 15:17 GMT+01:00 Brian Foster <bfoster@redhat.com>:
> On Wed, Jan 20, 2016 at 12:58:53PM +1100, Dave Chinner wrote:
>> From: Dave Chinner <dchinner@redhat.com>
>>
>> One of the problems we currently have with delayed logging is that
>> under serious memory pressure we can deadlock memory reclaim. THis
>> occurs when memory reclaim (such as run by kswapd) is reclaiming XFS
>> inodes and issues a log force to unpin inodes that are dirty in the
>> CIL.
>>
>> The CIL is pushed, but this will only occur once it gets the CIL
>> context lock to ensure that all committing transactions are complete
>> and no new transactions start being committed to the CIL while the
>> push switches to a new context.
>>
>> The deadlock occurs when the CIL context lock is held by a
>> committing process that is doing memory allocation for log vector
>> buffers, and that allocation is then blocked on memory reclaim
>> making progress. Memory reclaim, however, is blocked waiting for
>> a log force to make progress, and so we effectively deadlock at this
>> point.
>>
>> To solve this problem, we have to move the CIL log vector buffer
>> allocation outside of the context lock so that memory reclaim can
>> always make progress when it needs to force the log. The problem
>> with doing this is that a CIL push can take place while we are
>> determining if we need to allocate a new log vector buffer for
>> an item and hence the current log vector may go away without
>> warning. That means we canot rely on the existing log vector being
>> present when we finally grab the context lock and so we must have a
>> replacement buffer ready to go at all times.
>>
>> To ensure this, introduce a "shadow log vector" buffer that is
>> always guaranteed to be present when we gain the CIL context lock
>> and format the item. This shadow buffer may or may not be used
>> during the formatting, but if the log item does not have an existing
>> log vector buffer or that buffer is too small for the new
>> modifications, we swap it for the new shadow buffer and format
>> the modifications into that new log vector buffer.
>>
>> The result of this is that for any object we modify more than once
>> in a given CIL checkpoint, we double the memory required
>> to track dirty regions in the log. For single modifications then
>> we consume the shadow log vectorwe allocate on commit, and that gets
>> consumed by the checkpoint. However, if we make multiple
>> modifications, then the second transaction commit will allocate a
>> shadow log vector and hence we will end up with double the memory
>> usage as only one of the log vectors is consumed by the CIL
>> checkpoint. The remaining shadow vector will be freed when th elog
>> item is freed.
>>
>> This can probably be optimised - access to the shadow log vector is
>> serialised by the object lock (as opposited to the active log
>> vector, which is controlled by the CIL context lock) and so we can
>> probably free shadow log vector from some objects when the log item
>> is marked clean on removal from the AIL.
>>
>> The patch survives smoke testing and some load testing. I haven't
>> done any real performance testing, but I have done some load and low
>> memory testing and it hasn't exploded (perf did - it failed several
>> order 2 memory allocations, which XFS continued along just fine).
>>
>> That said, I don't have a reliable deadlock reproducer in the first
>> place, so I'm interested i hearing what people think about this
>> approach to solve the problem and ways to test and improve it.
>>
>> Signed-off-by: Dave Chinner <dchinner@redhat.com>
>> ---
>
> This seems reasonable to me in principle. It would be nice to have some
> kind of feedback in terms of effectiveness resolving the original
> deadlock report. I can't think of a good way of testing short of
> actually instrumenting the deadlock one way or another, unfortunately.
> Was there a user that might be willing to test or had a detailed enough
> description of the workload/environment?

We have seen this issue on our production Ceph cluster sporadically
and have tried a long time to reproduce it in a lab environment.

Now I finally seem to have found a way to reproduce it at least twice
in a row. My test cluster is composed of 8 small nodes with 2 SSDs
each, so 16 OSDs. One of the nodes runs as rgw and I use cosbench to
write objects into the cluster. Running with 32 workers writing
16k-size objects into 100 buckets, I start seeing messages like this
after a couple of hours (at this point there are about 10M objects in
the cluster):

Feb 13 10:51:53 storage-node35 kernel: [10558.479309] XFS:
ceph-osd(10078) possible memory allocation deadlock size 32856 in
kmem_alloc (mode:0x2408240)
Feb 13 10:51:55 storage-node35 kernel: [10560.289810] XFS:
ceph-osd(10078) possible memory allocation deadlock size 32856 in
kmem_alloc (mode:0x2408240)
Feb 13 10:51:55 storage-node35 kernel: [10560.613984] XFS:
ceph-osd(10078) possible memory allocation deadlock size 32856 in
kmem_alloc (mode:0x2408240)
Feb 13 10:51:57 storage-node35 kernel: [10562.614089] XFS:
ceph-osd(10078) possible memory allocation deadlock size 32856 in
kmem_alloc (mode:0x2408240)

Soon after this, operations get so slow that the OSDs die because of
their suicide timeouts.

Then I installed onto 3 servers this patch (applied onto kernel
v4.4.1). The bad news is that I am still getting the kernel messages
on these machines. The good news, though, is that they appear at a
much lower frequency and also the impact on performance seems to be
lower, so the OSD processes on these three nodes did not get killed.

I'm going to rerun the test with the patched kernel on all nodes next
week, I could also run debug stuff if you have some idea for that.

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2] [RFC] xfs: allocate log vector buffers outside CIL context lock
  2016-02-13 17:09     ` Jens Rosenboom
@ 2016-02-14  0:16       ` Dave Chinner
  2016-02-15 11:57         ` Jens Rosenboom
  0 siblings, 1 reply; 9+ messages in thread
From: Dave Chinner @ 2016-02-14  0:16 UTC (permalink / raw)
  To: Jens Rosenboom; +Cc: Brian Foster, xfs

On Sat, Feb 13, 2016 at 06:09:17PM +0100, Jens Rosenboom wrote:
> 2016-01-26 15:17 GMT+01:00 Brian Foster <bfoster@redhat.com>:
> > On Wed, Jan 20, 2016 at 12:58:53PM +1100, Dave Chinner wrote:
> >> From: Dave Chinner <dchinner@redhat.com>
> >>
> >> One of the problems we currently have with delayed logging is that
> >> under serious memory pressure we can deadlock memory reclaim. THis
> >> occurs when memory reclaim (such as run by kswapd) is reclaiming XFS
> >> inodes and issues a log force to unpin inodes that are dirty in the
> >> CIL.
....
> >> That said, I don't have a reliable deadlock reproducer in the first
> >> place, so I'm interested i hearing what people think about this
> >> approach to solve the problem and ways to test and improve it.
> >>
> >> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> >> ---
> >
> > This seems reasonable to me in principle. It would be nice to have some
> > kind of feedback in terms of effectiveness resolving the original
> > deadlock report. I can't think of a good way of testing short of
> > actually instrumenting the deadlock one way or another, unfortunately.
> > Was there a user that might be willing to test or had a detailed enough
> > description of the workload/environment?
> 
> We have seen this issue on our production Ceph cluster sporadically
> and have tried a long time to reproduce it in a lab environment.
....
> kmem_alloc (mode:0x2408240)
> Feb 13 10:51:57 storage-node35 kernel: [10562.614089] XFS:
> ceph-osd(10078) possible memory allocation deadlock size 32856 in
> kmem_alloc (mode:0x2408240)

High order allocation of 32k. That implies a buffer size of at least
32k is in use. Can you tell me what the output of xfs_info <mntpt>
is for one of your filesystems?

I suspect you are using a 64k directory block size, in which case
I'll ask "are you storing millions of files in a single directory"?
If your answer is no, then "don't do that" is an appropriate
solution because large directory block sizes are slower than the
default (4k) for almost all operations until you get up into the
millions of files per directory range.

> Soon after this, operations get so slow that the OSDs die because of
> their suicide timeouts.
> 
> Then I installed onto 3 servers this patch (applied onto kernel
> v4.4.1). The bad news is that I am still getting the kernel messages
> on these machines. The good news, though, is that they appear at a
> much lower frequency and also the impact on performance seems to be
> lower, so the OSD processes on these three nodes did not get killed.

Right, the patch doesn't fix the underlying issue that memory
fragmentation can prevent high order allocation from succeeding for
long periods.  However, it does ensure that the filesystem does not
immediately deadlock memory reclaim when it happens so the system
has a chance to recover. It still can deadlock the filesystem,
because if we can't commit the transaction we can't unlock the
objects in the transaction and everything can get stuck behind that
if there's something sufficiently important in the blocked
transaction.

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2] [RFC] xfs: allocate log vector buffers outside CIL context lock
  2016-02-14  0:16       ` Dave Chinner
@ 2016-02-15 11:57         ` Jens Rosenboom
  2016-02-15 13:28           ` Dave Chinner
  0 siblings, 1 reply; 9+ messages in thread
From: Jens Rosenboom @ 2016-02-15 11:57 UTC (permalink / raw)
  To: Dave Chinner; +Cc: Brian Foster, xfs

2016-02-14 1:16 GMT+01:00 Dave Chinner <david@fromorbit.com>:
> On Sat, Feb 13, 2016 at 06:09:17PM +0100, Jens Rosenboom wrote:
>> 2016-01-26 15:17 GMT+01:00 Brian Foster <bfoster@redhat.com>:
>> > On Wed, Jan 20, 2016 at 12:58:53PM +1100, Dave Chinner wrote:
>> >> From: Dave Chinner <dchinner@redhat.com>
>> >>
>> >> One of the problems we currently have with delayed logging is that
>> >> under serious memory pressure we can deadlock memory reclaim. THis
>> >> occurs when memory reclaim (such as run by kswapd) is reclaiming XFS
>> >> inodes and issues a log force to unpin inodes that are dirty in the
>> >> CIL.
> ....
>> >> That said, I don't have a reliable deadlock reproducer in the first
>> >> place, so I'm interested i hearing what people think about this
>> >> approach to solve the problem and ways to test and improve it.
>> >>
>> >> Signed-off-by: Dave Chinner <dchinner@redhat.com>
>> >> ---
>> >
>> > This seems reasonable to me in principle. It would be nice to have some
>> > kind of feedback in terms of effectiveness resolving the original
>> > deadlock report. I can't think of a good way of testing short of
>> > actually instrumenting the deadlock one way or another, unfortunately.
>> > Was there a user that might be willing to test or had a detailed enough
>> > description of the workload/environment?
>>
>> We have seen this issue on our production Ceph cluster sporadically
>> and have tried a long time to reproduce it in a lab environment.
> ....
>> kmem_alloc (mode:0x2408240)
>> Feb 13 10:51:57 storage-node35 kernel: [10562.614089] XFS:
>> ceph-osd(10078) possible memory allocation deadlock size 32856 in
>> kmem_alloc (mode:0x2408240)
>
> High order allocation of 32k. That implies a buffer size of at least
> 32k is in use. Can you tell me what the output of xfs_info <mntpt>
> is for one of your filesystems?

$ xfs_info /tmp/cbt/mnt/osd-device-0-data/
meta-data=/dev/sda2              isize=2048   agcount=4, agsize=97370688 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=389482752, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=65536  ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=190177, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

> I suspect you are using a 64k directory block size, in which case
> I'll ask "are you storing millions of files in a single directory"?
> If your answer is no, then "don't do that" is an appropriate
> solution because large directory block sizes are slower than the
> default (4k) for almost all operations until you get up into the
> millions of files per directory range.

These options are kind of standard folklore for setting up Ceph
clusters, I must admit that I delayed testing their performance
implications up to now, so many knobs to turn, so little time.

  mkfs_opts: '-f -i size=2048 -n size=64k'
  mount_opts: '-o inode64,noatime,logbsize=256k'

It turns out that when running with '-n size=4k', indeed I do not get
any warnings during a 10h test run. I'll try to come up with some more
detailed benchmarking of the possible performance impacts, too.

Am I right in assuming that this parameter can not be tuned after the
initial mkfs? In that case getting a production-ready version of your
patch would probably still be valuable for cluster admins wanting to
avoid having to move all of their data to new filesystems.

>> Soon after this, operations get so slow that the OSDs die because of
>> their suicide timeouts.
>>
>> Then I installed onto 3 servers this patch (applied onto kernel
>> v4.4.1). The bad news is that I am still getting the kernel messages
>> on these machines. The good news, though, is that they appear at a
>> much lower frequency and also the impact on performance seems to be
>> lower, so the OSD processes on these three nodes did not get killed.
>
> Right, the patch doesn't fix the underlying issue that memory
> fragmentation can prevent high order allocation from succeeding for
> long periods.  However, it does ensure that the filesystem does not
> immediately deadlock memory reclaim when it happens so the system
> has a chance to recover. It still can deadlock the filesystem,
> because if we can't commit the transaction we can't unlock the
> objects in the transaction and everything can get stuck behind that
> if there's something sufficiently important in the blocked
> transaction.

So how would your success criteria for getting this patch into
upstream look like? Would a benchmark of the 64k directory block size
case on machines all running with patched kernels be interesting? Or
would that scenario disqualify itself as being mistuned in the first
place?

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2] [RFC] xfs: allocate log vector buffers outside CIL context lock
  2016-02-15 11:57         ` Jens Rosenboom
@ 2016-02-15 13:28           ` Dave Chinner
  2016-03-02 12:45             ` Gavin Guo
  0 siblings, 1 reply; 9+ messages in thread
From: Dave Chinner @ 2016-02-15 13:28 UTC (permalink / raw)
  To: Jens Rosenboom; +Cc: Brian Foster, xfs

On Mon, Feb 15, 2016 at 12:57:51PM +0100, Jens Rosenboom wrote:
> 2016-02-14 1:16 GMT+01:00 Dave Chinner <david@fromorbit.com>:
> > On Sat, Feb 13, 2016 at 06:09:17PM +0100, Jens Rosenboom wrote:
> >> 2016-01-26 15:17 GMT+01:00 Brian Foster <bfoster@redhat.com>:
> >> > On Wed, Jan 20, 2016 at 12:58:53PM +1100, Dave Chinner wrote:
> >> We have seen this issue on our production Ceph cluster sporadically
> >> and have tried a long time to reproduce it in a lab environment.
> > ....
> >> kmem_alloc (mode:0x2408240)
> >> Feb 13 10:51:57 storage-node35 kernel: [10562.614089] XFS:
> >> ceph-osd(10078) possible memory allocation deadlock size 32856 in
> >> kmem_alloc (mode:0x2408240)
> >
> > High order allocation of 32k. That implies a buffer size of at least
> > 32k is in use. Can you tell me what the output of xfs_info <mntpt>
> > is for one of your filesystems?
> 
> $ xfs_info /tmp/cbt/mnt/osd-device-0-data/
> meta-data=/dev/sda2              isize=2048   agcount=4, agsize=97370688 blks
>          =                       sectsz=512   attr=2, projid32bit=1
>          =                       crc=0        finobt=0
> data     =                       bsize=4096   blocks=389482752, imaxpct=5
>          =                       sunit=0      swidth=0 blks
> naming   =version 2              bsize=65536  ascii-ci=0 ftype=0
> log      =internal               bsize=4096   blocks=190177, version=2
>          =                       sectsz=512   sunit=0 blks, lazy-count=1
> realtime =none                   extsz=4096   blocks=0, rtextents=0

OK, so 64k directory block size.

> > I suspect you are using a 64k directory block size, in which case
> > I'll ask "are you storing millions of files in a single directory"?
> > If your answer is no, then "don't do that" is an appropriate
> > solution because large directory block sizes are slower than the
> > default (4k) for almost all operations until you get up into the
> > millions of files per directory range.
> 
> These options are kind of standard folklore for setting up Ceph
> clusters, I must admit that I delayed testing their performance
> implications up to now, so many knobs to turn, so little time.
> 
>   mkfs_opts: '-f -i size=2048 -n size=64k'
>   mount_opts: '-o inode64,noatime,logbsize=256k'

/me shakes his head sadly.

Can you please go nuke where ever you read that from orbit?  Please?
It's the only way to be sure that the contagious cargo-cult
stupidity doesn't spread further.

> It turns out that when running with '-n size=4k'

i.e. the default.

> , indeed I do not get
> any warnings during a 10h test run. I'll try to come up with some more
> detailed benchmarking of the possible performance impacts, too.

No surprise there. :/

FWIW, for small file Ceph workloads (e.g swift stores) we've found
that 8k directory block sizes give marginal improvements over the
default 4k, but it's all down hill from there.

> Am I right in assuming that this parameter can not be tuned after the
> initial mkfs?

That's right.

> In that case getting a production-ready version of your
> patch would probably still be valuable for cluster admins wanting to
> avoid having to move all of their data to new filesystems.

Well, yes, that's why I'm working on it. But it's critical core
code, it's also damn tricky and complex, and if I get it wrong it
will corrupt filesystems. So I'm not going to rush a prototype fix
out into production systems no matter how much pressure people put
on me to ship a fix.

> >> Soon after this, operations get so slow that the OSDs die because of
> >> their suicide timeouts.
> >>
> >> Then I installed onto 3 servers this patch (applied onto kernel
> >> v4.4.1). The bad news is that I am still getting the kernel messages
> >> on these machines. The good news, though, is that they appear at a
> >> much lower frequency and also the impact on performance seems to be
> >> lower, so the OSD processes on these three nodes did not get killed.
> >
> > Right, the patch doesn't fix the underlying issue that memory
> > fragmentation can prevent high order allocation from succeeding for
> > long periods.  However, it does ensure that the filesystem does not
> > immediately deadlock memory reclaim when it happens so the system
> > has a chance to recover. It still can deadlock the filesystem,
> > because if we can't commit the transaction we can't unlock the
> > objects in the transaction and everything can get stuck behind that
> > if there's something sufficiently important in the blocked
> > transaction.
> 
> So how would your success criteria for getting this patch into
> upstream look like?

It's already "successful". I've proved locally that it avoids a memory
reclaim deadlock that many people have reported over the past year.
So there's no question that we need a fix to the problem; it's now
just a matter of determining if the issues with this fix (e.g.
doubling memory usage of the CIL) are an acceptible tradeoff for
production workloads, or whether I've got to go back and prototype a
fourth attempt at fixing the problem...

And, of course, there's only some many hours int eh day. I'm into my
19th right now, and I havent' got through everything on my list for
today yet. Tomorrow's list is even longer, and when I get through
that, I hit the big one: "read, understand and review 10000 lines of
complex new code"....

> Would a benchmark of the 64k directory block size
> case on machines all running with patched kernels be interesting? Or
> would that scenario disqualify itself as being mistuned in the first
> place?

Not really - I've confirmed it doesn't cause performance issues on
my usual tranche of benhmarks, so I'mnot conerned about that (it;s
the same amount of work being done, anyway).  Correctness is much
more important right now, and that takes time, effort and focus to
verify.

And speaking of focus, it's now time for me to sleep.

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2] [RFC] xfs: allocate log vector buffers outside CIL context lock
  2016-02-15 13:28           ` Dave Chinner
@ 2016-03-02 12:45             ` Gavin Guo
  2016-03-02 18:00               ` Darrick J. Wong
  0 siblings, 1 reply; 9+ messages in thread
From: Gavin Guo @ 2016-03-02 12:45 UTC (permalink / raw)
  To: Dave Chinner; +Cc: Brian Foster, Jens Rosenboom, xfs

[-- Attachment #1: Type: text/plain, Size: 7129 bytes --]

On Mon, Feb 15, 2016 at 9:28 PM, Dave Chinner <david@fromorbit.com> wrote:
> On Mon, Feb 15, 2016 at 12:57:51PM +0100, Jens Rosenboom wrote:
>> 2016-02-14 1:16 GMT+01:00 Dave Chinner <david@fromorbit.com>:
>> > On Sat, Feb 13, 2016 at 06:09:17PM +0100, Jens Rosenboom wrote:
>> >> 2016-01-26 15:17 GMT+01:00 Brian Foster <bfoster@redhat.com>:
>> >> > On Wed, Jan 20, 2016 at 12:58:53PM +1100, Dave Chinner wrote:
>> >> We have seen this issue on our production Ceph cluster sporadically
>> >> and have tried a long time to reproduce it in a lab environment.
>> > ....
>> >> kmem_alloc (mode:0x2408240)
>> >> Feb 13 10:51:57 storage-node35 kernel: [10562.614089] XFS:
>> >> ceph-osd(10078) possible memory allocation deadlock size 32856 in
>> >> kmem_alloc (mode:0x2408240)
>> >
>> > High order allocation of 32k. That implies a buffer size of at least
>> > 32k is in use. Can you tell me what the output of xfs_info <mntpt>
>> > is for one of your filesystems?
>>
>> $ xfs_info /tmp/cbt/mnt/osd-device-0-data/
>> meta-data=/dev/sda2              isize=2048   agcount=4, agsize=97370688 blks
>>          =                       sectsz=512   attr=2, projid32bit=1
>>          =                       crc=0        finobt=0
>> data     =                       bsize=4096   blocks=389482752, imaxpct=5
>>          =                       sunit=0      swidth=0 blks
>> naming   =version 2              bsize=65536  ascii-ci=0 ftype=0
>> log      =internal               bsize=4096   blocks=190177, version=2
>>          =                       sectsz=512   sunit=0 blks, lazy-count=1
>> realtime =none                   extsz=4096   blocks=0, rtextents=0
>
> OK, so 64k directory block size.
>
>> > I suspect you are using a 64k directory block size, in which case
>> > I'll ask "are you storing millions of files in a single directory"?
>> > If your answer is no, then "don't do that" is an appropriate
>> > solution because large directory block sizes are slower than the
>> > default (4k) for almost all operations until you get up into the
>> > millions of files per directory range.
>>
>> These options are kind of standard folklore for setting up Ceph
>> clusters, I must admit that I delayed testing their performance
>> implications up to now, so many knobs to turn, so little time.
>>
>>   mkfs_opts: '-f -i size=2048 -n size=64k'
>>   mount_opts: '-o inode64,noatime,logbsize=256k'
>
> /me shakes his head sadly.
>
> Can you please go nuke where ever you read that from orbit?  Please?
> It's the only way to be sure that the contagious cargo-cult
> stupidity doesn't spread further.
>
>> It turns out that when running with '-n size=4k'
>
> i.e. the default.
>
>> , indeed I do not get
>> any warnings during a 10h test run. I'll try to come up with some more
>> detailed benchmarking of the possible performance impacts, too.
>
> No surprise there. :/
>
> FWIW, for small file Ceph workloads (e.g swift stores) we've found
> that 8k directory block sizes give marginal improvements over the
> default 4k, but it's all down hill from there.
>
>> Am I right in assuming that this parameter can not be tuned after the
>> initial mkfs?
>
> That's right.
>
>> In that case getting a production-ready version of your
>> patch would probably still be valuable for cluster admins wanting to
>> avoid having to move all of their data to new filesystems.
>
> Well, yes, that's why I'm working on it. But it's critical core
> code, it's also damn tricky and complex, and if I get it wrong it
> will corrupt filesystems. So I'm not going to rush a prototype fix
> out into production systems no matter how much pressure people put
> on me to ship a fix.
>
>> >> Soon after this, operations get so slow that the OSDs die because of
>> >> their suicide timeouts.
>> >>
>> >> Then I installed onto 3 servers this patch (applied onto kernel
>> >> v4.4.1). The bad news is that I am still getting the kernel messages
>> >> on these machines. The good news, though, is that they appear at a
>> >> much lower frequency and also the impact on performance seems to be
>> >> lower, so the OSD processes on these three nodes did not get killed.
>> >
>> > Right, the patch doesn't fix the underlying issue that memory
>> > fragmentation can prevent high order allocation from succeeding for
>> > long periods.  However, it does ensure that the filesystem does not
>> > immediately deadlock memory reclaim when it happens so the system
>> > has a chance to recover. It still can deadlock the filesystem,
>> > because if we can't commit the transaction we can't unlock the
>> > objects in the transaction and everything can get stuck behind that
>> > if there's something sufficiently important in the blocked
>> > transaction.
>>
>> So how would your success criteria for getting this patch into
>> upstream look like?
>
> It's already "successful". I've proved locally that it avoids a memory
> reclaim deadlock that many people have reported over the past year.
> So there's no question that we need a fix to the problem; it's now
> just a matter of determining if the issues with this fix (e.g.
> doubling memory usage of the CIL) are an acceptible tradeoff for
> production workloads, or whether I've got to go back and prototype a
> fourth attempt at fixing the problem...
>
> And, of course, there's only some many hours int eh day. I'm into my
> 19th right now, and I havent' got through everything on my list for
> today yet. Tomorrow's list is even longer, and when I get through
> that, I hit the big one: "read, understand and review 10000 lines of
> complex new code"....
>
>> Would a benchmark of the 64k directory block size
>> case on machines all running with patched kernels be interesting? Or
>> would that scenario disqualify itself as being mistuned in the first
>> place?
>
> Not really - I've confirmed it doesn't cause performance issues on
> my usual tranche of benhmarks, so I'mnot conerned about that (it;s
> the same amount of work being done, anyway).  Correctness is much
> more important right now, and that takes time, effort and focus to
> verify.
>
> And speaking of focus, it's now time for me to sleep.
>
> Cheers,
>
> Dave.
> --
> Dave Chinner
> david@fromorbit.com
>
> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs

I've recently backported the patch to the v3.13 kernel to see if the bug
can be fixed by the patch. Currently, since the bug only can be reproduced
on the production system, I need to ensure the code work correctly before
deploying the kernel. The following is the v3.13 backported kernel source:

http://kernel.ubuntu.com/git/gavinguo/ubuntu-trusty-amd64.git/log/?h=hf00084724v20160219b0hc57647a

I also did the xfstests verification and the log is attached. There are
failed 7 of 93 tests. Investigation is still ongoing to determine if these
errors are related to the file system core functionality failure due to the
backporting incorrection.

I'll appreciate if you can give any suggestion to do the testing, give a
glance to the backported patch or the xfstests error log to see if there is
any thing wrong.

[-- Attachment #2: testresult.log --]
[-- Type: text/x-log, Size: 46318 bytes --]

ubuntu@xfs-test-vm:~/os/xfstests$ uname -a
Linux xfs-test-vm 3.13.0-77-generic #121hf00084724v20160219b0hc57647a SMP Fri Feb 19 08:49:18 UTC 20 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@xfs-test-vm:~/os/xfstests$ TEST_DEV="/dev/vdb" TEST_DIR="/mnt/xfs_mnt/" ./check
check: QA must be run as root
ubuntu@xfs-test-vm:~/os/xfstests$ sudo !!
sudo TEST_DEV="/dev/vdb" TEST_DIR="/mnt/xfs_mnt/" ./check
sudo: unable to resolve host xfs-test-vm
FSTYP         -- xfs (non-debug)
PLATFORM      -- Linux/x86_64 xfs-test-vm 3.13.0-77-generic

generic/001      3s
generic/002      0s
generic/003      [not run] this test requires a valid $SCRATCH_DEV
generic/004      [not run] xfs_io flink support is missing
generic/005      0s
generic/006      0s
generic/007      1s
generic/008      [not run] xfs_io fzero support is missing
generic/009      [not run] xfs_io fzero support is missing
generic/010      0s
generic/011      1s
generic/012      [not run] xfs_io fcollapse support is missing
generic/013      24s
generic/014      9s
generic/015      [not run] this test requires a valid $SCRATCH_DEV
generic/016      [not run] xfs_io fcollapse support is missing
generic/017      [not run] this test requires a valid $SCRATCH_DEV
generic/018      [not run] this test requires a valid $SCRATCH_DEV
generic/019      [not run] this test requires a valid $SCRATCH_DEV
generic/020      3s
generic/021      [not run] xfs_io fcollapse support is missing
generic/022      [not run] xfs_io fcollapse support is missing
generic/023      [not run] kernel doesn't support renameat2 syscall
generic/024      [not run] kernel doesn't support renameat2 syscall
generic/025      [not run] kernel doesn't support renameat2 syscall
generic/026      [not run] this test requires a valid $SCRATCH_DEV
generic/027      [not run] this test requires a valid $SCRATCH_DEV
generic/028      5s
generic/029      [not run] this test requires a valid $SCRATCH_DEV
generic/030      [not run] this test requires a valid $SCRATCH_DEV
generic/031      [not run] this test requires a valid $SCRATCH_DEV
generic/032      [not run] this test requires a valid $SCRATCH_DEV
generic/033      [not run] this test requires a valid $SCRATCH_DEV
generic/034      [not run] this test requires a valid $SCRATCH_DEV
generic/035      0s
generic/036      10s
generic/037      [not run] this test requires a valid $SCRATCH_DEV
generic/038      [not run] this test requires a valid $SCRATCH_DEV
generic/039      [not run] this test requires a valid $SCRATCH_DEV
generic/040      [not run] this test requires a valid $SCRATCH_DEV
generic/041      [not run] this test requires a valid $SCRATCH_DEV
generic/042      [not run] this test requires a valid $SCRATCH_DEV
generic/043      [not run] this test requires a valid $SCRATCH_DEV
generic/044      [not run] this test requires a valid $SCRATCH_DEV
generic/045      [not run] this test requires a valid $SCRATCH_DEV
generic/046      [not run] this test requires a valid $SCRATCH_DEV
generic/047      [not run] this test requires a valid $SCRATCH_DEV
generic/048      [not run] this test requires a valid $SCRATCH_DEV
generic/049      [not run] this test requires a valid $SCRATCH_DEV
generic/050      [not run] this test requires a valid $SCRATCH_DEV
generic/051      [not run] this test requires a valid $SCRATCH_DEV
generic/052      [not run] this test requires a valid $SCRATCH_DEV
generic/053      [not run] this test requires a valid $SCRATCH_DEV
generic/054      [not run] this test requires a valid $SCRATCH_DEV
generic/055      [not run] this test requires a valid $SCRATCH_DEV
generic/056      [not run] this test requires a valid $SCRATCH_DEV
generic/057      [not run] this test requires a valid $SCRATCH_DEV
generic/058      [not run] xfs_io finsert support is missing
generic/059      [not run] this test requires a valid $SCRATCH_DEV
generic/060      [not run] xfs_io finsert support is missing
generic/061      [not run] xfs_io finsert support is missing
generic/062      [not run] this test requires a valid $SCRATCH_DEV
generic/063      [not run] xfs_io finsert support is missing
generic/064      [not run] this test requires a valid $SCRATCH_DEV
generic/065      [not run] this test requires a valid $SCRATCH_DEV
generic/066      [not run] this test requires a valid $SCRATCH_DEV
generic/067      [not run] this test requires a valid $SCRATCH_DEV
generic/068      [not run] this test requires a valid $SCRATCH_DEV
generic/069      [not run] this test requires a valid $SCRATCH_DEV
generic/070      6s
generic/071      [not run] this test requires a valid $SCRATCH_DEV
generic/072      [not run] xfs_io fcollapse support is missing
generic/073      [not run] this test requires a valid $SCRATCH_DEV
generic/074      104s
generic/075      29s
generic/076      [not run] this test requires a valid $SCRATCH_DEV
generic/077      [not run] this test requires a valid $SCRATCH_DEV
generic/078      [not run] kernel doesn't support renameat2 syscall
generic/079      [not run] this test requires a valid $SCRATCH_DEV
generic/080      3s
generic/081      [not run] this test requires a valid $SCRATCH_DEV
generic/082      [not run] this test requires a valid $SCRATCH_DEV
generic/083      [not run] this test requires a valid $SCRATCH_DEV
generic/084      [not run] this test requires a valid $SCRATCH_DEV
generic/085      [not run] this test requires a valid $SCRATCH_DEV
generic/086      1s
generic/087      1s
generic/088      1s
generic/089      5s
generic/090      [not run] this test requires a valid $SCRATCH_DEV
generic/091      70s
generic/092      0s
generic/093      [not run] not suitable for this OS: Linux
generic/094      [not run] this test requires a valid $SCRATCH_DEV
generic/095      [not run] this test requires a valid $SCRATCH_DEV
generic/096      [not run] this test requires a valid $SCRATCH_DEV
generic/097      [not run] not suitable for this OS: Linux
generic/098      [not run] this test requires a valid $SCRATCH_DEV
generic/099      [not run] not suitable for this OS: Linux
generic/100      [not run] this test requires a valid $SCRATCH_DEV
generic/101      [not run] this test requires a valid $SCRATCH_DEV
generic/102      [not run] this test requires a valid $SCRATCH_DEV
generic/103      [not run] this test requires a valid $SCRATCH_DEV
generic/104      [not run] this test requires a valid $SCRATCH_DEV
generic/105      [not run] this test requires a valid $SCRATCH_DEV
generic/106      [not run] this test requires a valid $SCRATCH_DEV
generic/107      [not run] this test requires a valid $SCRATCH_DEV
generic/108      [not run] this test requires a valid $SCRATCH_DEV
generic/109      [not run] this test requires a valid $SCRATCH_DEV
generic/110      [not run] xfs_io reflink support is missing
generic/111      [not run] xfs_io reflink support is missing
generic/112      35s
generic/113      39s
generic/114      53s
generic/115      [not run] xfs_io reflink support is missing
generic/116      [not run] xfs_io reflink support is missing
generic/117      [not run] this test requires a valid $SCRATCH_DEV
generic/118      [not run] xfs_io reflink support is missing
generic/119      [not run] xfs_io reflink support is missing
generic/120      [not run] this test requires a valid $SCRATCH_DEV
generic/121      [not run] xfs_io dedupe support is missing
generic/122      [not run] xfs_io dedupe support is missing
generic/123      1s
generic/124      [not run] this test requires a valid $SCRATCH_DEV
generic/125      62s
generic/126      0s
generic/127      715s
generic/128      [not run] this test requires a valid $SCRATCH_DEV
generic/129      [not run] this test requires a valid $SCRATCH_DEV
generic/130      [not run] this test requires a valid $SCRATCH_DEV
generic/131      1s
generic/132      [not run] this test requires a valid $SCRATCH_DEV
generic/133      268s
generic/134      [not run] xfs_io reflink support is missing
generic/135      [not run] this test requires a valid $SCRATCH_DEV
generic/136      [not run] xfs_io dedupe support is missing
generic/137      [not run] xfs_io reflink support is missing
generic/138      [not run] xfs_io reflink support is missing
generic/139      [not run] xfs_io reflink support is missing
generic/140      [not run] xfs_io reflink support is missing
generic/141      [not run] this test requires a valid $SCRATCH_DEV
generic/142      [not run] xfs_io reflink support is missing
generic/143      [not run] xfs_io reflink support is missing
generic/144      [not run] xfs_io reflink support is missing
generic/145      [not run] xfs_io reflink support is missing
generic/146      [not run] xfs_io reflink support is missing
generic/147      [not run] xfs_io reflink support is missing
generic/148      [not run] xfs_io reflink support is missing
generic/149      [not run] xfs_io reflink support is missing
generic/150      [not run] xfs_io reflink support is missing
generic/151      [not run] xfs_io reflink support is missing
generic/152      [not run] xfs_io reflink support is missing
generic/153      [not run] xfs_io reflink support is missing
generic/154      [not run] xfs_io reflink support is missing
generic/155      [not run] xfs_io reflink support is missing
generic/156      [not run] xfs_io reflink support is missing
generic/157      [not run] xfs_io reflink support is missing
generic/158      [not run] xfs_io dedupe support is missing
generic/159      [not run] xfs_io reflink support is missing
generic/160      [not run] xfs_io dedupe support is missing
generic/161      [not run] this test requires a valid $SCRATCH_DEV
generic/162      [not run] this test requires a valid $SCRATCH_DEV
generic/163      [not run] this test requires a valid $SCRATCH_DEV
generic/164      [not run] this test requires a valid $SCRATCH_DEV
generic/165      [not run] this test requires a valid $SCRATCH_DEV
generic/166      [not run] this test requires a valid $SCRATCH_DEV
generic/167      [not run] this test requires a valid $SCRATCH_DEV
generic/168      [not run] this test requires a valid $SCRATCH_DEV
generic/169      [not run] this test requires a valid $SCRATCH_DEV
generic/170      [not run] this test requires a valid $SCRATCH_DEV
generic/171      [not run] this test requires a valid $SCRATCH_DEV
generic/172      [not run] this test requires a valid $SCRATCH_DEV
generic/173      [not run] this test requires a valid $SCRATCH_DEV
generic/174      [not run] this test requires a valid $SCRATCH_DEV
generic/175      [not run] this test requires a valid $SCRATCH_DEV
generic/176      [not run] this test requires a valid $SCRATCH_DEV
generic/177      [not run] this test requires a valid $SCRATCH_DEV
generic/178      [not run] xfs_io reflink support is missing
generic/179      [not run] xfs_io reflink support is missing
generic/180      [not run] xfs_io reflink support is missing
generic/181      [not run] xfs_io reflink support is missing
generic/182      [not run] xfs_io dedupe support is missing
generic/183      [not run] this test requires a valid $SCRATCH_DEV
generic/184      0s
generic/185      [not run] this test requires a valid $SCRATCH_DEV
generic/186      [not run] this test requires a valid $SCRATCH_DEV
generic/187      [not run] this test requires a valid $SCRATCH_DEV
generic/188      [not run] this test requires a valid $SCRATCH_DEV
generic/189      [not run] this test requires a valid $SCRATCH_DEV
generic/190      [not run] this test requires a valid $SCRATCH_DEV
generic/191      [not run] this test requires a valid $SCRATCH_DEV
generic/192      42s
generic/193      0s
generic/194      [not run] this test requires a valid $SCRATCH_DEV
generic/195      [not run] this test requires a valid $SCRATCH_DEV
generic/196      [not run] this test requires a valid $SCRATCH_DEV
generic/197      [not run] this test requires a valid $SCRATCH_DEV
generic/198      1s
generic/199      [not run] this test requires a valid $SCRATCH_DEV
generic/200      [not run] this test requires a valid $SCRATCH_DEV
generic/201      [not run] this test requires a valid $SCRATCH_DEV
generic/202      [not run] this test requires a valid $SCRATCH_DEV
generic/203      [not run] this test requires a valid $SCRATCH_DEV
generic/204      [not run] this test requires a valid $SCRATCH_DEV
generic/205      [not run] this test requires a valid $SCRATCH_DEV
generic/206      [not run] this test requires a valid $SCRATCH_DEV
generic/207      13s
generic/208      201s
umount: /mnt/xfs_mnt: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
_check_xfs_filesystem: filesystem on /dev/vdb has dirty log (see /home/ubuntu/os/xfstests/results//generic/208.full)
_check_xfs_filesystem: filesystem on /dev/vdb is inconsistent (c) (see /home/ubuntu/os/xfstests/results//generic/208.full)
_check_xfs_filesystem: filesystem on /dev/vdb is inconsistent (r) (see /home/ubuntu/os/xfstests/results//generic/208.full)
generic/209      37s
generic/210      0s
generic/211      0s
generic/212      0s
generic/213      1s
generic/214      0s
generic/215      2s
generic/216      [not run] this test requires a valid $SCRATCH_DEV
generic/217      [not run] this test requires a valid $SCRATCH_DEV
generic/218      [not run] this test requires a valid $SCRATCH_DEV
generic/219      [not run] this test requires a valid $SCRATCH_DEV
generic/220      [not run] this test requires a valid $SCRATCH_DEV
generic/221      1s
generic/222      [not run] this test requires a valid $SCRATCH_DEV
generic/223      [not run] this test requires a valid $SCRATCH_DEV
generic/224      [not run] this test requires a valid $SCRATCH_DEV
generic/225      [not run] this test requires a valid $SCRATCH_DEV
generic/226      [not run] this test requires a valid $SCRATCH_DEV
generic/227      [not run] this test requires a valid $SCRATCH_DEV
generic/228      0s
generic/229      [not run] this test requires a valid $SCRATCH_DEV
generic/230      [not run] this test requires a valid $SCRATCH_DEV
generic/231      [not run] this test requires a valid $SCRATCH_DEV
generic/232      [not run] this test requires a valid $SCRATCH_DEV
generic/233      [not run] this test requires a valid $SCRATCH_DEV
generic/234      [not run] this test requires a valid $SCRATCH_DEV
generic/235      [not run] this test requires a valid $SCRATCH_DEV
generic/236      2s
generic/237      [not run] chacl command not found
generic/238      [not run] this test requires a valid $SCRATCH_DEV
generic/239      3s
generic/240      0s
generic/241      72s
generic/242      [not run] this test requires a valid $SCRATCH_DEV
generic/243      [not run] this test requires a valid $SCRATCH_DEV
generic/244      [not run] this test requires a valid $SCRATCH_DEV
generic/245      0s
generic/246      1s
generic/247      28s
_check_dmesg: something found in dmesg (see /home/ubuntu/os/xfstests/results//generic/247.dmesg)
generic/248      0s
generic/249      1s
generic/250      [not run] this test requires a valid $SCRATCH_DEV
generic/251      [not run] this test requires a valid $SCRATCH_DEV
generic/252      [not run] this test requires a valid $SCRATCH_DEV
generic/253      [not run] this test requires a valid $SCRATCH_DEV
generic/254      [not run] this test requires a valid $SCRATCH_DEV
generic/255      1s
generic/256      [not run] this test requires a valid $SCRATCH_DEV
generic/257      0s
generic/258      0s
generic/259      [not run] this test requires a valid $SCRATCH_DEV
generic/260      [not run] this test requires a valid $SCRATCH_DEV
generic/261      [not run] this test requires a valid $SCRATCH_DEV
generic/262      [not run] this test requires a valid $SCRATCH_DEV
generic/263      [failed, exit status 1] - output mismatch (see /home/ubuntu/os/xfstests/results//generic/263.out.bad)
    --- tests/generic/263.out   2016-03-02 07:03:04.063808319 +0000
    +++ /home/ubuntu/os/xfstests/results//generic/263.out.bad   2016-03-02 07:53:20.511808319 +0000
    @@ -1,3 +1,8887 @@
     QA output created by 263
     fsx -N 10000 -o 8192 -l 500000 -r PSIZE -t BSIZE -w BSIZE -Z
     fsx -N 10000 -o 128000 -l 500000 -r PSIZE -t BSIZE -w BSIZE -Z
    +main: filesystem does not support fallocate mode FALLOC_FL_ZERO_RANGE, disabling!
    +main: filesystem does not support fallocate mode FALLOC_FL_COLLAPSE_RANGE, disabling!
    +main: filesystem does not support fallocate mode FALLOC_FL_INSERT_RANGE, disabling!
    +truncating to largest ever: 0x11e00
    ...
    (Run 'diff -u tests/generic/263.out /home/ubuntu/os/xfstests/results//generic/263.out.bad'  to see the entire diff)
generic/264      [not run] this test requires a valid $SCRATCH_DEV
generic/265      [not run] this test requires a valid $SCRATCH_DEV
generic/266      [not run] this test requires a valid $SCRATCH_DEV
generic/267      [not run] this test requires a valid $SCRATCH_DEV
generic/268      [not run] this test requires a valid $SCRATCH_DEV
generic/269      [not run] this test requires a valid $SCRATCH_DEV
generic/270      [not run] this test requires a valid $SCRATCH_DEV
generic/271      [not run] this test requires a valid $SCRATCH_DEV
generic/272      [not run] this test requires a valid $SCRATCH_DEV
generic/273      [not run] this test requires a valid $SCRATCH_DEV
generic/274      [not run] this test requires a valid $SCRATCH_DEV
generic/275      [not run] this test requires a valid $SCRATCH_DEV
generic/276      [not run] this test requires a valid $SCRATCH_DEV
generic/277      [not run] this test requires a valid $SCRATCH_DEV
generic/278      [not run] this test requires a valid $SCRATCH_DEV
generic/279      [not run] this test requires a valid $SCRATCH_DEV
generic/280      [not run] this test requires a valid $SCRATCH_DEV
generic/281      [not run] this test requires a valid $SCRATCH_DEV
generic/282      [not run] this test requires a valid $SCRATCH_DEV
generic/283      [not run] this test requires a valid $SCRATCH_DEV
generic/284      [not run] this test requires a valid $SCRATCH_DEV
generic/285      0s
generic/286      5s
generic/287      [not run] this test requires a valid $SCRATCH_DEV
generic/288      [not run] this test requires a valid $SCRATCH_DEV
generic/289      [not run] this test requires a valid $SCRATCH_DEV
generic/290      [not run] this test requires a valid $SCRATCH_DEV
generic/291      [not run] this test requires a valid $SCRATCH_DEV
generic/292      [not run] this test requires a valid $SCRATCH_DEV
generic/293      [not run] this test requires a valid $SCRATCH_DEV
generic/294      [not run] this test requires a valid $SCRATCH_DEV
generic/295      [not run] this test requires a valid $SCRATCH_DEV
generic/296      [not run] this test requires a valid $SCRATCH_DEV
generic/297      [not run] this test requires a valid $SCRATCH_DEV
generic/298      [not run] this test requires a valid $SCRATCH_DEV
generic/299      [not run] this test requires a valid $SCRATCH_DEV
generic/300      [not run] this test requires a valid $SCRATCH_DEV
generic/301      [not run] this test requires a valid $SCRATCH_DEV
generic/302      [not run] this test requires a valid $SCRATCH_DEV
generic/303      [not run] xfs_io reflink support is missing
generic/304      [not run] xfs_io dedupe support is missing
generic/305      [not run] this test requires a valid $SCRATCH_DEV
generic/306      [not run] this test requires a valid $SCRATCH_DEV
generic/307      [not run] this test requires a valid $SCRATCH_DEV
generic/308      0s
generic/309      1s
generic/310      65s
generic/311      [not run] this test requires a valid $SCRATCH_DEV
generic/312      [not run] this test requires a valid $SCRATCH_DEV
generic/313      4s
generic/314      [not run] chacl command not found
generic/315      0s
generic/316      1s
generic/317      [not run] this test requires a valid $SCRATCH_DEV
generic/318      [not run] this test requires a valid $SCRATCH_DEV
generic/319      [not run] chacl command not found
generic/320      [not run] this test requires a valid $SCRATCH_DEV
generic/321      [not run] this test requires a valid $SCRATCH_DEV
generic/322      [not run] this test requires a valid $SCRATCH_DEV
generic/323      121s
generic/324      [not run] this test requires a valid $SCRATCH_DEV
generic/325      [not run] this test requires a valid $SCRATCH_DEV
generic/326      [not run] this test requires a valid $SCRATCH_DEV
generic/327      [not run] this test requires a valid $SCRATCH_DEV
generic/328      [not run] this test requires a valid $SCRATCH_DEV
generic/329      [not run] this test requires a valid $SCRATCH_DEV
generic/330      [not run] this test requires a valid $SCRATCH_DEV
generic/331      [not run] this test requires a valid $SCRATCH_DEV
generic/332      [not run] this test requires a valid $SCRATCH_DEV
generic/333      [not run] this test requires a valid $SCRATCH_DEV
generic/334      [not run] this test requires a valid $SCRATCH_DEV
generic/335      [not run] this test requires a valid $SCRATCH_DEV
generic/336      [not run] this test requires a valid $SCRATCH_DEV
generic/337      [not run] this test requires a valid $SCRATCH_DEV
shared/001       [not run] not suitable for this filesystem type: xfs
shared/002       [not run] this test requires a valid $SCRATCH_DEV
shared/003       [not run] not suitable for this filesystem type: xfs
shared/006       [not run] this test requires a valid $SCRATCH_DEV
shared/032       [not run] this test requires a valid $SCRATCH_DEV
shared/051       [not run] chacl command not found
shared/272       [not run] not suitable for this filesystem type: xfs
shared/289       [not run] not suitable for this filesystem type: xfs
shared/298       45s
xfs/001  [not run] this test requires a valid $SCRATCH_DEV
xfs/002  [not run] this test requires a valid $SCRATCH_DEV
xfs/003  0s
xfs/004  [not run] this test requires a valid $SCRATCH_DEV
xfs/005  [not run] this test requires a valid $SCRATCH_DEV
xfs/006  [not run] this test requires a valid $SCRATCH_DEV
xfs/007  [not run] this test requires a valid $SCRATCH_DEV
xfs/008  2s
xfs/009  [not run] this test requires a valid $SCRATCH_DEV
xfs/010  [not run] this test requires a valid $SCRATCH_DEV
xfs/011  [not run] this test requires a valid $SCRATCH_DEV
xfs/012  2s
xfs/013  [not run] this test requires a valid $SCRATCH_DEV
xfs/014  [not run] this test requires a valid $SCRATCH_DEV
xfs/015  [not run] this test requires a valid $SCRATCH_DEV
xfs/016  [not run] this test requires a valid $SCRATCH_DEV
xfs/017  [not run] this test requires a valid $SCRATCH_DEV
xfs/018  [not run] this test requires a valid $SCRATCH_DEV
xfs/019  [not run] this test requires a valid $SCRATCH_DEV
xfs/020  [failed, exit status 139] - output mismatch (see /home/ubuntu/os/xfstests/results//xfs/020.out.bad)
    --- tests/xfs/020.out       2016-03-02 07:03:04.083808319 +0000
    +++ /home/ubuntu/os/xfstests/results//xfs/020.out.bad       2016-03-02 07:58:56.063808319 +0000
    @@ -1,2 +1,3 @@
     QA output created by 020
     Silence is golden
    +./tests/xfs/020: line 58: 28658 Segmentation fault      $XFS_REPAIR_PROG -f -o ag_stride=32 -t 1 $fsfile > /dev/null 2>&1
    ...
    (Run 'diff -u tests/xfs/020.out /home/ubuntu/os/xfstests/results//xfs/020.out.bad'  to see the entire diff)
xfs/021  [not run] this test requires a valid $SCRATCH_DEV
xfs/022  [not run] xfsdump not found
xfs/023  [not run] xfsdump not found
xfs/024  [not run] xfsdump not found
xfs/025  [not run] xfsdump not found
xfs/026  [not run] xfsdump not found
xfs/027  [not run] xfsdump not found
xfs/028  [not run] xfsdump not found
xfs/029  [not run] this test requires a valid $SCRATCH_DEV
xfs/030  [not run] this test requires a valid $SCRATCH_DEV
xfs/031  [not run] this test requires a valid $SCRATCH_DEV
xfs/032  [not run] this test requires a valid $SCRATCH_DEV
xfs/033  [not run] this test requires a valid $SCRATCH_DEV
xfs/034  [not run] this test requires a valid $SCRATCH_DEV
xfs/035  [not run] xfsdump not found
xfs/036  [not run] xfsdump not found
xfs/037  [not run] xfsdump not found
xfs/038  [not run] xfsdump not found
xfs/039  [not run] xfsdump not found
xfs/040  [not run] Can't run srcdiff without KWORKAREA set
xfs/041  [not run] this test requires a valid $SCRATCH_DEV
xfs/042  [not run] this test requires a valid $SCRATCH_DEV
xfs/043  [not run] xfsdump not found
xfs/044  [not run] This test requires a valid $SCRATCH_LOGDEV
xfs/045  [not run] this test requires a valid $SCRATCH_DEV
xfs/046  [not run] xfsdump not found
xfs/047  [not run] xfsdump not found
xfs/048  0s
xfs/049  [not run] this test requires a valid $SCRATCH_DEV
xfs/050  [not run] this test requires a valid $SCRATCH_DEV
xfs/051  [not run] this test requires a valid $SCRATCH_DEV
xfs/052  [not run] this test requires a valid $SCRATCH_DEV
xfs/053  [not run] this test requires a valid $SCRATCH_DEV
xfs/054  [not run] this test requires a valid $SCRATCH_DEV
xfs/055  [not run] xfsdump not found
xfs/056  [not run] xfsdump not found
xfs/057  [not run] Place holder for IRIX test 057
xfs/058  [not run] Place holder for IRIX test 058
xfs/059  [not run] xfsdump not found
xfs/060  [not run] xfsdump not found
xfs/061  [not run] xfsdump not found
xfs/062  [not run] this test requires a valid $SCRATCH_DEV
xfs/063  [not run] xfsdump not found
xfs/064  [not run] xfsdump not found
xfs/065  [not run] xfsdump not found
xfs/066  [not run] xfsdump not found
xfs/067  [not run] chacl command not found
xfs/068  [not run] xfsdump not found
xfs/069  [not run] this test requires a valid $SCRATCH_DEV
xfs/070  [not run] this test requires a valid $SCRATCH_DEV
xfs/071  [not run] this test requires a valid $SCRATCH_DEV
xfs/072  [not run] this test requires a valid $SCRATCH_DEV
xfs/073  [not run] this test requires a valid $SCRATCH_DEV
xfs/074  [failed, exit status 1] - output mismatch (see /home/ubuntu/os/xfstests/results//xfs/074.out.bad)
    --- tests/xfs/074.out       2016-03-02 07:03:04.095808319 +0000
    +++ /home/ubuntu/os/xfstests/results//xfs/074.out.bad       2016-03-02 07:59:19.943808319 +0000
    @@ -1,2 +1,4 @@
     QA output created by 074
    -Silence is golden
    +fallocate: No space left on device
    +_check_xfs_filesystem: filesystem on /dev/loop0 is inconsistent (c) (see /home/ubuntu/os/xfstests/results//xfs/074.full)
    +_check_xfs_filesystem: filesystem on /dev/loop0 is inconsistent (r) (see /home/ubuntu/os/xfstests/results//xfs/074.full)
    ...
    (Run 'diff -u tests/xfs/074.out /home/ubuntu/os/xfstests/results//xfs/074.out.bad'  to see the entire diff)
xfs/075  [not run] this test requires a valid $SCRATCH_DEV
xfs/076  [not run] this test requires a valid $SCRATCH_DEV
xfs/077  [not run] this test requires a valid $SCRATCH_DEV
xfs/078  48s
xfs/079  [not run] this test requires a valid $SCRATCH_DEV
xfs/080  5s
xfs/081  [not run] this test requires a valid $SCRATCH_DEV
xfs/082  [not run] this test requires a valid $SCRATCH_DEV
xfs/083  [not run] this test requires a valid $SCRATCH_DEV
xfs/084  60s
xfs/085  [not run] this test requires a valid $SCRATCH_DEV
xfs/086  [not run] this test requires a valid $SCRATCH_DEV
xfs/087  [not run] this test requires a valid $SCRATCH_DEV
xfs/088  [not run] this test requires a valid $SCRATCH_DEV
xfs/089  [not run] this test requires a valid $SCRATCH_DEV
xfs/090  [not run] External volumes not in use, skipped this test
xfs/091  [not run] this test requires a valid $SCRATCH_DEV
xfs/092  [not run] this test requires a valid $SCRATCH_DEV
xfs/093  [not run] this test requires a valid $SCRATCH_DEV
xfs/094  [not run] External volumes not in use, skipped this test
xfs/095  [not run] not suitable for this OS: Linux
xfs/096  [not run] this test requires a valid $SCRATCH_DEV
xfs/097  [not run] this test requires a valid $SCRATCH_DEV
xfs/098  [not run] this test requires a valid $SCRATCH_DEV
xfs/099  [not run] this test requires a valid $SCRATCH_DEV
xfs/100  [not run] this test requires a valid $SCRATCH_DEV
xfs/101  [not run] this test requires a valid $SCRATCH_DEV
xfs/102  [not run] this test requires a valid $SCRATCH_DEV
xfs/103  [not run] this test requires a valid $SCRATCH_DEV
xfs/104  [not run] this test requires a valid $SCRATCH_DEV
xfs/105  [not run] this test requires a valid $SCRATCH_DEV
xfs/106  [not run] this test requires a valid $SCRATCH_DEV
xfs/107  [not run] this test requires a valid $SCRATCH_DEV
xfs/108  [not run] this test requires a valid $SCRATCH_DEV
xfs/109  [not run] this test requires a valid $SCRATCH_DEV
xfs/110  [not run] this test requires a valid $SCRATCH_DEV
xfs/111  [not run] this test requires a valid $SCRATCH_DEV
xfs/112  [not run] this test requires a valid $SCRATCH_DEV
xfs/113  [not run] this test requires a valid $SCRATCH_DEV
xfs/114  [not run] not suitable for this OS: Linux
xfs/115  [not run] not suitable for this OS: Linux
xfs/116  [not run] this test requires a valid $SCRATCH_DEV
xfs/117  [not run] this test requires a valid $SCRATCH_DEV
xfs/118  [not run] this test requires a valid $SCRATCH_DEV
xfs/119  [not run] this test requires a valid $SCRATCH_DEV
xfs/120  [not run] this test requires a valid $SCRATCH_DEV
xfs/121  [not run] this test requires a valid $SCRATCH_DEV
xfs/122  [not run] indent utility required, skipped this test
xfs/123  [not run] this test requires a valid $SCRATCH_DEV
xfs/124  [not run] this test requires a valid $SCRATCH_DEV
xfs/125  [not run] this test requires a valid $SCRATCH_DEV
xfs/126  [not run] this test requires a valid $SCRATCH_DEV
xfs/127  [not run] this test requires a valid $SCRATCH_DEV
xfs/128  [not run] this test requires a valid $SCRATCH_DEV
xfs/129  [not run] this test requires a valid $SCRATCH_DEV
xfs/130  [not run] this test requires a valid $SCRATCH_DEV
xfs/131  [not run] External volumes not in use, skipped this test
xfs/132  [not run] xfs_io reflink support is missing
xfs/133  [not run] this test requires a valid $SCRATCH_DEV
xfs/134  [not run] this test requires a valid $SCRATCH_DEV
xfs/135  [not run] this test requires a valid $SCRATCH_DEV
xfs/136  [not run] this test requires a valid $SCRATCH_DEV
xfs/137  [not run] this test requires a valid $SCRATCH_DEV
xfs/138  [not run] this test requires a valid $SCRATCH_DEV
xfs/139  [not run] this test requires a valid $SCRATCH_DEV
xfs/140  [not run] this test requires a valid $SCRATCH_DEV
xfs/141  [not run] no kernel support for XFS sysfs attributes
xfs/142  [not run] this test requires a valid $SCRATCH_DEV
xfs/143  [not run] this test requires a valid $SCRATCH_DEV
xfs/144  [not run] this test requires a valid $SCRATCH_DEV
xfs/145  [not run] this test requires a valid $SCRATCH_DEV
xfs/146  [not run] this test requires a valid $SCRATCH_DEV
xfs/147  [not run] this test requires a valid $SCRATCH_DEV
xfs/148  [not run] parallel repair binary xfs_prepair64 is not installed
xfs/149  [not run] parallel repair binary xfs_prepair is not installed
xfs/150  [not run] this test requires a valid $SCRATCH_DEV
xfs/151  [not run] this test requires a valid $SCRATCH_DEV
xfs/152  [not run] this test requires a valid $SCRATCH_DEV
xfs/153  [not run] this test requires a valid $SCRATCH_DEV
xfs/154  [not run] this test requires a valid $SCRATCH_DEV
xfs/155  [not run] this test requires a valid $SCRATCH_DEV
xfs/156  [not run] this test requires a valid $SCRATCH_DEV
xfs/157  [not run] this test requires a valid $SCRATCH_DEV
xfs/158  [not run] this test requires a valid $SCRATCH_DEV
xfs/159  [not run] this test requires a valid $SCRATCH_DEV
xfs/160  [not run] this test requires a valid $SCRATCH_DEV
xfs/161  [not run] this test requires a valid $SCRATCH_DEV
xfs/162  [not run] this test requires a valid $SCRATCH_DEV
xfs/163  [not run] this test requires a valid $SCRATCH_DEV
xfs/164  0s
xfs/165  0s
xfs/166  [not run] this test requires a valid $SCRATCH_DEV
xfs/167  [not run] this test requires a valid $SCRATCH_DEV
xfs/168  [not run] this test requires a valid $SCRATCH_DEV
xfs/169  [not run] this test requires a valid $SCRATCH_DEV
xfs/170  [not run] this test requires a valid $SCRATCH_DEV
xfs/171  [not run] this test requires a valid $SCRATCH_DEV
xfs/172  [not run] this test requires a valid $SCRATCH_DEV
xfs/173  [not run] this test requires a valid $SCRATCH_DEV
xfs/174  [not run] this test requires a valid $SCRATCH_DEV
xfs/175  [not run] this test requires a valid $SCRATCH_DEV
xfs/176  [not run] this test requires a valid $SCRATCH_DEV
xfs/177  [not run] this test requires a valid $SCRATCH_DEV
xfs/178  [not run] this test requires a valid $SCRATCH_DEV
xfs/179  [not run] this test requires a valid $SCRATCH_DEV
xfs/180  [not run] this test requires a valid $SCRATCH_DEV
xfs/181  [not run] this test requires a valid $SCRATCH_DEV
xfs/182  [not run] this test requires a valid $SCRATCH_DEV
xfs/183  [not run] this test requires a valid $SCRATCH_DEV
xfs/184  [not run] this test requires a valid $SCRATCH_DEV
xfs/185  [not run] this test requires a valid $SCRATCH_DEV
xfs/186  [not run] this test requires a valid $SCRATCH_DEV
xfs/187  [not run] this test requires a valid $SCRATCH_DEV
xfs/188  [not run] this test requires a valid $SCRATCH_DEV
xfs/189  [not run] this test requires a valid $SCRATCH_DEV
xfs/190  [not run] this test requires a valid $SCRATCH_DEV
xfs/191  [not run] this test requires a valid $SCRATCH_DEV
xfs/192  [not run] this test requires a valid $SCRATCH_DEV
xfs/193  [not run] this test requires a valid $SCRATCH_DEV
xfs/194  [not run] sector size(4096) too large for platform page size(4096)
xfs/195  [not run] xfsdump utility required, skipped this test
xfs/196  [not run] this test requires a valid $SCRATCH_DEV
xfs/197  [not run] This test is only valid on 32 bit machines
xfs/198  [not run] this test requires a valid $SCRATCH_DEV
xfs/199  [not run] this test requires a valid $SCRATCH_DEV
xfs/200  [not run] this test requires a valid $SCRATCH_DEV
xfs/201  [not run] this test requires a valid $SCRATCH_DEV
xfs/202  [not run] this test requires a valid $SCRATCH_DEV
xfs/203  [not run] this test requires a valid $SCRATCH_DEV
xfs/204  [not run] this test requires a valid $SCRATCH_DEV
xfs/205  [not run] this test requires a valid $SCRATCH_DEV
xfs/206  4s
xfs/207  [not run] this test requires a valid $SCRATCH_DEV
xfs/208  [not run] this test requires a valid $SCRATCH_DEV
xfs/209  [not run] this test requires a valid $SCRATCH_DEV
xfs/210  [not run] this test requires a valid $SCRATCH_DEV
xfs/211  [not run] this test requires a valid $SCRATCH_DEV
xfs/212  [not run] this test requires a valid $SCRATCH_DEV
xfs/213  [not run] this test requires a valid $SCRATCH_DEV
xfs/214  [not run] this test requires a valid $SCRATCH_DEV
xfs/215  [not run] this test requires a valid $SCRATCH_DEV
xfs/216  [not run] this test requires a valid $SCRATCH_DEV
xfs/217  [not run] this test requires a valid $SCRATCH_DEV
xfs/218  [not run] this test requires a valid $SCRATCH_DEV
xfs/219  [not run] this test requires a valid $SCRATCH_DEV
xfs/220  [not run] this test requires a valid $SCRATCH_DEV
xfs/221  [not run] this test requires a valid $SCRATCH_DEV
xfs/222  0s
xfs/223  [not run] this test requires a valid $SCRATCH_DEV
xfs/224  [not run] this test requires a valid $SCRATCH_DEV
xfs/225  [not run] this test requires a valid $SCRATCH_DEV
xfs/226  [not run] this test requires a valid $SCRATCH_DEV
xfs/227  [not run] this test requires a valid $SCRATCH_DEV
xfs/228  [not run] this test requires a valid $SCRATCH_DEV
xfs/229  75s
xfs/230  [not run] this test requires a valid $SCRATCH_DEV
xfs/231  [not run] this test requires a valid $SCRATCH_DEV
xfs/232  [not run] this test requires a valid $SCRATCH_DEV
xfs/233  [not run] this test requires a valid $SCRATCH_DEV
xfs/234  [not run] this test requires a valid $SCRATCH_DEV
xfs/235  [not run] this test requires a valid $SCRATCH_DEV
xfs/236  [not run] this test requires a valid $SCRATCH_DEV
xfs/237  [not run] this test requires a valid $SCRATCH_DEV
xfs/238  [not run] this test requires a valid $SCRATCH_DEV
xfs/239  [not run] this test requires a valid $SCRATCH_DEV
xfs/240  [not run] this test requires a valid $SCRATCH_DEV
xfs/241  [not run] this test requires a valid $SCRATCH_DEV
xfs/242  1s
xfs/243  [not run] this test requires a valid $SCRATCH_DEV
xfs/244  [not run] this test requires a valid $SCRATCH_DEV
xfs/245  [not run] this test requires a valid $SCRATCH_DEV
xfs/246  [not run] xfs_io bmap doesn't support -c
xfs/247  [not run] this test requires a valid $SCRATCH_DEV
xfs/248  [not run] this test requires a valid $SCRATCH_DEV
xfs/249  [not run] this test requires a valid $SCRATCH_DEV
xfs/250  [failed, exit status 1] - output mismatch (see /home/ubuntu/os/xfstests/results//xfs/250.out.bad)
    --- tests/xfs/250.out       2016-03-02 07:03:04.119808319 +0000
    +++ /home/ubuntu/os/xfstests/results//xfs/250.out.bad       2016-03-02 08:03:49.847808319 +0000
    @@ -11,4 +11,4 @@
     *** preallocate large file
     *** unmount loop filesystem
     *** check loop filesystem
    -*** done
    +_check_xfs_filesystem: filesystem on /mnt/xfs_mnt/250.fs is inconsistent (r) (see /home/ubuntu/os/xfstests/results//xfs/250.full)
    ...
    (Run 'diff -u tests/xfs/250.out /home/ubuntu/os/xfstests/results//xfs/250.out.bad'  to see the entire diff)
xfs/251  [not run] this test requires a valid $SCRATCH_DEV
xfs/252  2s
xfs/253  [not run] this test requires a valid $SCRATCH_DEV
xfs/254  [not run] this test requires a valid $SCRATCH_DEV
xfs/255  [not run] this test requires a valid $SCRATCH_DEV
xfs/256  [not run] this test requires a valid $SCRATCH_DEV
xfs/257  [not run] this test requires a valid $SCRATCH_DEV
xfs/258  [not run] this test requires a valid $SCRATCH_DEV
xfs/259  2s
xfs/260  [not run] this test requires a valid $SCRATCH_DEV
xfs/261  [not run] this test requires a valid $SCRATCH_DEV
xfs/262  [not run] this test requires a valid $SCRATCH_DEV
xfs/266  [not run] xfsdump not found
xfs/267  [not run] xfsdump not found
xfs/268  [not run] xfsdump not found
xfs/278  [not run] this test requires a valid $SCRATCH_DEV
xfs/279  7s
xfs/281  [not run] xfsdump not found
xfs/282  [not run] xfsdump not found
xfs/283  [not run] xfsdump not found
xfs/287  [not run] xfsdump not found
xfs/290  1s
xfs/291  [not run] this test requires a valid $SCRATCH_DEV
xfs/292  - output mismatch (see /home/ubuntu/os/xfstests/results//xfs/292.out.bad)
    --- tests/xfs/292.out       2016-03-02 07:03:04.123808319 +0000
    +++ /home/ubuntu/os/xfstests/results//xfs/292.out.bad       2016-03-02 08:04:19.487808319 +0000
    @@ -5,5 +5,5 @@
     agsize=16777216
     mkfs.xfs with cmdline geometry
     ddev=FILENAME
    -agcount=16
    -agsize=4194304
    +agcount=4
    +agsize=16777216
    ...
    (Run 'diff -u tests/xfs/292.out /home/ubuntu/os/xfstests/results//xfs/292.out.bad'  to see the entire diff)
xfs/293  - output mismatch (see /home/ubuntu/os/xfstests/results//xfs/293.out.bad)
    --- tests/xfs/293.out       2016-03-02 07:03:04.123808319 +0000
    +++ /home/ubuntu/os/xfstests/results//xfs/293.out.bad       2016-03-02 08:04:22.499808319 +0000
    @@ -1,2 +1,8 @@
     QA output created by 293
     Silence is golden
    +chproj not documented in the xfs_io manpage
    +fiemap not documented in the xfs_io manpage
    +fpunch not documented in the xfs_io manpage
    +lsproj not documented in the xfs_io manpage
    +setfl not documented in the xfs_io manpage
    ...
    (Run 'diff -u tests/xfs/293.out /home/ubuntu/os/xfstests/results//xfs/293.out.bad'  to see the entire diff)
xfs/295  [not run] this test requires a valid $SCRATCH_DEV
xfs/296  [not run] xfsdump not found
xfs/297  [not run] this test requires a valid $SCRATCH_DEV
xfs/298  [not run] this test requires a valid $SCRATCH_DEV
xfs/299  [not run] this test requires a valid $SCRATCH_DEV
xfs/300  [not run] this test requires a valid $SCRATCH_DEV
xfs/301  [not run] xfsdump not found
xfs/302  [not run] xfsdump not found
xfs/303  1s
xfs/304  [not run] this test requires a valid $SCRATCH_DEV
xfs/305  [not run] this test requires a valid $SCRATCH_DEV
Ran: generic/001 generic/002 generic/005 generic/006 generic/007 generic/010 generic/011 generic/013 generic/014 generic/020 generic/028 generic/035 generic/036 generic/070 generic/074 generic/075 generic/080 generic/086 generic/087 generic/088 generic/089 generic/091 generic/092 generic/112 generic/113 generic/114 generic/123 generic/125 generic/126 generic/127 generic/131 generic/133 generic/184 generic/192 generic/193 generic/198 generic/207 generic/208 generic/209 generic/210 generic/211 generic/212 generic/213 generic/214 generic/215 generic/221 generic/228 generic/236 generic/239 generic/240 generic/241 generic/245 generic/246 generic/247 generic/248 generic/249 generic/255 generic/257 generic/258 generic/263 generic/285 generic/286 generic/308 generic/309 generic/310 generic/313 generic/315 generic/316 generic/323 shared/298 xfs/003 xfs/008 xfs/012 xfs/020 xfs/048 xfs/074 xfs/078 xfs/080 xfs/084 xfs/164 xfs/165 xfs/206 xfs/222 xfs/229 xfs/242 xfs/250 xfs/252 xfs/259 xfs/279 xfs/290 xfs/292 xfs/293 xfs/303
Not run: generic/003 generic/004 generic/008 generic/009 generic/012 generic/015 generic/016 generic/017 generic/018 generic/019 generic/021 generic/022 generic/023 generic/024 generic/025 generic/026 generic/027 generic/029 generic/030 generic/031 generic/032 generic/033 generic/034 generic/037 generic/038 generic/039 generic/040 generic/041 generic/042 generic/043 generic/044 generic/045 generic/046 generic/047 generic/048 generic/049 generic/050 generic/051 generic/052 generic/053 generic/054 generic/055 generic/056 generic/057 generic/058 generic/059 generic/060 generic/061 generic/062 generic/063 generic/064 generic/065 generic/066 generic/067 generic/068 generic/069 generic/071 generic/072 generic/073 generic/076 generic/077 generic/078 generic/079 generic/081 generic/082 generic/083 generic/084 generic/085 generic/090 generic/093 generic/094 generic/095 generic/096 generic/097 generic/098 generic/099 generic/100 generic/101 generic/102 generic/103 generic/104 generic/105 generic/106 generic/107 generic/108 generic/109 generic/110 generic/111 generic/115 generic/116 generic/117 generic/118 generic/119 generic/120 generic/121 generic/122 generic/124 generic/128 generic/129 generic/130 generic/132 generic/134 generic/135 generic/136 generic/137 generic/138 generic/139 generic/140 generic/141 generic/142 generic/143 generic/144 generic/145 generic/146 generic/147 generic/148 generic/149 generic/150 generic/151 generic/152 generic/153 generic/154 generic/155 generic/156 generic/157 generic/158 generic/159 generic/160 generic/161 generic/162 generic/163 generic/164 generic/165 generic/166 generic/167 generic/168 generic/169 generic/170 generic/171 generic/172 generic/173 generic/174 generic/175 generic/176 generic/177 generic/178 generic/179 generic/180 generic/181 generic/182 generic/183 generic/185 generic/186 generic/187 generic/188 generic/189 generic/190 generic/191 generic/194 generic/195 generic/196 generic/197 generic/199 generic/200 generic/201 generic/202 generic/203 generic/204 generic/205 generic/206 generic/216 generic/217 generic/218 generic/219 generic/220 generic/222 generic/223 generic/224 generic/225 generic/226 generic/227 generic/229 generic/230 generic/231 generic/232 generic/233 generic/234 generic/235 generic/237 generic/238 generic/242 generic/243 generic/244 generic/250 generic/251 generic/252 generic/253 generic/254 generic/256 generic/259 generic/260 generic/261 generic/262 generic/264 generic/265 generic/266 generic/267 generic/268 generic/269 generic/270 generic/271 generic/272 generic/273 generic/274 generic/275 generic/276 generic/277 generic/278 generic/279 generic/280 generic/281 generic/282 generic/283 generic/284 generic/287 generic/288 generic/289 generic/290 generic/291 generic/292 generic/293 generic/294 generic/295 generic/296 generic/297 generic/298 generic/299 generic/300 generic/301 generic/302 generic/303 generic/304 generic/305 generic/306 generic/307 generic/311 generic/312 generic/314 generic/317 generic/318 generic/319 generic/320 generic/321 generic/322 generic/324 generic/325 generic/326 generic/327 generic/328 generic/329 generic/330 generic/331 generic/332 generic/333 generic/334 generic/335 generic/336 generic/337 shared/001 shared/002 shared/003 shared/006 shared/032 shared/051 shared/272 shared/289 xfs/001 xfs/002 xfs/004 xfs/005 xfs/006 xfs/007 xfs/009 xfs/010 xfs/011 xfs/013 xfs/014 xfs/015 xfs/016 xfs/017 xfs/018 xfs/019 xfs/021 xfs/022 xfs/023 xfs/024 xfs/025 xfs/026 xfs/027 xfs/028 xfs/029 xfs/030 xfs/031 xfs/032 xfs/033 xfs/034 xfs/035 xfs/036 xfs/037 xfs/038 xfs/039 xfs/040 xfs/041 xfs/042 xfs/043 xfs/044 xfs/045 xfs/046 xfs/047 xfs/049 xfs/050 xfs/051 xfs/052 xfs/053 xfs/054 xfs/055 xfs/056 xfs/057 xfs/058 xfs/059 xfs/060 xfs/061 xfs/062 xfs/063 xfs/064 xfs/065 xfs/066 xfs/067 xfs/068 xfs/069 xfs/070 xfs/071 xfs/072 xfs/073 xfs/075 xfs/076 xfs/077 xfs/079 xfs/081 xfs/082 xfs/083 xfs/085 xfs/086 xfs/087 xfs/088 xfs/089 xfs/090 xfs/091 xfs/092 xfs/093 xfs/094 xfs/095 xfs/096 xfs/097 xfs/098 xfs/099 xfs/100 xfs/101 xfs/102 xfs/103 xfs/104 xfs/105 xfs/106 xfs/107 xfs/108 xfs/109 xfs/110 xfs/111 xfs/112 xfs/113 xfs/114 xfs/115 xfs/116 xfs/117 xfs/118 xfs/119 xfs/120 xfs/121 xfs/122 xfs/123 xfs/124 xfs/125 xfs/126 xfs/127 xfs/128 xfs/129 xfs/130 xfs/131 xfs/132 xfs/133 xfs/134 xfs/135 xfs/136 xfs/137 xfs/138 xfs/139 xfs/140 xfs/141 xfs/142 xfs/143 xfs/144 xfs/145 xfs/146 xfs/147 xfs/148 xfs/149 xfs/150 xfs/151 xfs/152 xfs/153 xfs/154 xfs/155 xfs/156 xfs/157 xfs/158 xfs/159 xfs/160 xfs/161 xfs/162 xfs/163 xfs/166 xfs/167 xfs/168 xfs/169 xfs/170 xfs/171 xfs/172 xfs/173 xfs/174 xfs/175 xfs/176 xfs/177 xfs/178 xfs/179 xfs/180 xfs/181 xfs/182 xfs/183 xfs/184 xfs/185 xfs/186 xfs/187 xfs/188 xfs/189 xfs/190 xfs/191 xfs/192 xfs/193 xfs/194 xfs/195 xfs/196 xfs/197 xfs/198 xfs/199 xfs/200 xfs/201 xfs/202 xfs/203 xfs/204 xfs/205 xfs/207 xfs/208 xfs/209 xfs/210 xfs/211 xfs/212 xfs/213 xfs/214 xfs/215 xfs/216 xfs/217 xfs/218 xfs/219 xfs/220 xfs/221 xfs/223 xfs/224 xfs/225 xfs/226 xfs/227 xfs/228 xfs/230 xfs/231 xfs/232 xfs/233 xfs/234 xfs/235 xfs/236 xfs/237 xfs/238 xfs/239 xfs/240 xfs/241 xfs/243 xfs/244 xfs/245 xfs/246 xfs/247 xfs/248 xfs/249 xfs/251 xfs/253 xfs/254 xfs/255 xfs/256 xfs/257 xfs/258 xfs/260 xfs/261 xfs/262 xfs/266 xfs/267 xfs/268 xfs/278 xfs/281 xfs/282 xfs/283 xfs/287 xfs/291 xfs/295 xfs/296 xfs/297 xfs/298 xfs/299 xfs/300 xfs/301 xfs/302 xfs/304 xfs/305
Failures: generic/247 generic/263 xfs/020 xfs/074 xfs/250 xfs/292 xfs/293
Failed 7 of 93 tests


[-- Attachment #3: Type: text/plain, Size: 121 bytes --]

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2] [RFC] xfs: allocate log vector buffers outside CIL context lock
  2016-03-02 12:45             ` Gavin Guo
@ 2016-03-02 18:00               ` Darrick J. Wong
  0 siblings, 0 replies; 9+ messages in thread
From: Darrick J. Wong @ 2016-03-02 18:00 UTC (permalink / raw)
  To: Gavin Guo; +Cc: Jens Rosenboom, Brian Foster, xfs

On Wed, Mar 02, 2016 at 08:45:46PM +0800, Gavin Guo wrote:
> On Mon, Feb 15, 2016 at 9:28 PM, Dave Chinner <david@fromorbit.com> wrote:
> > On Mon, Feb 15, 2016 at 12:57:51PM +0100, Jens Rosenboom wrote:
> >> 2016-02-14 1:16 GMT+01:00 Dave Chinner <david@fromorbit.com>:
> >> > On Sat, Feb 13, 2016 at 06:09:17PM +0100, Jens Rosenboom wrote:
> >> >> 2016-01-26 15:17 GMT+01:00 Brian Foster <bfoster@redhat.com>:
> >> >> > On Wed, Jan 20, 2016 at 12:58:53PM +1100, Dave Chinner wrote:
> >> >> We have seen this issue on our production Ceph cluster sporadically
> >> >> and have tried a long time to reproduce it in a lab environment.
> >> > ....
> >> >> kmem_alloc (mode:0x2408240)
> >> >> Feb 13 10:51:57 storage-node35 kernel: [10562.614089] XFS:
> >> >> ceph-osd(10078) possible memory allocation deadlock size 32856 in
> >> >> kmem_alloc (mode:0x2408240)
> >> >
> >> > High order allocation of 32k. That implies a buffer size of at least
> >> > 32k is in use. Can you tell me what the output of xfs_info <mntpt>
> >> > is for one of your filesystems?
> >>
> >> $ xfs_info /tmp/cbt/mnt/osd-device-0-data/
> >> meta-data=/dev/sda2              isize=2048   agcount=4, agsize=97370688 blks
> >>          =                       sectsz=512   attr=2, projid32bit=1
> >>          =                       crc=0        finobt=0
> >> data     =                       bsize=4096   blocks=389482752, imaxpct=5
> >>          =                       sunit=0      swidth=0 blks
> >> naming   =version 2              bsize=65536  ascii-ci=0 ftype=0
> >> log      =internal               bsize=4096   blocks=190177, version=2
> >>          =                       sectsz=512   sunit=0 blks, lazy-count=1
> >> realtime =none                   extsz=4096   blocks=0, rtextents=0
> >
> > OK, so 64k directory block size.
> >
> >> > I suspect you are using a 64k directory block size, in which case
> >> > I'll ask "are you storing millions of files in a single directory"?
> >> > If your answer is no, then "don't do that" is an appropriate
> >> > solution because large directory block sizes are slower than the
> >> > default (4k) for almost all operations until you get up into the
> >> > millions of files per directory range.
> >>
> >> These options are kind of standard folklore for setting up Ceph
> >> clusters, I must admit that I delayed testing their performance
> >> implications up to now, so many knobs to turn, so little time.
> >>
> >>   mkfs_opts: '-f -i size=2048 -n size=64k'
> >>   mount_opts: '-o inode64,noatime,logbsize=256k'
> >
> > /me shakes his head sadly.
> >
> > Can you please go nuke where ever you read that from orbit?  Please?
> > It's the only way to be sure that the contagious cargo-cult
> > stupidity doesn't spread further.
> >
> >> It turns out that when running with '-n size=4k'
> >
> > i.e. the default.
> >
> >> , indeed I do not get
> >> any warnings during a 10h test run. I'll try to come up with some more
> >> detailed benchmarking of the possible performance impacts, too.
> >
> > No surprise there. :/
> >
> > FWIW, for small file Ceph workloads (e.g swift stores) we've found
> > that 8k directory block sizes give marginal improvements over the
> > default 4k, but it's all down hill from there.
> >
> >> Am I right in assuming that this parameter can not be tuned after the
> >> initial mkfs?
> >
> > That's right.
> >
> >> In that case getting a production-ready version of your
> >> patch would probably still be valuable for cluster admins wanting to
> >> avoid having to move all of their data to new filesystems.
> >
> > Well, yes, that's why I'm working on it. But it's critical core
> > code, it's also damn tricky and complex, and if I get it wrong it
> > will corrupt filesystems. So I'm not going to rush a prototype fix
> > out into production systems no matter how much pressure people put
> > on me to ship a fix.
> >
> >> >> Soon after this, operations get so slow that the OSDs die because of
> >> >> their suicide timeouts.
> >> >>
> >> >> Then I installed onto 3 servers this patch (applied onto kernel
> >> >> v4.4.1). The bad news is that I am still getting the kernel messages
> >> >> on these machines. The good news, though, is that they appear at a
> >> >> much lower frequency and also the impact on performance seems to be
> >> >> lower, so the OSD processes on these three nodes did not get killed.
> >> >
> >> > Right, the patch doesn't fix the underlying issue that memory
> >> > fragmentation can prevent high order allocation from succeeding for
> >> > long periods.  However, it does ensure that the filesystem does not
> >> > immediately deadlock memory reclaim when it happens so the system
> >> > has a chance to recover. It still can deadlock the filesystem,
> >> > because if we can't commit the transaction we can't unlock the
> >> > objects in the transaction and everything can get stuck behind that
> >> > if there's something sufficiently important in the blocked
> >> > transaction.
> >>
> >> So how would your success criteria for getting this patch into
> >> upstream look like?
> >
> > It's already "successful". I've proved locally that it avoids a memory
> > reclaim deadlock that many people have reported over the past year.
> > So there's no question that we need a fix to the problem; it's now
> > just a matter of determining if the issues with this fix (e.g.
> > doubling memory usage of the CIL) are an acceptible tradeoff for
> > production workloads, or whether I've got to go back and prototype a
> > fourth attempt at fixing the problem...
> >
> > And, of course, there's only some many hours int eh day. I'm into my
> > 19th right now, and I havent' got through everything on my list for
> > today yet. Tomorrow's list is even longer, and when I get through
> > that, I hit the big one: "read, understand and review 10000 lines of
> > complex new code"....
> >
> >> Would a benchmark of the 64k directory block size
> >> case on machines all running with patched kernels be interesting? Or
> >> would that scenario disqualify itself as being mistuned in the first
> >> place?
> >
> > Not really - I've confirmed it doesn't cause performance issues on
> > my usual tranche of benhmarks, so I'mnot conerned about that (it;s
> > the same amount of work being done, anyway).  Correctness is much
> > more important right now, and that takes time, effort and focus to
> > verify.
> >
> > And speaking of focus, it's now time for me to sleep.
> >
> > Cheers,
> >
> > Dave.
> > --
> > Dave Chinner
> > david@fromorbit.com
> >
> > _______________________________________________
> > xfs mailing list
> > xfs@oss.sgi.com
> > http://oss.sgi.com/mailman/listinfo/xfs
> 
> I've recently backported the patch to the v3.13 kernel to see if the bug
> can be fixed by the patch. Currently, since the bug only can be reproduced
> on the production system, I need to ensure the code work correctly before
> deploying the kernel. The following is the v3.13 backported kernel source:
> 
> http://kernel.ubuntu.com/git/gavinguo/ubuntu-trusty-amd64.git/log/?h=hf00084724v20160219b0hc57647a
> 
> I also did the xfstests verification and the log is attached. There are
> failed 7 of 93 tests. Investigation is still ongoing to determine if these
> errors are related to the file system core functionality failure due to the
> backporting incorrection.
> 
> I'll appreciate if you can give any suggestion to do the testing, give a
> glance to the backported patch or the xfstests error log to see if there is
> any thing wrong.

> ubuntu@xfs-test-vm:~/os/xfstests$ uname -a
> Linux xfs-test-vm 3.13.0-77-generic #121hf00084724v20160219b0hc57647a SMP Fri Feb 19 08:49:18 UTC 20 x86_64 x86_64 x86_64 GNU/Linux
> ubuntu@xfs-test-vm:~/os/xfstests$ TEST_DEV="/dev/vdb" TEST_DIR="/mnt/xfs_mnt/" ./check
> check: QA must be run as root
> ubuntu@xfs-test-vm:~/os/xfstests$ sudo !!
> sudo TEST_DEV="/dev/vdb" TEST_DIR="/mnt/xfs_mnt/" ./check
> sudo: unable to resolve host xfs-test-vm
> FSTYP         -- xfs (non-debug)
> PLATFORM      -- Linux/x86_64 xfs-test-vm 3.13.0-77-generic
> 
> generic/001      3s
> generic/002      0s
> generic/003      [not run] this test requires a valid $SCRATCH_DEV

Got a second hard drive?  Point SCRATCH_DEV to it (and SCRATCH_MNT to a
second empty directory) and you'll get way more testing coverage.

> generic/004      [not run] xfs_io flink support is missing

Heh, old xfsprogs/kernel. :)

(Some of those xfs_repair segfaults are probably fixed in newer xfsprogs...)

--D

> generic/005      0s
> generic/006      0s
> generic/007      1s
> generic/008      [not run] xfs_io fzero support is missing
> generic/009      [not run] xfs_io fzero support is missing
> generic/010      0s
> generic/011      1s
> generic/012      [not run] xfs_io fcollapse support is missing
> generic/013      24s
> generic/014      9s
> generic/015      [not run] this test requires a valid $SCRATCH_DEV
> generic/016      [not run] xfs_io fcollapse support is missing
> generic/017      [not run] this test requires a valid $SCRATCH_DEV
> generic/018      [not run] this test requires a valid $SCRATCH_DEV
> generic/019      [not run] this test requires a valid $SCRATCH_DEV
> generic/020      3s
> generic/021      [not run] xfs_io fcollapse support is missing
> generic/022      [not run] xfs_io fcollapse support is missing
> generic/023      [not run] kernel doesn't support renameat2 syscall
> generic/024      [not run] kernel doesn't support renameat2 syscall
> generic/025      [not run] kernel doesn't support renameat2 syscall
> generic/026      [not run] this test requires a valid $SCRATCH_DEV
> generic/027      [not run] this test requires a valid $SCRATCH_DEV
> generic/028      5s
> generic/029      [not run] this test requires a valid $SCRATCH_DEV
> generic/030      [not run] this test requires a valid $SCRATCH_DEV
> generic/031      [not run] this test requires a valid $SCRATCH_DEV
> generic/032      [not run] this test requires a valid $SCRATCH_DEV
> generic/033      [not run] this test requires a valid $SCRATCH_DEV
> generic/034      [not run] this test requires a valid $SCRATCH_DEV
> generic/035      0s
> generic/036      10s
> generic/037      [not run] this test requires a valid $SCRATCH_DEV
> generic/038      [not run] this test requires a valid $SCRATCH_DEV
> generic/039      [not run] this test requires a valid $SCRATCH_DEV
> generic/040      [not run] this test requires a valid $SCRATCH_DEV
> generic/041      [not run] this test requires a valid $SCRATCH_DEV
> generic/042      [not run] this test requires a valid $SCRATCH_DEV
> generic/043      [not run] this test requires a valid $SCRATCH_DEV
> generic/044      [not run] this test requires a valid $SCRATCH_DEV
> generic/045      [not run] this test requires a valid $SCRATCH_DEV
> generic/046      [not run] this test requires a valid $SCRATCH_DEV
> generic/047      [not run] this test requires a valid $SCRATCH_DEV
> generic/048      [not run] this test requires a valid $SCRATCH_DEV
> generic/049      [not run] this test requires a valid $SCRATCH_DEV
> generic/050      [not run] this test requires a valid $SCRATCH_DEV
> generic/051      [not run] this test requires a valid $SCRATCH_DEV
> generic/052      [not run] this test requires a valid $SCRATCH_DEV
> generic/053      [not run] this test requires a valid $SCRATCH_DEV
> generic/054      [not run] this test requires a valid $SCRATCH_DEV
> generic/055      [not run] this test requires a valid $SCRATCH_DEV
> generic/056      [not run] this test requires a valid $SCRATCH_DEV
> generic/057      [not run] this test requires a valid $SCRATCH_DEV
> generic/058      [not run] xfs_io finsert support is missing
> generic/059      [not run] this test requires a valid $SCRATCH_DEV
> generic/060      [not run] xfs_io finsert support is missing
> generic/061      [not run] xfs_io finsert support is missing
> generic/062      [not run] this test requires a valid $SCRATCH_DEV
> generic/063      [not run] xfs_io finsert support is missing
> generic/064      [not run] this test requires a valid $SCRATCH_DEV
> generic/065      [not run] this test requires a valid $SCRATCH_DEV
> generic/066      [not run] this test requires a valid $SCRATCH_DEV
> generic/067      [not run] this test requires a valid $SCRATCH_DEV
> generic/068      [not run] this test requires a valid $SCRATCH_DEV
> generic/069      [not run] this test requires a valid $SCRATCH_DEV
> generic/070      6s
> generic/071      [not run] this test requires a valid $SCRATCH_DEV
> generic/072      [not run] xfs_io fcollapse support is missing
> generic/073      [not run] this test requires a valid $SCRATCH_DEV
> generic/074      104s
> generic/075      29s
> generic/076      [not run] this test requires a valid $SCRATCH_DEV
> generic/077      [not run] this test requires a valid $SCRATCH_DEV
> generic/078      [not run] kernel doesn't support renameat2 syscall
> generic/079      [not run] this test requires a valid $SCRATCH_DEV
> generic/080      3s
> generic/081      [not run] this test requires a valid $SCRATCH_DEV
> generic/082      [not run] this test requires a valid $SCRATCH_DEV
> generic/083      [not run] this test requires a valid $SCRATCH_DEV
> generic/084      [not run] this test requires a valid $SCRATCH_DEV
> generic/085      [not run] this test requires a valid $SCRATCH_DEV
> generic/086      1s
> generic/087      1s
> generic/088      1s
> generic/089      5s
> generic/090      [not run] this test requires a valid $SCRATCH_DEV
> generic/091      70s
> generic/092      0s
> generic/093      [not run] not suitable for this OS: Linux
> generic/094      [not run] this test requires a valid $SCRATCH_DEV
> generic/095      [not run] this test requires a valid $SCRATCH_DEV
> generic/096      [not run] this test requires a valid $SCRATCH_DEV
> generic/097      [not run] not suitable for this OS: Linux
> generic/098      [not run] this test requires a valid $SCRATCH_DEV
> generic/099      [not run] not suitable for this OS: Linux
> generic/100      [not run] this test requires a valid $SCRATCH_DEV
> generic/101      [not run] this test requires a valid $SCRATCH_DEV
> generic/102      [not run] this test requires a valid $SCRATCH_DEV
> generic/103      [not run] this test requires a valid $SCRATCH_DEV
> generic/104      [not run] this test requires a valid $SCRATCH_DEV
> generic/105      [not run] this test requires a valid $SCRATCH_DEV
> generic/106      [not run] this test requires a valid $SCRATCH_DEV
> generic/107      [not run] this test requires a valid $SCRATCH_DEV
> generic/108      [not run] this test requires a valid $SCRATCH_DEV
> generic/109      [not run] this test requires a valid $SCRATCH_DEV
> generic/110      [not run] xfs_io reflink support is missing
> generic/111      [not run] xfs_io reflink support is missing
> generic/112      35s
> generic/113      39s
> generic/114      53s
> generic/115      [not run] xfs_io reflink support is missing
> generic/116      [not run] xfs_io reflink support is missing
> generic/117      [not run] this test requires a valid $SCRATCH_DEV
> generic/118      [not run] xfs_io reflink support is missing
> generic/119      [not run] xfs_io reflink support is missing
> generic/120      [not run] this test requires a valid $SCRATCH_DEV
> generic/121      [not run] xfs_io dedupe support is missing
> generic/122      [not run] xfs_io dedupe support is missing
> generic/123      1s
> generic/124      [not run] this test requires a valid $SCRATCH_DEV
> generic/125      62s
> generic/126      0s
> generic/127      715s
> generic/128      [not run] this test requires a valid $SCRATCH_DEV
> generic/129      [not run] this test requires a valid $SCRATCH_DEV
> generic/130      [not run] this test requires a valid $SCRATCH_DEV
> generic/131      1s
> generic/132      [not run] this test requires a valid $SCRATCH_DEV
> generic/133      268s
> generic/134      [not run] xfs_io reflink support is missing
> generic/135      [not run] this test requires a valid $SCRATCH_DEV
> generic/136      [not run] xfs_io dedupe support is missing
> generic/137      [not run] xfs_io reflink support is missing
> generic/138      [not run] xfs_io reflink support is missing
> generic/139      [not run] xfs_io reflink support is missing
> generic/140      [not run] xfs_io reflink support is missing
> generic/141      [not run] this test requires a valid $SCRATCH_DEV
> generic/142      [not run] xfs_io reflink support is missing
> generic/143      [not run] xfs_io reflink support is missing
> generic/144      [not run] xfs_io reflink support is missing
> generic/145      [not run] xfs_io reflink support is missing
> generic/146      [not run] xfs_io reflink support is missing
> generic/147      [not run] xfs_io reflink support is missing
> generic/148      [not run] xfs_io reflink support is missing
> generic/149      [not run] xfs_io reflink support is missing
> generic/150      [not run] xfs_io reflink support is missing
> generic/151      [not run] xfs_io reflink support is missing
> generic/152      [not run] xfs_io reflink support is missing
> generic/153      [not run] xfs_io reflink support is missing
> generic/154      [not run] xfs_io reflink support is missing
> generic/155      [not run] xfs_io reflink support is missing
> generic/156      [not run] xfs_io reflink support is missing
> generic/157      [not run] xfs_io reflink support is missing
> generic/158      [not run] xfs_io dedupe support is missing
> generic/159      [not run] xfs_io reflink support is missing
> generic/160      [not run] xfs_io dedupe support is missing
> generic/161      [not run] this test requires a valid $SCRATCH_DEV
> generic/162      [not run] this test requires a valid $SCRATCH_DEV
> generic/163      [not run] this test requires a valid $SCRATCH_DEV
> generic/164      [not run] this test requires a valid $SCRATCH_DEV
> generic/165      [not run] this test requires a valid $SCRATCH_DEV
> generic/166      [not run] this test requires a valid $SCRATCH_DEV
> generic/167      [not run] this test requires a valid $SCRATCH_DEV
> generic/168      [not run] this test requires a valid $SCRATCH_DEV
> generic/169      [not run] this test requires a valid $SCRATCH_DEV
> generic/170      [not run] this test requires a valid $SCRATCH_DEV
> generic/171      [not run] this test requires a valid $SCRATCH_DEV
> generic/172      [not run] this test requires a valid $SCRATCH_DEV
> generic/173      [not run] this test requires a valid $SCRATCH_DEV
> generic/174      [not run] this test requires a valid $SCRATCH_DEV
> generic/175      [not run] this test requires a valid $SCRATCH_DEV
> generic/176      [not run] this test requires a valid $SCRATCH_DEV
> generic/177      [not run] this test requires a valid $SCRATCH_DEV
> generic/178      [not run] xfs_io reflink support is missing
> generic/179      [not run] xfs_io reflink support is missing
> generic/180      [not run] xfs_io reflink support is missing
> generic/181      [not run] xfs_io reflink support is missing
> generic/182      [not run] xfs_io dedupe support is missing
> generic/183      [not run] this test requires a valid $SCRATCH_DEV
> generic/184      0s
> generic/185      [not run] this test requires a valid $SCRATCH_DEV
> generic/186      [not run] this test requires a valid $SCRATCH_DEV
> generic/187      [not run] this test requires a valid $SCRATCH_DEV
> generic/188      [not run] this test requires a valid $SCRATCH_DEV
> generic/189      [not run] this test requires a valid $SCRATCH_DEV
> generic/190      [not run] this test requires a valid $SCRATCH_DEV
> generic/191      [not run] this test requires a valid $SCRATCH_DEV
> generic/192      42s
> generic/193      0s
> generic/194      [not run] this test requires a valid $SCRATCH_DEV
> generic/195      [not run] this test requires a valid $SCRATCH_DEV
> generic/196      [not run] this test requires a valid $SCRATCH_DEV
> generic/197      [not run] this test requires a valid $SCRATCH_DEV
> generic/198      1s
> generic/199      [not run] this test requires a valid $SCRATCH_DEV
> generic/200      [not run] this test requires a valid $SCRATCH_DEV
> generic/201      [not run] this test requires a valid $SCRATCH_DEV
> generic/202      [not run] this test requires a valid $SCRATCH_DEV
> generic/203      [not run] this test requires a valid $SCRATCH_DEV
> generic/204      [not run] this test requires a valid $SCRATCH_DEV
> generic/205      [not run] this test requires a valid $SCRATCH_DEV
> generic/206      [not run] this test requires a valid $SCRATCH_DEV
> generic/207      13s
> generic/208      201s
> umount: /mnt/xfs_mnt: device is busy.
>         (In some cases useful info about processes that use
>          the device is found by lsof(8) or fuser(1))
> _check_xfs_filesystem: filesystem on /dev/vdb has dirty log (see /home/ubuntu/os/xfstests/results//generic/208.full)
> _check_xfs_filesystem: filesystem on /dev/vdb is inconsistent (c) (see /home/ubuntu/os/xfstests/results//generic/208.full)
> _check_xfs_filesystem: filesystem on /dev/vdb is inconsistent (r) (see /home/ubuntu/os/xfstests/results//generic/208.full)
> generic/209      37s
> generic/210      0s
> generic/211      0s
> generic/212      0s
> generic/213      1s
> generic/214      0s
> generic/215      2s
> generic/216      [not run] this test requires a valid $SCRATCH_DEV
> generic/217      [not run] this test requires a valid $SCRATCH_DEV
> generic/218      [not run] this test requires a valid $SCRATCH_DEV
> generic/219      [not run] this test requires a valid $SCRATCH_DEV
> generic/220      [not run] this test requires a valid $SCRATCH_DEV
> generic/221      1s
> generic/222      [not run] this test requires a valid $SCRATCH_DEV
> generic/223      [not run] this test requires a valid $SCRATCH_DEV
> generic/224      [not run] this test requires a valid $SCRATCH_DEV
> generic/225      [not run] this test requires a valid $SCRATCH_DEV
> generic/226      [not run] this test requires a valid $SCRATCH_DEV
> generic/227      [not run] this test requires a valid $SCRATCH_DEV
> generic/228      0s
> generic/229      [not run] this test requires a valid $SCRATCH_DEV
> generic/230      [not run] this test requires a valid $SCRATCH_DEV
> generic/231      [not run] this test requires a valid $SCRATCH_DEV
> generic/232      [not run] this test requires a valid $SCRATCH_DEV
> generic/233      [not run] this test requires a valid $SCRATCH_DEV
> generic/234      [not run] this test requires a valid $SCRATCH_DEV
> generic/235      [not run] this test requires a valid $SCRATCH_DEV
> generic/236      2s
> generic/237      [not run] chacl command not found
> generic/238      [not run] this test requires a valid $SCRATCH_DEV
> generic/239      3s
> generic/240      0s
> generic/241      72s
> generic/242      [not run] this test requires a valid $SCRATCH_DEV
> generic/243      [not run] this test requires a valid $SCRATCH_DEV
> generic/244      [not run] this test requires a valid $SCRATCH_DEV
> generic/245      0s
> generic/246      1s
> generic/247      28s
> _check_dmesg: something found in dmesg (see /home/ubuntu/os/xfstests/results//generic/247.dmesg)
> generic/248      0s
> generic/249      1s
> generic/250      [not run] this test requires a valid $SCRATCH_DEV
> generic/251      [not run] this test requires a valid $SCRATCH_DEV
> generic/252      [not run] this test requires a valid $SCRATCH_DEV
> generic/253      [not run] this test requires a valid $SCRATCH_DEV
> generic/254      [not run] this test requires a valid $SCRATCH_DEV
> generic/255      1s
> generic/256      [not run] this test requires a valid $SCRATCH_DEV
> generic/257      0s
> generic/258      0s
> generic/259      [not run] this test requires a valid $SCRATCH_DEV
> generic/260      [not run] this test requires a valid $SCRATCH_DEV
> generic/261      [not run] this test requires a valid $SCRATCH_DEV
> generic/262      [not run] this test requires a valid $SCRATCH_DEV
> generic/263      [failed, exit status 1] - output mismatch (see /home/ubuntu/os/xfstests/results//generic/263.out.bad)
>     --- tests/generic/263.out   2016-03-02 07:03:04.063808319 +0000
>     +++ /home/ubuntu/os/xfstests/results//generic/263.out.bad   2016-03-02 07:53:20.511808319 +0000
>     @@ -1,3 +1,8887 @@
>      QA output created by 263
>      fsx -N 10000 -o 8192 -l 500000 -r PSIZE -t BSIZE -w BSIZE -Z
>      fsx -N 10000 -o 128000 -l 500000 -r PSIZE -t BSIZE -w BSIZE -Z
>     +main: filesystem does not support fallocate mode FALLOC_FL_ZERO_RANGE, disabling!
>     +main: filesystem does not support fallocate mode FALLOC_FL_COLLAPSE_RANGE, disabling!
>     +main: filesystem does not support fallocate mode FALLOC_FL_INSERT_RANGE, disabling!
>     +truncating to largest ever: 0x11e00
>     ...
>     (Run 'diff -u tests/generic/263.out /home/ubuntu/os/xfstests/results//generic/263.out.bad'  to see the entire diff)
> generic/264      [not run] this test requires a valid $SCRATCH_DEV
> generic/265      [not run] this test requires a valid $SCRATCH_DEV
> generic/266      [not run] this test requires a valid $SCRATCH_DEV
> generic/267      [not run] this test requires a valid $SCRATCH_DEV
> generic/268      [not run] this test requires a valid $SCRATCH_DEV
> generic/269      [not run] this test requires a valid $SCRATCH_DEV
> generic/270      [not run] this test requires a valid $SCRATCH_DEV
> generic/271      [not run] this test requires a valid $SCRATCH_DEV
> generic/272      [not run] this test requires a valid $SCRATCH_DEV
> generic/273      [not run] this test requires a valid $SCRATCH_DEV
> generic/274      [not run] this test requires a valid $SCRATCH_DEV
> generic/275      [not run] this test requires a valid $SCRATCH_DEV
> generic/276      [not run] this test requires a valid $SCRATCH_DEV
> generic/277      [not run] this test requires a valid $SCRATCH_DEV
> generic/278      [not run] this test requires a valid $SCRATCH_DEV
> generic/279      [not run] this test requires a valid $SCRATCH_DEV
> generic/280      [not run] this test requires a valid $SCRATCH_DEV
> generic/281      [not run] this test requires a valid $SCRATCH_DEV
> generic/282      [not run] this test requires a valid $SCRATCH_DEV
> generic/283      [not run] this test requires a valid $SCRATCH_DEV
> generic/284      [not run] this test requires a valid $SCRATCH_DEV
> generic/285      0s
> generic/286      5s
> generic/287      [not run] this test requires a valid $SCRATCH_DEV
> generic/288      [not run] this test requires a valid $SCRATCH_DEV
> generic/289      [not run] this test requires a valid $SCRATCH_DEV
> generic/290      [not run] this test requires a valid $SCRATCH_DEV
> generic/291      [not run] this test requires a valid $SCRATCH_DEV
> generic/292      [not run] this test requires a valid $SCRATCH_DEV
> generic/293      [not run] this test requires a valid $SCRATCH_DEV
> generic/294      [not run] this test requires a valid $SCRATCH_DEV
> generic/295      [not run] this test requires a valid $SCRATCH_DEV
> generic/296      [not run] this test requires a valid $SCRATCH_DEV
> generic/297      [not run] this test requires a valid $SCRATCH_DEV
> generic/298      [not run] this test requires a valid $SCRATCH_DEV
> generic/299      [not run] this test requires a valid $SCRATCH_DEV
> generic/300      [not run] this test requires a valid $SCRATCH_DEV
> generic/301      [not run] this test requires a valid $SCRATCH_DEV
> generic/302      [not run] this test requires a valid $SCRATCH_DEV
> generic/303      [not run] xfs_io reflink support is missing
> generic/304      [not run] xfs_io dedupe support is missing
> generic/305      [not run] this test requires a valid $SCRATCH_DEV
> generic/306      [not run] this test requires a valid $SCRATCH_DEV
> generic/307      [not run] this test requires a valid $SCRATCH_DEV
> generic/308      0s
> generic/309      1s
> generic/310      65s
> generic/311      [not run] this test requires a valid $SCRATCH_DEV
> generic/312      [not run] this test requires a valid $SCRATCH_DEV
> generic/313      4s
> generic/314      [not run] chacl command not found
> generic/315      0s
> generic/316      1s
> generic/317      [not run] this test requires a valid $SCRATCH_DEV
> generic/318      [not run] this test requires a valid $SCRATCH_DEV
> generic/319      [not run] chacl command not found
> generic/320      [not run] this test requires a valid $SCRATCH_DEV
> generic/321      [not run] this test requires a valid $SCRATCH_DEV
> generic/322      [not run] this test requires a valid $SCRATCH_DEV
> generic/323      121s
> generic/324      [not run] this test requires a valid $SCRATCH_DEV
> generic/325      [not run] this test requires a valid $SCRATCH_DEV
> generic/326      [not run] this test requires a valid $SCRATCH_DEV
> generic/327      [not run] this test requires a valid $SCRATCH_DEV
> generic/328      [not run] this test requires a valid $SCRATCH_DEV
> generic/329      [not run] this test requires a valid $SCRATCH_DEV
> generic/330      [not run] this test requires a valid $SCRATCH_DEV
> generic/331      [not run] this test requires a valid $SCRATCH_DEV
> generic/332      [not run] this test requires a valid $SCRATCH_DEV
> generic/333      [not run] this test requires a valid $SCRATCH_DEV
> generic/334      [not run] this test requires a valid $SCRATCH_DEV
> generic/335      [not run] this test requires a valid $SCRATCH_DEV
> generic/336      [not run] this test requires a valid $SCRATCH_DEV
> generic/337      [not run] this test requires a valid $SCRATCH_DEV
> shared/001       [not run] not suitable for this filesystem type: xfs
> shared/002       [not run] this test requires a valid $SCRATCH_DEV
> shared/003       [not run] not suitable for this filesystem type: xfs
> shared/006       [not run] this test requires a valid $SCRATCH_DEV
> shared/032       [not run] this test requires a valid $SCRATCH_DEV
> shared/051       [not run] chacl command not found
> shared/272       [not run] not suitable for this filesystem type: xfs
> shared/289       [not run] not suitable for this filesystem type: xfs
> shared/298       45s
> xfs/001  [not run] this test requires a valid $SCRATCH_DEV
> xfs/002  [not run] this test requires a valid $SCRATCH_DEV
> xfs/003  0s
> xfs/004  [not run] this test requires a valid $SCRATCH_DEV
> xfs/005  [not run] this test requires a valid $SCRATCH_DEV
> xfs/006  [not run] this test requires a valid $SCRATCH_DEV
> xfs/007  [not run] this test requires a valid $SCRATCH_DEV
> xfs/008  2s
> xfs/009  [not run] this test requires a valid $SCRATCH_DEV
> xfs/010  [not run] this test requires a valid $SCRATCH_DEV
> xfs/011  [not run] this test requires a valid $SCRATCH_DEV
> xfs/012  2s
> xfs/013  [not run] this test requires a valid $SCRATCH_DEV
> xfs/014  [not run] this test requires a valid $SCRATCH_DEV
> xfs/015  [not run] this test requires a valid $SCRATCH_DEV
> xfs/016  [not run] this test requires a valid $SCRATCH_DEV
> xfs/017  [not run] this test requires a valid $SCRATCH_DEV
> xfs/018  [not run] this test requires a valid $SCRATCH_DEV
> xfs/019  [not run] this test requires a valid $SCRATCH_DEV
> xfs/020  [failed, exit status 139] - output mismatch (see /home/ubuntu/os/xfstests/results//xfs/020.out.bad)
>     --- tests/xfs/020.out       2016-03-02 07:03:04.083808319 +0000
>     +++ /home/ubuntu/os/xfstests/results//xfs/020.out.bad       2016-03-02 07:58:56.063808319 +0000
>     @@ -1,2 +1,3 @@
>      QA output created by 020
>      Silence is golden
>     +./tests/xfs/020: line 58: 28658 Segmentation fault      $XFS_REPAIR_PROG -f -o ag_stride=32 -t 1 $fsfile > /dev/null 2>&1
>     ...
>     (Run 'diff -u tests/xfs/020.out /home/ubuntu/os/xfstests/results//xfs/020.out.bad'  to see the entire diff)
> xfs/021  [not run] this test requires a valid $SCRATCH_DEV
> xfs/022  [not run] xfsdump not found
> xfs/023  [not run] xfsdump not found
> xfs/024  [not run] xfsdump not found
> xfs/025  [not run] xfsdump not found
> xfs/026  [not run] xfsdump not found
> xfs/027  [not run] xfsdump not found
> xfs/028  [not run] xfsdump not found
> xfs/029  [not run] this test requires a valid $SCRATCH_DEV
> xfs/030  [not run] this test requires a valid $SCRATCH_DEV
> xfs/031  [not run] this test requires a valid $SCRATCH_DEV
> xfs/032  [not run] this test requires a valid $SCRATCH_DEV
> xfs/033  [not run] this test requires a valid $SCRATCH_DEV
> xfs/034  [not run] this test requires a valid $SCRATCH_DEV
> xfs/035  [not run] xfsdump not found
> xfs/036  [not run] xfsdump not found
> xfs/037  [not run] xfsdump not found
> xfs/038  [not run] xfsdump not found
> xfs/039  [not run] xfsdump not found
> xfs/040  [not run] Can't run srcdiff without KWORKAREA set
> xfs/041  [not run] this test requires a valid $SCRATCH_DEV
> xfs/042  [not run] this test requires a valid $SCRATCH_DEV
> xfs/043  [not run] xfsdump not found
> xfs/044  [not run] This test requires a valid $SCRATCH_LOGDEV
> xfs/045  [not run] this test requires a valid $SCRATCH_DEV
> xfs/046  [not run] xfsdump not found
> xfs/047  [not run] xfsdump not found
> xfs/048  0s
> xfs/049  [not run] this test requires a valid $SCRATCH_DEV
> xfs/050  [not run] this test requires a valid $SCRATCH_DEV
> xfs/051  [not run] this test requires a valid $SCRATCH_DEV
> xfs/052  [not run] this test requires a valid $SCRATCH_DEV
> xfs/053  [not run] this test requires a valid $SCRATCH_DEV
> xfs/054  [not run] this test requires a valid $SCRATCH_DEV
> xfs/055  [not run] xfsdump not found
> xfs/056  [not run] xfsdump not found
> xfs/057  [not run] Place holder for IRIX test 057
> xfs/058  [not run] Place holder for IRIX test 058
> xfs/059  [not run] xfsdump not found
> xfs/060  [not run] xfsdump not found
> xfs/061  [not run] xfsdump not found
> xfs/062  [not run] this test requires a valid $SCRATCH_DEV
> xfs/063  [not run] xfsdump not found
> xfs/064  [not run] xfsdump not found
> xfs/065  [not run] xfsdump not found
> xfs/066  [not run] xfsdump not found
> xfs/067  [not run] chacl command not found
> xfs/068  [not run] xfsdump not found
> xfs/069  [not run] this test requires a valid $SCRATCH_DEV
> xfs/070  [not run] this test requires a valid $SCRATCH_DEV
> xfs/071  [not run] this test requires a valid $SCRATCH_DEV
> xfs/072  [not run] this test requires a valid $SCRATCH_DEV
> xfs/073  [not run] this test requires a valid $SCRATCH_DEV
> xfs/074  [failed, exit status 1] - output mismatch (see /home/ubuntu/os/xfstests/results//xfs/074.out.bad)
>     --- tests/xfs/074.out       2016-03-02 07:03:04.095808319 +0000
>     +++ /home/ubuntu/os/xfstests/results//xfs/074.out.bad       2016-03-02 07:59:19.943808319 +0000
>     @@ -1,2 +1,4 @@
>      QA output created by 074
>     -Silence is golden
>     +fallocate: No space left on device
>     +_check_xfs_filesystem: filesystem on /dev/loop0 is inconsistent (c) (see /home/ubuntu/os/xfstests/results//xfs/074.full)
>     +_check_xfs_filesystem: filesystem on /dev/loop0 is inconsistent (r) (see /home/ubuntu/os/xfstests/results//xfs/074.full)
>     ...
>     (Run 'diff -u tests/xfs/074.out /home/ubuntu/os/xfstests/results//xfs/074.out.bad'  to see the entire diff)
> xfs/075  [not run] this test requires a valid $SCRATCH_DEV
> xfs/076  [not run] this test requires a valid $SCRATCH_DEV
> xfs/077  [not run] this test requires a valid $SCRATCH_DEV
> xfs/078  48s
> xfs/079  [not run] this test requires a valid $SCRATCH_DEV
> xfs/080  5s
> xfs/081  [not run] this test requires a valid $SCRATCH_DEV
> xfs/082  [not run] this test requires a valid $SCRATCH_DEV
> xfs/083  [not run] this test requires a valid $SCRATCH_DEV
> xfs/084  60s
> xfs/085  [not run] this test requires a valid $SCRATCH_DEV
> xfs/086  [not run] this test requires a valid $SCRATCH_DEV
> xfs/087  [not run] this test requires a valid $SCRATCH_DEV
> xfs/088  [not run] this test requires a valid $SCRATCH_DEV
> xfs/089  [not run] this test requires a valid $SCRATCH_DEV
> xfs/090  [not run] External volumes not in use, skipped this test
> xfs/091  [not run] this test requires a valid $SCRATCH_DEV
> xfs/092  [not run] this test requires a valid $SCRATCH_DEV
> xfs/093  [not run] this test requires a valid $SCRATCH_DEV
> xfs/094  [not run] External volumes not in use, skipped this test
> xfs/095  [not run] not suitable for this OS: Linux
> xfs/096  [not run] this test requires a valid $SCRATCH_DEV
> xfs/097  [not run] this test requires a valid $SCRATCH_DEV
> xfs/098  [not run] this test requires a valid $SCRATCH_DEV
> xfs/099  [not run] this test requires a valid $SCRATCH_DEV
> xfs/100  [not run] this test requires a valid $SCRATCH_DEV
> xfs/101  [not run] this test requires a valid $SCRATCH_DEV
> xfs/102  [not run] this test requires a valid $SCRATCH_DEV
> xfs/103  [not run] this test requires a valid $SCRATCH_DEV
> xfs/104  [not run] this test requires a valid $SCRATCH_DEV
> xfs/105  [not run] this test requires a valid $SCRATCH_DEV
> xfs/106  [not run] this test requires a valid $SCRATCH_DEV
> xfs/107  [not run] this test requires a valid $SCRATCH_DEV
> xfs/108  [not run] this test requires a valid $SCRATCH_DEV
> xfs/109  [not run] this test requires a valid $SCRATCH_DEV
> xfs/110  [not run] this test requires a valid $SCRATCH_DEV
> xfs/111  [not run] this test requires a valid $SCRATCH_DEV
> xfs/112  [not run] this test requires a valid $SCRATCH_DEV
> xfs/113  [not run] this test requires a valid $SCRATCH_DEV
> xfs/114  [not run] not suitable for this OS: Linux
> xfs/115  [not run] not suitable for this OS: Linux
> xfs/116  [not run] this test requires a valid $SCRATCH_DEV
> xfs/117  [not run] this test requires a valid $SCRATCH_DEV
> xfs/118  [not run] this test requires a valid $SCRATCH_DEV
> xfs/119  [not run] this test requires a valid $SCRATCH_DEV
> xfs/120  [not run] this test requires a valid $SCRATCH_DEV
> xfs/121  [not run] this test requires a valid $SCRATCH_DEV
> xfs/122  [not run] indent utility required, skipped this test
> xfs/123  [not run] this test requires a valid $SCRATCH_DEV
> xfs/124  [not run] this test requires a valid $SCRATCH_DEV
> xfs/125  [not run] this test requires a valid $SCRATCH_DEV
> xfs/126  [not run] this test requires a valid $SCRATCH_DEV
> xfs/127  [not run] this test requires a valid $SCRATCH_DEV
> xfs/128  [not run] this test requires a valid $SCRATCH_DEV
> xfs/129  [not run] this test requires a valid $SCRATCH_DEV
> xfs/130  [not run] this test requires a valid $SCRATCH_DEV
> xfs/131  [not run] External volumes not in use, skipped this test
> xfs/132  [not run] xfs_io reflink support is missing
> xfs/133  [not run] this test requires a valid $SCRATCH_DEV
> xfs/134  [not run] this test requires a valid $SCRATCH_DEV
> xfs/135  [not run] this test requires a valid $SCRATCH_DEV
> xfs/136  [not run] this test requires a valid $SCRATCH_DEV
> xfs/137  [not run] this test requires a valid $SCRATCH_DEV
> xfs/138  [not run] this test requires a valid $SCRATCH_DEV
> xfs/139  [not run] this test requires a valid $SCRATCH_DEV
> xfs/140  [not run] this test requires a valid $SCRATCH_DEV
> xfs/141  [not run] no kernel support for XFS sysfs attributes
> xfs/142  [not run] this test requires a valid $SCRATCH_DEV
> xfs/143  [not run] this test requires a valid $SCRATCH_DEV
> xfs/144  [not run] this test requires a valid $SCRATCH_DEV
> xfs/145  [not run] this test requires a valid $SCRATCH_DEV
> xfs/146  [not run] this test requires a valid $SCRATCH_DEV
> xfs/147  [not run] this test requires a valid $SCRATCH_DEV
> xfs/148  [not run] parallel repair binary xfs_prepair64 is not installed
> xfs/149  [not run] parallel repair binary xfs_prepair is not installed
> xfs/150  [not run] this test requires a valid $SCRATCH_DEV
> xfs/151  [not run] this test requires a valid $SCRATCH_DEV
> xfs/152  [not run] this test requires a valid $SCRATCH_DEV
> xfs/153  [not run] this test requires a valid $SCRATCH_DEV
> xfs/154  [not run] this test requires a valid $SCRATCH_DEV
> xfs/155  [not run] this test requires a valid $SCRATCH_DEV
> xfs/156  [not run] this test requires a valid $SCRATCH_DEV
> xfs/157  [not run] this test requires a valid $SCRATCH_DEV
> xfs/158  [not run] this test requires a valid $SCRATCH_DEV
> xfs/159  [not run] this test requires a valid $SCRATCH_DEV
> xfs/160  [not run] this test requires a valid $SCRATCH_DEV
> xfs/161  [not run] this test requires a valid $SCRATCH_DEV
> xfs/162  [not run] this test requires a valid $SCRATCH_DEV
> xfs/163  [not run] this test requires a valid $SCRATCH_DEV
> xfs/164  0s
> xfs/165  0s
> xfs/166  [not run] this test requires a valid $SCRATCH_DEV
> xfs/167  [not run] this test requires a valid $SCRATCH_DEV
> xfs/168  [not run] this test requires a valid $SCRATCH_DEV
> xfs/169  [not run] this test requires a valid $SCRATCH_DEV
> xfs/170  [not run] this test requires a valid $SCRATCH_DEV
> xfs/171  [not run] this test requires a valid $SCRATCH_DEV
> xfs/172  [not run] this test requires a valid $SCRATCH_DEV
> xfs/173  [not run] this test requires a valid $SCRATCH_DEV
> xfs/174  [not run] this test requires a valid $SCRATCH_DEV
> xfs/175  [not run] this test requires a valid $SCRATCH_DEV
> xfs/176  [not run] this test requires a valid $SCRATCH_DEV
> xfs/177  [not run] this test requires a valid $SCRATCH_DEV
> xfs/178  [not run] this test requires a valid $SCRATCH_DEV
> xfs/179  [not run] this test requires a valid $SCRATCH_DEV
> xfs/180  [not run] this test requires a valid $SCRATCH_DEV
> xfs/181  [not run] this test requires a valid $SCRATCH_DEV
> xfs/182  [not run] this test requires a valid $SCRATCH_DEV
> xfs/183  [not run] this test requires a valid $SCRATCH_DEV
> xfs/184  [not run] this test requires a valid $SCRATCH_DEV
> xfs/185  [not run] this test requires a valid $SCRATCH_DEV
> xfs/186  [not run] this test requires a valid $SCRATCH_DEV
> xfs/187  [not run] this test requires a valid $SCRATCH_DEV
> xfs/188  [not run] this test requires a valid $SCRATCH_DEV
> xfs/189  [not run] this test requires a valid $SCRATCH_DEV
> xfs/190  [not run] this test requires a valid $SCRATCH_DEV
> xfs/191  [not run] this test requires a valid $SCRATCH_DEV
> xfs/192  [not run] this test requires a valid $SCRATCH_DEV
> xfs/193  [not run] this test requires a valid $SCRATCH_DEV
> xfs/194  [not run] sector size(4096) too large for platform page size(4096)
> xfs/195  [not run] xfsdump utility required, skipped this test
> xfs/196  [not run] this test requires a valid $SCRATCH_DEV
> xfs/197  [not run] This test is only valid on 32 bit machines
> xfs/198  [not run] this test requires a valid $SCRATCH_DEV
> xfs/199  [not run] this test requires a valid $SCRATCH_DEV
> xfs/200  [not run] this test requires a valid $SCRATCH_DEV
> xfs/201  [not run] this test requires a valid $SCRATCH_DEV
> xfs/202  [not run] this test requires a valid $SCRATCH_DEV
> xfs/203  [not run] this test requires a valid $SCRATCH_DEV
> xfs/204  [not run] this test requires a valid $SCRATCH_DEV
> xfs/205  [not run] this test requires a valid $SCRATCH_DEV
> xfs/206  4s
> xfs/207  [not run] this test requires a valid $SCRATCH_DEV
> xfs/208  [not run] this test requires a valid $SCRATCH_DEV
> xfs/209  [not run] this test requires a valid $SCRATCH_DEV
> xfs/210  [not run] this test requires a valid $SCRATCH_DEV
> xfs/211  [not run] this test requires a valid $SCRATCH_DEV
> xfs/212  [not run] this test requires a valid $SCRATCH_DEV
> xfs/213  [not run] this test requires a valid $SCRATCH_DEV
> xfs/214  [not run] this test requires a valid $SCRATCH_DEV
> xfs/215  [not run] this test requires a valid $SCRATCH_DEV
> xfs/216  [not run] this test requires a valid $SCRATCH_DEV
> xfs/217  [not run] this test requires a valid $SCRATCH_DEV
> xfs/218  [not run] this test requires a valid $SCRATCH_DEV
> xfs/219  [not run] this test requires a valid $SCRATCH_DEV
> xfs/220  [not run] this test requires a valid $SCRATCH_DEV
> xfs/221  [not run] this test requires a valid $SCRATCH_DEV
> xfs/222  0s
> xfs/223  [not run] this test requires a valid $SCRATCH_DEV
> xfs/224  [not run] this test requires a valid $SCRATCH_DEV
> xfs/225  [not run] this test requires a valid $SCRATCH_DEV
> xfs/226  [not run] this test requires a valid $SCRATCH_DEV
> xfs/227  [not run] this test requires a valid $SCRATCH_DEV
> xfs/228  [not run] this test requires a valid $SCRATCH_DEV
> xfs/229  75s
> xfs/230  [not run] this test requires a valid $SCRATCH_DEV
> xfs/231  [not run] this test requires a valid $SCRATCH_DEV
> xfs/232  [not run] this test requires a valid $SCRATCH_DEV
> xfs/233  [not run] this test requires a valid $SCRATCH_DEV
> xfs/234  [not run] this test requires a valid $SCRATCH_DEV
> xfs/235  [not run] this test requires a valid $SCRATCH_DEV
> xfs/236  [not run] this test requires a valid $SCRATCH_DEV
> xfs/237  [not run] this test requires a valid $SCRATCH_DEV
> xfs/238  [not run] this test requires a valid $SCRATCH_DEV
> xfs/239  [not run] this test requires a valid $SCRATCH_DEV
> xfs/240  [not run] this test requires a valid $SCRATCH_DEV
> xfs/241  [not run] this test requires a valid $SCRATCH_DEV
> xfs/242  1s
> xfs/243  [not run] this test requires a valid $SCRATCH_DEV
> xfs/244  [not run] this test requires a valid $SCRATCH_DEV
> xfs/245  [not run] this test requires a valid $SCRATCH_DEV
> xfs/246  [not run] xfs_io bmap doesn't support -c
> xfs/247  [not run] this test requires a valid $SCRATCH_DEV
> xfs/248  [not run] this test requires a valid $SCRATCH_DEV
> xfs/249  [not run] this test requires a valid $SCRATCH_DEV
> xfs/250  [failed, exit status 1] - output mismatch (see /home/ubuntu/os/xfstests/results//xfs/250.out.bad)
>     --- tests/xfs/250.out       2016-03-02 07:03:04.119808319 +0000
>     +++ /home/ubuntu/os/xfstests/results//xfs/250.out.bad       2016-03-02 08:03:49.847808319 +0000
>     @@ -11,4 +11,4 @@
>      *** preallocate large file
>      *** unmount loop filesystem
>      *** check loop filesystem
>     -*** done
>     +_check_xfs_filesystem: filesystem on /mnt/xfs_mnt/250.fs is inconsistent (r) (see /home/ubuntu/os/xfstests/results//xfs/250.full)
>     ...
>     (Run 'diff -u tests/xfs/250.out /home/ubuntu/os/xfstests/results//xfs/250.out.bad'  to see the entire diff)
> xfs/251  [not run] this test requires a valid $SCRATCH_DEV
> xfs/252  2s
> xfs/253  [not run] this test requires a valid $SCRATCH_DEV
> xfs/254  [not run] this test requires a valid $SCRATCH_DEV
> xfs/255  [not run] this test requires a valid $SCRATCH_DEV
> xfs/256  [not run] this test requires a valid $SCRATCH_DEV
> xfs/257  [not run] this test requires a valid $SCRATCH_DEV
> xfs/258  [not run] this test requires a valid $SCRATCH_DEV
> xfs/259  2s
> xfs/260  [not run] this test requires a valid $SCRATCH_DEV
> xfs/261  [not run] this test requires a valid $SCRATCH_DEV
> xfs/262  [not run] this test requires a valid $SCRATCH_DEV
> xfs/266  [not run] xfsdump not found
> xfs/267  [not run] xfsdump not found
> xfs/268  [not run] xfsdump not found
> xfs/278  [not run] this test requires a valid $SCRATCH_DEV
> xfs/279  7s
> xfs/281  [not run] xfsdump not found
> xfs/282  [not run] xfsdump not found
> xfs/283  [not run] xfsdump not found
> xfs/287  [not run] xfsdump not found
> xfs/290  1s
> xfs/291  [not run] this test requires a valid $SCRATCH_DEV
> xfs/292  - output mismatch (see /home/ubuntu/os/xfstests/results//xfs/292.out.bad)
>     --- tests/xfs/292.out       2016-03-02 07:03:04.123808319 +0000
>     +++ /home/ubuntu/os/xfstests/results//xfs/292.out.bad       2016-03-02 08:04:19.487808319 +0000
>     @@ -5,5 +5,5 @@
>      agsize=16777216
>      mkfs.xfs with cmdline geometry
>      ddev=FILENAME
>     -agcount=16
>     -agsize=4194304
>     +agcount=4
>     +agsize=16777216
>     ...
>     (Run 'diff -u tests/xfs/292.out /home/ubuntu/os/xfstests/results//xfs/292.out.bad'  to see the entire diff)
> xfs/293  - output mismatch (see /home/ubuntu/os/xfstests/results//xfs/293.out.bad)
>     --- tests/xfs/293.out       2016-03-02 07:03:04.123808319 +0000
>     +++ /home/ubuntu/os/xfstests/results//xfs/293.out.bad       2016-03-02 08:04:22.499808319 +0000
>     @@ -1,2 +1,8 @@
>      QA output created by 293
>      Silence is golden
>     +chproj not documented in the xfs_io manpage
>     +fiemap not documented in the xfs_io manpage
>     +fpunch not documented in the xfs_io manpage
>     +lsproj not documented in the xfs_io manpage
>     +setfl not documented in the xfs_io manpage
>     ...
>     (Run 'diff -u tests/xfs/293.out /home/ubuntu/os/xfstests/results//xfs/293.out.bad'  to see the entire diff)
> xfs/295  [not run] this test requires a valid $SCRATCH_DEV
> xfs/296  [not run] xfsdump not found
> xfs/297  [not run] this test requires a valid $SCRATCH_DEV
> xfs/298  [not run] this test requires a valid $SCRATCH_DEV
> xfs/299  [not run] this test requires a valid $SCRATCH_DEV
> xfs/300  [not run] this test requires a valid $SCRATCH_DEV
> xfs/301  [not run] xfsdump not found
> xfs/302  [not run] xfsdump not found
> xfs/303  1s
> xfs/304  [not run] this test requires a valid $SCRATCH_DEV
> xfs/305  [not run] this test requires a valid $SCRATCH_DEV
> Ran: generic/001 generic/002 generic/005 generic/006 generic/007 generic/010 generic/011 generic/013 generic/014 generic/020 generic/028 generic/035 generic/036 generic/070 generic/074 generic/075 generic/080 generic/086 generic/087 generic/088 generic/089 generic/091 generic/092 generic/112 generic/113 generic/114 generic/123 generic/125 generic/126 generic/127 generic/131 generic/133 generic/184 generic/192 generic/193 generic/198 generic/207 generic/208 generic/209 generic/210 generic/211 generic/212 generic/213 generic/214 generic/215 generic/221 generic/228 generic/236 generic/239 generic/240 generic/241 generic/245 generic/246 generic/247 generic/248 generic/249 generic/255 generic/257 generic/258 generic/263 generic/285 generic/286 generic/308 generic/309 generic/310 generic/313 generic/315 generic/316 generic/323 shared/298 xfs/003 xfs/008 xfs/012 xfs/020 xfs/048 xfs/074 xfs/078 xfs/080 xfs/084 xfs/164 xfs/165 xfs/206 xfs/222 xfs/229 xfs/242 xfs/250 xfs/252 xfs/259 xfs/279 
 xfs/290 xfs/292 xfs/293 xfs/303
> Not run: generic/003 generic/004 generic/008 generic/009 generic/012 generic/015 generic/016 generic/017 generic/018 generic/019 generic/021 generic/022 generic/023 generic/024 generic/025 generic/026 generic/027 generic/029 generic/030 generic/031 generic/032 generic/033 generic/034 generic/037 generic/038 generic/039 generic/040 generic/041 generic/042 generic/043 generic/044 generic/045 generic/046 generic/047 generic/048 generic/049 generic/050 generic/051 generic/052 generic/053 generic/054 generic/055 generic/056 generic/057 generic/058 generic/059 generic/060 generic/061 generic/062 generic/063 generic/064 generic/065 generic/066 generic/067 generic/068 generic/069 generic/071 generic/072 generic/073 generic/076 generic/077 generic/078 generic/079 generic/081 generic/082 generic/083 generic/084 generic/085 generic/090 generic/093 generic/094 generic/095 generic/096 generic/097 generic/098 generic/099 generic/100 generic/101 generic/102 generic/103 generic/104 generic/105 gen
 eric/106 generic/107 generic/108 generic/109 generic/110 generic/111 generic/115 generic/116 generic/117 generic/118 generic/119 generic/120 generic/121 generic/122 generic/124 generic/128 generic/129 generic/130 generic/132 generic/134 generic/135 generic/136 generic/137 generic/138 generic/139 generic/140 generic/141 generic/142 generic/143 generic/144 generic/145 generic/146 generic/147 generic/148 generic/149 generic/150 generic/151 generic/152 generic/153 generic/154 generic/155 generic/156 generic/157 generic/158 generic/159 generic/160 generic/161 generic/162 generic/163 generic/164 generic/165 generic/166 generic/167 generic/168 generic/169 generic/170 generic/171 generic/172 generic/173 generic/174 generic/175 generic/176 generic/177 generic/178 generic/179 generic/180 generic/181 generic/182 generic/183 generic/185 generic/186 generic/187 generic/188 generic/189 generic/190 generic/191 generic/194 generic/195 generic/196 generic/197 generic/199 generic/200 generic/201 gene
 ric/202 generic/203 generic/204 generic/205 generic/206 generic/216 generic/217 generic/218 generic/219 generic/220 generic/222 generic/223 generic/224 generic/225 generic/226 generic/227 generic/229 generic/230 generic/231 generic/232 generic/233 generic/234 generic/235 generic/237 generic/238 generic/242 generic/243 generic/244 generic/250 generic/251 generic/252 generic/253 generic/254 generic/256 generic/259 generic/260 generic/261 generic/262 generic/264 generic/265 generic/266 generic/267 generic/268 generic/269 generic/270 generic/271 generic/272 generic/273 generic/274 generic/275 generic/276 generic/277 generic/278 generic/279 generic/280 generic/281 generic/282 generic/283 generic/284 generic/287 generic/288 generic/289 generic/290 generic/291 generic/292 generic/293 generic/294 generic/295 generic/296 generic/297 generic/298 generic/299 generic/300 generic/301 generic/302 generic/303 generic/304 generic/305 generic/306 generic/307 generic/311 generic/312 generic/314 gener
 ic/317 generic/318 generic/319 generic/320 generic/321 generic/322 generic/324 generic/325 generic/326 generic/327 generic/328 generic/329 generic/330 generic/331 generic/332 generic/333 generic/334 generic/335 generic/336 generic/337 shared/001 shared/002 shared/003 shared/006 shared/032 shared/051 shared/272 shared/289 xfs/001 xfs/002 xfs/004 xfs/005 xfs/006 xfs/007 xfs/009 xfs/010 xfs/011 xfs/013 xfs/014 xfs/015 xfs/016 xfs/017 xfs/018 xfs/019 xfs/021 xfs/022 xfs/023 xfs/024 xfs/025 xfs/026 xfs/027 xfs/028 xfs/029 xfs/030 xfs/031 xfs/032 xfs/033 xfs/034 xfs/035 xfs/036 xfs/037 xfs/038 xfs/039 xfs/040 xfs/041 xfs/042 xfs/043 xfs/044 xfs/045 xfs/046 xfs/047 xfs/049 xfs/050 xfs/051 xfs/052 xfs/053 xfs/054 xfs/055 xfs/056 xfs/057 xfs/058 xfs/059 xfs/060 xfs/061 xfs/062 xfs/063 xfs/064 xfs/065 xfs/066 xfs/067 xfs/068 xfs/069 xfs/070 xfs/071 xfs/072 xfs/073 xfs/075 xfs/076 xfs/077 xfs/079 xfs/081 xfs/082 xfs/083 xfs/085 xfs/086 xfs/087 xfs/088 xfs/089 xfs/090 xfs/091 xfs/092 xfs/093 xf
 s/094 xfs/095 xfs/096 xfs/097 xfs/098 xfs/099 xfs/100 xfs/101 xfs/102 xfs/103 xfs/104 xfs/105 xfs/106 xfs/107 xfs/108 xfs/109 xfs/110 xfs/111 xfs/112 xfs/113 xfs/114 xfs/115 xfs/116 xfs/117 xfs/118 xfs/119 xfs/120 xfs/121 xfs/122 xfs/123 xfs/124 xfs/125 xfs/126 xfs/127 xfs/128 xfs/129 xfs/130 xfs/131 xfs/132 xfs/133 xfs/134 xfs/135 xfs/136 xfs/137 xfs/138 xfs/139 xfs/140 xfs/141 xfs/142 xfs/143 xfs/144 xfs/145 xfs/146 xfs/147 xfs/148 xfs/149 xfs/150 xfs/151 xfs/152 xfs/153 xfs/154 xfs/155 xfs/156 xfs/157 xfs/158 xfs/159 xfs/160 xfs/161 xfs/162 xfs/163 xfs/166 xfs/167 xfs/168 xfs/169 xfs/170 xfs/171 xfs/172 xfs/173 xfs/174 xfs/175 xfs/176 xfs/177 xfs/178 xfs/179 xfs/180 xfs/181 xfs/182 xfs/183 xfs/184 xfs/185 xfs/186 xfs/187 xfs/188 xfs/189 xfs/190 xfs/191 xfs/192 xfs/193 xfs/194 xfs/195 xfs/196 xfs/197 xfs/198 xfs/199 xfs/200 xfs/201 xfs/202 xfs/203 xfs/204 xfs/205 xfs/207 xfs/208 xfs/209 xfs/210 xfs/211 xfs/212 xfs/213 xfs/214 xfs/215 xfs/216 xfs/217 xfs/218 xfs/219 xfs/220 xfs/221
  xfs/223 xfs/224 xfs/225 xfs/226 xfs/227 xfs/228 xfs/230 xfs/231 xfs/232 xfs/233 xfs/234 xfs/235 xfs/236 xfs/237 xfs/238 xfs/239 xfs/240 xfs/241 xfs/243 xfs/244 xfs/245 xfs/246 xfs/247 xfs/248 xfs/249 xfs/251 xfs/253 xfs/254 xfs/255 xfs/256 xfs/257 xfs/258 xfs/260 xfs/261 xfs/262 xfs/266 xfs/267 xfs/268 xfs/278 xfs/281 xfs/282 xfs/283 xfs/287 xfs/291 xfs/295 xfs/296 xfs/297 xfs/298 xfs/299 xfs/300 xfs/301 xfs/302 xfs/304 xfs/305
> Failures: generic/247 generic/263 xfs/020 xfs/074 xfs/250 xfs/292 xfs/293
> Failed 7 of 93 tests
> 

> _______________________________________________
> xfs mailing list
> xfs@oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-03-02 18:01 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-19  4:31 [PATCH] [RFC] xfs: allocate log vector buffers outside CIL context lock Dave Chinner
2016-01-20  1:58 ` [PATCH v2] " Dave Chinner
2016-01-26 14:17   ` Brian Foster
2016-02-13 17:09     ` Jens Rosenboom
2016-02-14  0:16       ` Dave Chinner
2016-02-15 11:57         ` Jens Rosenboom
2016-02-15 13:28           ` Dave Chinner
2016-03-02 12:45             ` Gavin Guo
2016-03-02 18:00               ` Darrick J. Wong

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.