| To: | xfs-dev <xfs-dev@xxxxxxx>, xfs-oss <xfs@xxxxxxxxxxx> |
|---|---|
| Subject: | [PATCH] Always reset btree cursor after an insert |
| From: | Lachlan McIlroy <lachlan@xxxxxxx> |
| Date: | Mon, 16 Jun 2008 12:21:33 +1000 |
| Reply-to: | lachlan@xxxxxxx |
| Sender: | xfs-bounce@xxxxxxxxxxx |
| User-agent: | Thunderbird 2.0.0.14 (X11/20080421) |
After a btree insert operation a cursor can be invalid due to block
splits and a maybe a new root block. We reset the cursor in
xfs_bmbt_insert() in the cases where we think we need to but it
isn't enough as we still see assertions. Just do what we do elsewhere
and reset the cursor unconditionally.
Lachlan
--- fs/xfs/xfs_bmap.c_1.392 2008-06-03 12:20:14.000000000 +1000
+++ fs/xfs/xfs_bmap.c 2008-06-16 12:11:47.000000000 +1000
@@ -1745,11 +1745,17 @@ xfs_bmap_add_extent_unwritten_real(
if ((error = xfs_bmbt_insert(cur, &i)))
goto done;
ASSERT(i == 1);
- if ((error = xfs_bmbt_increment(cur, 0, &i)))
+ /*
+ * Reset the cursor, don't trust it after any insert
+ * operation.
+ */
+ if ((error = xfs_bmbt_lookup_eq(cur, new->br_startoff,
+ new->br_startblock, new->br_blockcount,
+ &i)))
goto done;
- ASSERT(i == 1);
+ ASSERT(i == 0);
/* new middle extent - newext */
- cur->bc_rec.b = *new;
+ cur->bc_rec.b.br_state = new->br_state;
if ((error = xfs_bmbt_insert(cur, &i)))
goto done;
ASSERT(i == 1);
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| ||
| Previous by Date: | TAKE 983102 - XFS case-insensitive: Assertion Failed: xfs_dir2_sf_lookup(args) == ENOENT, Barry Naujok |
|---|---|
| Next by Date: | Re: [PATCH] fix extent corruption in xfs_iext_irec_compact_full(), Lachlan McIlroy |
| Previous by Thread: | TAKE 983102 - XFS case-insensitive: Assertion Failed: xfs_dir2_sf_lookup(args) == ENOENT, Barry Naujok |
| Next by Thread: | Re: [PATCH] Always reset btree cursor after an insert, Dave Chinner |
| Indexes: | [Date] [Thread] [Top] [All Lists] |