|
@@ -45,7 +45,7 @@
|
|
|
#define XFSA_FIXUP_BNO_OK 1
|
|
|
#define XFSA_FIXUP_CNT_OK 2
|
|
|
|
|
|
-STATIC int
|
|
|
+STATIC void
|
|
|
xfs_alloc_search_busy(xfs_trans_t *tp,
|
|
|
xfs_agnumber_t agno,
|
|
|
xfs_agblock_t bno,
|
|
@@ -64,15 +64,15 @@ ktrace_t *xfs_alloc_trace_buf;
|
|
|
xfs_alloc_trace_busy(__func__, s, mp, ag, agb, l, sl, tp, XFS_ALLOC_KTRACE_BUSY, __LINE__)
|
|
|
#define TRACE_UNBUSY(__func__,s,ag,sl,tp) \
|
|
|
xfs_alloc_trace_busy(__func__, s, mp, ag, -1, -1, sl, tp, XFS_ALLOC_KTRACE_UNBUSY, __LINE__)
|
|
|
-#define TRACE_BUSYSEARCH(__func__,s,ag,agb,l,sl,tp) \
|
|
|
- xfs_alloc_trace_busy(__func__, s, mp, ag, agb, l, sl, tp, XFS_ALLOC_KTRACE_BUSYSEARCH, __LINE__)
|
|
|
+#define TRACE_BUSYSEARCH(__func__,s,ag,agb,l,tp) \
|
|
|
+ xfs_alloc_trace_busy(__func__, s, mp, ag, agb, l, 0, tp, XFS_ALLOC_KTRACE_BUSYSEARCH, __LINE__)
|
|
|
#else
|
|
|
#define TRACE_ALLOC(s,a)
|
|
|
#define TRACE_FREE(s,a,b,x,f)
|
|
|
#define TRACE_MODAGF(s,a,f)
|
|
|
#define TRACE_BUSY(s,a,ag,agb,l,sl,tp)
|
|
|
#define TRACE_UNBUSY(fname,s,ag,sl,tp)
|
|
|
-#define TRACE_BUSYSEARCH(fname,s,ag,agb,l,sl,tp)
|
|
|
+#define TRACE_BUSYSEARCH(fname,s,ag,agb,l,tp)
|
|
|
#endif /* XFS_ALLOC_TRACE */
|
|
|
|
|
|
/*
|
|
@@ -2562,9 +2562,10 @@ xfs_alloc_clear_busy(xfs_trans_t *tp,
|
|
|
|
|
|
|
|
|
/*
|
|
|
- * returns non-zero if any of (agno,bno):len is in a busy list
|
|
|
+ * If we find the extent in the busy list, force the log out to get the
|
|
|
+ * extent out of the busy list so the caller can use it straight away.
|
|
|
*/
|
|
|
-STATIC int
|
|
|
+STATIC void
|
|
|
xfs_alloc_search_busy(xfs_trans_t *tp,
|
|
|
xfs_agnumber_t agno,
|
|
|
xfs_agblock_t bno,
|
|
@@ -2572,7 +2573,6 @@ xfs_alloc_search_busy(xfs_trans_t *tp,
|
|
|
{
|
|
|
xfs_mount_t *mp;
|
|
|
xfs_perag_busy_t *bsy;
|
|
|
- int n;
|
|
|
xfs_agblock_t uend, bend;
|
|
|
xfs_lsn_t lsn;
|
|
|
int cnt;
|
|
@@ -2585,21 +2585,18 @@ xfs_alloc_search_busy(xfs_trans_t *tp,
|
|
|
uend = bno + len - 1;
|
|
|
|
|
|
/* search pagb_list for this slot, skipping open slots */
|
|
|
- for (bsy = mp->m_perag[agno].pagb_list, n = 0;
|
|
|
- cnt; bsy++, n++) {
|
|
|
+ for (bsy = mp->m_perag[agno].pagb_list; cnt; bsy++) {
|
|
|
|
|
|
/*
|
|
|
* (start1,length1) within (start2, length2)
|
|
|
*/
|
|
|
if (bsy->busy_tp != NULL) {
|
|
|
bend = bsy->busy_start + bsy->busy_length - 1;
|
|
|
- if ((bno > bend) ||
|
|
|
- (uend < bsy->busy_start)) {
|
|
|
+ if ((bno > bend) || (uend < bsy->busy_start)) {
|
|
|
cnt--;
|
|
|
} else {
|
|
|
TRACE_BUSYSEARCH("xfs_alloc_search_busy",
|
|
|
- "found1", agno, bno, len, n,
|
|
|
- tp);
|
|
|
+ "found1", agno, bno, len, tp);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -2610,15 +2607,12 @@ xfs_alloc_search_busy(xfs_trans_t *tp,
|
|
|
* transaction that freed the block
|
|
|
*/
|
|
|
if (cnt) {
|
|
|
- TRACE_BUSYSEARCH("xfs_alloc_search_busy", "found", agno, bno, len, n, tp);
|
|
|
+ TRACE_BUSYSEARCH("xfs_alloc_search_busy", "found", agno, bno, len, tp);
|
|
|
lsn = bsy->busy_tp->t_commit_lsn;
|
|
|
spin_unlock(&mp->m_perag[agno].pagb_lock);
|
|
|
xfs_log_force(mp, lsn, XFS_LOG_FORCE|XFS_LOG_SYNC);
|
|
|
} else {
|
|
|
- TRACE_BUSYSEARCH("xfs_alloc_search_busy", "not-found", agno, bno, len, n, tp);
|
|
|
- n = -1;
|
|
|
+ TRACE_BUSYSEARCH("xfs_alloc_search_busy", "not-found", agno, bno, len, tp);
|
|
|
spin_unlock(&mp->m_perag[agno].pagb_lock);
|
|
|
}
|
|
|
-
|
|
|
- return n;
|
|
|
}
|