diff options
Diffstat (limited to 'fs/xfs/libxfs/xfs_alloc.c')
-rw-r--r-- | fs/xfs/libxfs/xfs_alloc.c | 104 |
1 files changed, 55 insertions, 49 deletions
diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c index a6fbf4472017..516162be1398 100644 --- a/fs/xfs/libxfs/xfs_alloc.c +++ b/fs/xfs/libxfs/xfs_alloc.c | |||
@@ -260,6 +260,7 @@ xfs_alloc_fix_len( | |||
260 | rlen = rlen - (k - args->mod); | 260 | rlen = rlen - (k - args->mod); |
261 | else | 261 | else |
262 | rlen = rlen - args->prod + (args->mod - k); | 262 | rlen = rlen - args->prod + (args->mod - k); |
263 | /* casts to (int) catch length underflows */ | ||
263 | if ((int)rlen < (int)args->minlen) | 264 | if ((int)rlen < (int)args->minlen) |
264 | return; | 265 | return; |
265 | ASSERT(rlen >= args->minlen && rlen <= args->maxlen); | 266 | ASSERT(rlen >= args->minlen && rlen <= args->maxlen); |
@@ -286,7 +287,8 @@ xfs_alloc_fix_minleft( | |||
286 | if (diff >= 0) | 287 | if (diff >= 0) |
287 | return 1; | 288 | return 1; |
288 | args->len += diff; /* shrink the allocated space */ | 289 | args->len += diff; /* shrink the allocated space */ |
289 | if (args->len >= args->minlen) | 290 | /* casts to (int) catch length underflows */ |
291 | if ((int)args->len >= (int)args->minlen) | ||
290 | return 1; | 292 | return 1; |
291 | args->agbno = NULLAGBLOCK; | 293 | args->agbno = NULLAGBLOCK; |
292 | return 0; | 294 | return 0; |
@@ -315,6 +317,9 @@ xfs_alloc_fixup_trees( | |||
315 | xfs_agblock_t nfbno2; /* second new free startblock */ | 317 | xfs_agblock_t nfbno2; /* second new free startblock */ |
316 | xfs_extlen_t nflen1=0; /* first new free length */ | 318 | xfs_extlen_t nflen1=0; /* first new free length */ |
317 | xfs_extlen_t nflen2=0; /* second new free length */ | 319 | xfs_extlen_t nflen2=0; /* second new free length */ |
320 | struct xfs_mount *mp; | ||
321 | |||
322 | mp = cnt_cur->bc_mp; | ||
318 | 323 | ||
319 | /* | 324 | /* |
320 | * Look up the record in the by-size tree if necessary. | 325 | * Look up the record in the by-size tree if necessary. |
@@ -323,13 +328,13 @@ xfs_alloc_fixup_trees( | |||
323 | #ifdef DEBUG | 328 | #ifdef DEBUG |
324 | if ((error = xfs_alloc_get_rec(cnt_cur, &nfbno1, &nflen1, &i))) | 329 | if ((error = xfs_alloc_get_rec(cnt_cur, &nfbno1, &nflen1, &i))) |
325 | return error; | 330 | return error; |
326 | XFS_WANT_CORRUPTED_RETURN( | 331 | XFS_WANT_CORRUPTED_RETURN(mp, |
327 | i == 1 && nfbno1 == fbno && nflen1 == flen); | 332 | i == 1 && nfbno1 == fbno && nflen1 == flen); |
328 | #endif | 333 | #endif |
329 | } else { | 334 | } else { |
330 | if ((error = xfs_alloc_lookup_eq(cnt_cur, fbno, flen, &i))) | 335 | if ((error = xfs_alloc_lookup_eq(cnt_cur, fbno, flen, &i))) |
331 | return error; | 336 | return error; |
332 | XFS_WANT_CORRUPTED_RETURN(i == 1); | 337 | XFS_WANT_CORRUPTED_RETURN(mp, i == 1); |
333 | } | 338 | } |
334 | /* | 339 | /* |
335 | * Look up the record in the by-block tree if necessary. | 340 | * Look up the record in the by-block tree if necessary. |
@@ -338,13 +343,13 @@ xfs_alloc_fixup_trees( | |||
338 | #ifdef DEBUG | 343 | #ifdef DEBUG |
339 | if ((error = xfs_alloc_get_rec(bno_cur, &nfbno1, &nflen1, &i))) | 344 | if ((error = xfs_alloc_get_rec(bno_cur, &nfbno1, &nflen1, &i))) |
340 | return error; | 345 | return error; |
341 | XFS_WANT_CORRUPTED_RETURN( | 346 | XFS_WANT_CORRUPTED_RETURN(mp, |
342 | i == 1 && nfbno1 == fbno && nflen1 == flen); | 347 | i == 1 && nfbno1 == fbno && nflen1 == flen); |
343 | #endif | 348 | #endif |
344 | } else { | 349 | } else { |
345 | if ((error = xfs_alloc_lookup_eq(bno_cur, fbno, flen, &i))) | 350 | if ((error = xfs_alloc_lookup_eq(bno_cur, fbno, flen, &i))) |
346 | return error; | 351 | return error; |
347 | XFS_WANT_CORRUPTED_RETURN(i == 1); | 352 | XFS_WANT_CORRUPTED_RETURN(mp, i == 1); |
348 | } | 353 | } |
349 | 354 | ||
350 | #ifdef DEBUG | 355 | #ifdef DEBUG |
@@ -355,7 +360,7 @@ xfs_alloc_fixup_trees( | |||
355 | bnoblock = XFS_BUF_TO_BLOCK(bno_cur->bc_bufs[0]); | 360 | bnoblock = XFS_BUF_TO_BLOCK(bno_cur->bc_bufs[0]); |
356 | cntblock = XFS_BUF_TO_BLOCK(cnt_cur->bc_bufs[0]); | 361 | cntblock = XFS_BUF_TO_BLOCK(cnt_cur->bc_bufs[0]); |
357 | 362 | ||
358 | XFS_WANT_CORRUPTED_RETURN( | 363 | XFS_WANT_CORRUPTED_RETURN(mp, |
359 | bnoblock->bb_numrecs == cntblock->bb_numrecs); | 364 | bnoblock->bb_numrecs == cntblock->bb_numrecs); |
360 | } | 365 | } |
361 | #endif | 366 | #endif |
@@ -386,25 +391,25 @@ xfs_alloc_fixup_trees( | |||
386 | */ | 391 | */ |
387 | if ((error = xfs_btree_delete(cnt_cur, &i))) | 392 | if ((error = xfs_btree_delete(cnt_cur, &i))) |
388 | return error; | 393 | return error; |
389 | XFS_WANT_CORRUPTED_RETURN(i == 1); | 394 | XFS_WANT_CORRUPTED_RETURN(mp, i == 1); |
390 | /* | 395 | /* |
391 | * Add new by-size btree entry(s). | 396 | * Add new by-size btree entry(s). |
392 | */ | 397 | */ |
393 | if (nfbno1 != NULLAGBLOCK) { | 398 | if (nfbno1 != NULLAGBLOCK) { |
394 | if ((error = xfs_alloc_lookup_eq(cnt_cur, nfbno1, nflen1, &i))) | 399 | if ((error = xfs_alloc_lookup_eq(cnt_cur, nfbno1, nflen1, &i))) |
395 | return error; | 400 | return error; |
396 | XFS_WANT_CORRUPTED_RETURN(i == 0); | 401 | XFS_WANT_CORRUPTED_RETURN(mp, i == 0); |
397 | if ((error = xfs_btree_insert(cnt_cur, &i))) | 402 | if ((error = xfs_btree_insert(cnt_cur, &i))) |
398 | return error; | 403 | return error; |
399 | XFS_WANT_CORRUPTED_RETURN(i == 1); | 404 | XFS_WANT_CORRUPTED_RETURN(mp, i == 1); |
400 | } | 405 | } |
401 | if (nfbno2 != NULLAGBLOCK) { | 406 | if (nfbno2 != NULLAGBLOCK) { |
402 | if ((error = xfs_alloc_lookup_eq(cnt_cur, nfbno2, nflen2, &i))) | 407 | if ((error = xfs_alloc_lookup_eq(cnt_cur, nfbno2, nflen2, &i))) |
403 | return error; | 408 | return error; |
404 | XFS_WANT_CORRUPTED_RETURN(i == 0); | 409 | XFS_WANT_CORRUPTED_RETURN(mp, i == 0); |
405 | if ((error = xfs_btree_insert(cnt_cur, &i))) | 410 | if ((error = xfs_btree_insert(cnt_cur, &i))) |
406 | return error; | 411 | return error; |
407 | XFS_WANT_CORRUPTED_RETURN(i == 1); | 412 | XFS_WANT_CORRUPTED_RETURN(mp, i == 1); |
408 | } | 413 | } |
409 | /* | 414 | /* |
410 | * Fix up the by-block btree entry(s). | 415 | * Fix up the by-block btree entry(s). |
@@ -415,7 +420,7 @@ xfs_alloc_fixup_trees( | |||
415 | */ | 420 | */ |
416 | if ((error = xfs_btree_delete(bno_cur, &i))) | 421 | if ((error = xfs_btree_delete(bno_cur, &i))) |
417 | return error; | 422 | return error; |
418 | XFS_WANT_CORRUPTED_RETURN(i == 1); | 423 | XFS_WANT_CORRUPTED_RETURN(mp, i == 1); |
419 | } else { | 424 | } else { |
420 | /* | 425 | /* |
421 | * Update the by-block entry to start later|be shorter. | 426 | * Update the by-block entry to start later|be shorter. |
@@ -429,10 +434,10 @@ xfs_alloc_fixup_trees( | |||
429 | */ | 434 | */ |
430 | if ((error = xfs_alloc_lookup_eq(bno_cur, nfbno2, nflen2, &i))) | 435 | if ((error = xfs_alloc_lookup_eq(bno_cur, nfbno2, nflen2, &i))) |
431 | return error; | 436 | return error; |
432 | XFS_WANT_CORRUPTED_RETURN(i == 0); | 437 | XFS_WANT_CORRUPTED_RETURN(mp, i == 0); |
433 | if ((error = xfs_btree_insert(bno_cur, &i))) | 438 | if ((error = xfs_btree_insert(bno_cur, &i))) |
434 | return error; | 439 | return error; |
435 | XFS_WANT_CORRUPTED_RETURN(i == 1); | 440 | XFS_WANT_CORRUPTED_RETURN(mp, i == 1); |
436 | } | 441 | } |
437 | return 0; | 442 | return 0; |
438 | } | 443 | } |
@@ -682,7 +687,7 @@ xfs_alloc_ag_vextent_exact( | |||
682 | error = xfs_alloc_get_rec(bno_cur, &fbno, &flen, &i); | 687 | error = xfs_alloc_get_rec(bno_cur, &fbno, &flen, &i); |
683 | if (error) | 688 | if (error) |
684 | goto error0; | 689 | goto error0; |
685 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 690 | XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); |
686 | ASSERT(fbno <= args->agbno); | 691 | ASSERT(fbno <= args->agbno); |
687 | 692 | ||
688 | /* | 693 | /* |
@@ -783,7 +788,7 @@ xfs_alloc_find_best_extent( | |||
783 | error = xfs_alloc_get_rec(*scur, sbno, slen, &i); | 788 | error = xfs_alloc_get_rec(*scur, sbno, slen, &i); |
784 | if (error) | 789 | if (error) |
785 | goto error0; | 790 | goto error0; |
786 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 791 | XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); |
787 | xfs_alloc_compute_aligned(args, *sbno, *slen, sbnoa, slena); | 792 | xfs_alloc_compute_aligned(args, *sbno, *slen, sbnoa, slena); |
788 | 793 | ||
789 | /* | 794 | /* |
@@ -946,7 +951,7 @@ restart: | |||
946 | if ((error = xfs_alloc_get_rec(cnt_cur, <bno, | 951 | if ((error = xfs_alloc_get_rec(cnt_cur, <bno, |
947 | <len, &i))) | 952 | <len, &i))) |
948 | goto error0; | 953 | goto error0; |
949 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 954 | XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); |
950 | if (ltlen >= args->minlen) | 955 | if (ltlen >= args->minlen) |
951 | break; | 956 | break; |
952 | if ((error = xfs_btree_increment(cnt_cur, 0, &i))) | 957 | if ((error = xfs_btree_increment(cnt_cur, 0, &i))) |
@@ -966,7 +971,7 @@ restart: | |||
966 | */ | 971 | */ |
967 | if ((error = xfs_alloc_get_rec(cnt_cur, <bno, <len, &i))) | 972 | if ((error = xfs_alloc_get_rec(cnt_cur, <bno, <len, &i))) |
968 | goto error0; | 973 | goto error0; |
969 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 974 | XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); |
970 | xfs_alloc_compute_aligned(args, ltbno, ltlen, | 975 | xfs_alloc_compute_aligned(args, ltbno, ltlen, |
971 | <bnoa, <lena); | 976 | <bnoa, <lena); |
972 | if (ltlena < args->minlen) | 977 | if (ltlena < args->minlen) |
@@ -999,7 +1004,7 @@ restart: | |||
999 | cnt_cur->bc_ptrs[0] = besti; | 1004 | cnt_cur->bc_ptrs[0] = besti; |
1000 | if ((error = xfs_alloc_get_rec(cnt_cur, <bno, <len, &i))) | 1005 | if ((error = xfs_alloc_get_rec(cnt_cur, <bno, <len, &i))) |
1001 | goto error0; | 1006 | goto error0; |
1002 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1007 | XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); |
1003 | ASSERT(ltbno + ltlen <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); | 1008 | ASSERT(ltbno + ltlen <= be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length)); |
1004 | args->len = blen; | 1009 | args->len = blen; |
1005 | if (!xfs_alloc_fix_minleft(args)) { | 1010 | if (!xfs_alloc_fix_minleft(args)) { |
@@ -1088,7 +1093,7 @@ restart: | |||
1088 | if (bno_cur_lt) { | 1093 | if (bno_cur_lt) { |
1089 | if ((error = xfs_alloc_get_rec(bno_cur_lt, <bno, <len, &i))) | 1094 | if ((error = xfs_alloc_get_rec(bno_cur_lt, <bno, <len, &i))) |
1090 | goto error0; | 1095 | goto error0; |
1091 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1096 | XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); |
1092 | xfs_alloc_compute_aligned(args, ltbno, ltlen, | 1097 | xfs_alloc_compute_aligned(args, ltbno, ltlen, |
1093 | <bnoa, <lena); | 1098 | <bnoa, <lena); |
1094 | if (ltlena >= args->minlen) | 1099 | if (ltlena >= args->minlen) |
@@ -1104,7 +1109,7 @@ restart: | |||
1104 | if (bno_cur_gt) { | 1109 | if (bno_cur_gt) { |
1105 | if ((error = xfs_alloc_get_rec(bno_cur_gt, >bno, >len, &i))) | 1110 | if ((error = xfs_alloc_get_rec(bno_cur_gt, >bno, >len, &i))) |
1106 | goto error0; | 1111 | goto error0; |
1107 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1112 | XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); |
1108 | xfs_alloc_compute_aligned(args, gtbno, gtlen, | 1113 | xfs_alloc_compute_aligned(args, gtbno, gtlen, |
1109 | >bnoa, >lena); | 1114 | >bnoa, >lena); |
1110 | if (gtlena >= args->minlen) | 1115 | if (gtlena >= args->minlen) |
@@ -1303,7 +1308,7 @@ restart: | |||
1303 | error = xfs_alloc_get_rec(cnt_cur, &fbno, &flen, &i); | 1308 | error = xfs_alloc_get_rec(cnt_cur, &fbno, &flen, &i); |
1304 | if (error) | 1309 | if (error) |
1305 | goto error0; | 1310 | goto error0; |
1306 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1311 | XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); |
1307 | 1312 | ||
1308 | xfs_alloc_compute_aligned(args, fbno, flen, | 1313 | xfs_alloc_compute_aligned(args, fbno, flen, |
1309 | &rbno, &rlen); | 1314 | &rbno, &rlen); |
@@ -1342,7 +1347,7 @@ restart: | |||
1342 | * This can't happen in the second case above. | 1347 | * This can't happen in the second case above. |
1343 | */ | 1348 | */ |
1344 | rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); | 1349 | rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); |
1345 | XFS_WANT_CORRUPTED_GOTO(rlen == 0 || | 1350 | XFS_WANT_CORRUPTED_GOTO(args->mp, rlen == 0 || |
1346 | (rlen <= flen && rbno + rlen <= fbno + flen), error0); | 1351 | (rlen <= flen && rbno + rlen <= fbno + flen), error0); |
1347 | if (rlen < args->maxlen) { | 1352 | if (rlen < args->maxlen) { |
1348 | xfs_agblock_t bestfbno; | 1353 | xfs_agblock_t bestfbno; |
@@ -1362,13 +1367,13 @@ restart: | |||
1362 | if ((error = xfs_alloc_get_rec(cnt_cur, &fbno, &flen, | 1367 | if ((error = xfs_alloc_get_rec(cnt_cur, &fbno, &flen, |
1363 | &i))) | 1368 | &i))) |
1364 | goto error0; | 1369 | goto error0; |
1365 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1370 | XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); |
1366 | if (flen < bestrlen) | 1371 | if (flen < bestrlen) |
1367 | break; | 1372 | break; |
1368 | xfs_alloc_compute_aligned(args, fbno, flen, | 1373 | xfs_alloc_compute_aligned(args, fbno, flen, |
1369 | &rbno, &rlen); | 1374 | &rbno, &rlen); |
1370 | rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); | 1375 | rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); |
1371 | XFS_WANT_CORRUPTED_GOTO(rlen == 0 || | 1376 | XFS_WANT_CORRUPTED_GOTO(args->mp, rlen == 0 || |
1372 | (rlen <= flen && rbno + rlen <= fbno + flen), | 1377 | (rlen <= flen && rbno + rlen <= fbno + flen), |
1373 | error0); | 1378 | error0); |
1374 | if (rlen > bestrlen) { | 1379 | if (rlen > bestrlen) { |
@@ -1383,7 +1388,7 @@ restart: | |||
1383 | if ((error = xfs_alloc_lookup_eq(cnt_cur, bestfbno, bestflen, | 1388 | if ((error = xfs_alloc_lookup_eq(cnt_cur, bestfbno, bestflen, |
1384 | &i))) | 1389 | &i))) |
1385 | goto error0; | 1390 | goto error0; |
1386 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1391 | XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); |
1387 | rlen = bestrlen; | 1392 | rlen = bestrlen; |
1388 | rbno = bestrbno; | 1393 | rbno = bestrbno; |
1389 | flen = bestflen; | 1394 | flen = bestflen; |
@@ -1408,7 +1413,7 @@ restart: | |||
1408 | if (!xfs_alloc_fix_minleft(args)) | 1413 | if (!xfs_alloc_fix_minleft(args)) |
1409 | goto out_nominleft; | 1414 | goto out_nominleft; |
1410 | rlen = args->len; | 1415 | rlen = args->len; |
1411 | XFS_WANT_CORRUPTED_GOTO(rlen <= flen, error0); | 1416 | XFS_WANT_CORRUPTED_GOTO(args->mp, rlen <= flen, error0); |
1412 | /* | 1417 | /* |
1413 | * Allocate and initialize a cursor for the by-block tree. | 1418 | * Allocate and initialize a cursor for the by-block tree. |
1414 | */ | 1419 | */ |
@@ -1422,7 +1427,7 @@ restart: | |||
1422 | cnt_cur = bno_cur = NULL; | 1427 | cnt_cur = bno_cur = NULL; |
1423 | args->len = rlen; | 1428 | args->len = rlen; |
1424 | args->agbno = rbno; | 1429 | args->agbno = rbno; |
1425 | XFS_WANT_CORRUPTED_GOTO( | 1430 | XFS_WANT_CORRUPTED_GOTO(args->mp, |
1426 | args->agbno + args->len <= | 1431 | args->agbno + args->len <= |
1427 | be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), | 1432 | be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), |
1428 | error0); | 1433 | error0); |
@@ -1467,7 +1472,7 @@ xfs_alloc_ag_vextent_small( | |||
1467 | if (i) { | 1472 | if (i) { |
1468 | if ((error = xfs_alloc_get_rec(ccur, &fbno, &flen, &i))) | 1473 | if ((error = xfs_alloc_get_rec(ccur, &fbno, &flen, &i))) |
1469 | goto error0; | 1474 | goto error0; |
1470 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1475 | XFS_WANT_CORRUPTED_GOTO(args->mp, i == 1, error0); |
1471 | } | 1476 | } |
1472 | /* | 1477 | /* |
1473 | * Nothing in the btree, try the freelist. Make sure | 1478 | * Nothing in the btree, try the freelist. Make sure |
@@ -1493,7 +1498,7 @@ xfs_alloc_ag_vextent_small( | |||
1493 | } | 1498 | } |
1494 | args->len = 1; | 1499 | args->len = 1; |
1495 | args->agbno = fbno; | 1500 | args->agbno = fbno; |
1496 | XFS_WANT_CORRUPTED_GOTO( | 1501 | XFS_WANT_CORRUPTED_GOTO(args->mp, |
1497 | args->agbno + args->len <= | 1502 | args->agbno + args->len <= |
1498 | be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), | 1503 | be32_to_cpu(XFS_BUF_TO_AGF(args->agbp)->agf_length), |
1499 | error0); | 1504 | error0); |
@@ -1579,7 +1584,7 @@ xfs_free_ag_extent( | |||
1579 | */ | 1584 | */ |
1580 | if ((error = xfs_alloc_get_rec(bno_cur, <bno, <len, &i))) | 1585 | if ((error = xfs_alloc_get_rec(bno_cur, <bno, <len, &i))) |
1581 | goto error0; | 1586 | goto error0; |
1582 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1587 | XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0); |
1583 | /* | 1588 | /* |
1584 | * It's not contiguous, though. | 1589 | * It's not contiguous, though. |
1585 | */ | 1590 | */ |
@@ -1591,7 +1596,8 @@ xfs_free_ag_extent( | |||
1591 | * space was invalid, it's (partly) already free. | 1596 | * space was invalid, it's (partly) already free. |
1592 | * Very bad. | 1597 | * Very bad. |
1593 | */ | 1598 | */ |
1594 | XFS_WANT_CORRUPTED_GOTO(ltbno + ltlen <= bno, error0); | 1599 | XFS_WANT_CORRUPTED_GOTO(mp, |
1600 | ltbno + ltlen <= bno, error0); | ||
1595 | } | 1601 | } |
1596 | } | 1602 | } |
1597 | /* | 1603 | /* |
@@ -1606,7 +1612,7 @@ xfs_free_ag_extent( | |||
1606 | */ | 1612 | */ |
1607 | if ((error = xfs_alloc_get_rec(bno_cur, >bno, >len, &i))) | 1613 | if ((error = xfs_alloc_get_rec(bno_cur, >bno, >len, &i))) |
1608 | goto error0; | 1614 | goto error0; |
1609 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1615 | XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0); |
1610 | /* | 1616 | /* |
1611 | * It's not contiguous, though. | 1617 | * It's not contiguous, though. |
1612 | */ | 1618 | */ |
@@ -1618,7 +1624,7 @@ xfs_free_ag_extent( | |||
1618 | * space was invalid, it's (partly) already free. | 1624 | * space was invalid, it's (partly) already free. |
1619 | * Very bad. | 1625 | * Very bad. |
1620 | */ | 1626 | */ |
1621 | XFS_WANT_CORRUPTED_GOTO(gtbno >= bno + len, error0); | 1627 | XFS_WANT_CORRUPTED_GOTO(mp, gtbno >= bno + len, error0); |
1622 | } | 1628 | } |
1623 | } | 1629 | } |
1624 | /* | 1630 | /* |
@@ -1635,31 +1641,31 @@ xfs_free_ag_extent( | |||
1635 | */ | 1641 | */ |
1636 | if ((error = xfs_alloc_lookup_eq(cnt_cur, ltbno, ltlen, &i))) | 1642 | if ((error = xfs_alloc_lookup_eq(cnt_cur, ltbno, ltlen, &i))) |
1637 | goto error0; | 1643 | goto error0; |
1638 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1644 | XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0); |
1639 | if ((error = xfs_btree_delete(cnt_cur, &i))) | 1645 | if ((error = xfs_btree_delete(cnt_cur, &i))) |
1640 | goto error0; | 1646 | goto error0; |
1641 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1647 | XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0); |
1642 | /* | 1648 | /* |
1643 | * Delete the old by-size entry on the right. | 1649 | * Delete the old by-size entry on the right. |
1644 | */ | 1650 | */ |
1645 | if ((error = xfs_alloc_lookup_eq(cnt_cur, gtbno, gtlen, &i))) | 1651 | if ((error = xfs_alloc_lookup_eq(cnt_cur, gtbno, gtlen, &i))) |
1646 | goto error0; | 1652 | goto error0; |
1647 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1653 | XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0); |
1648 | if ((error = xfs_btree_delete(cnt_cur, &i))) | 1654 | if ((error = xfs_btree_delete(cnt_cur, &i))) |
1649 | goto error0; | 1655 | goto error0; |
1650 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1656 | XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0); |
1651 | /* | 1657 | /* |
1652 | * Delete the old by-block entry for the right block. | 1658 | * Delete the old by-block entry for the right block. |
1653 | */ | 1659 | */ |
1654 | if ((error = xfs_btree_delete(bno_cur, &i))) | 1660 | if ((error = xfs_btree_delete(bno_cur, &i))) |
1655 | goto error0; | 1661 | goto error0; |
1656 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1662 | XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0); |
1657 | /* | 1663 | /* |
1658 | * Move the by-block cursor back to the left neighbor. | 1664 | * Move the by-block cursor back to the left neighbor. |
1659 | */ | 1665 | */ |
1660 | if ((error = xfs_btree_decrement(bno_cur, 0, &i))) | 1666 | if ((error = xfs_btree_decrement(bno_cur, 0, &i))) |
1661 | goto error0; | 1667 | goto error0; |
1662 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1668 | XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0); |
1663 | #ifdef DEBUG | 1669 | #ifdef DEBUG |
1664 | /* | 1670 | /* |
1665 | * Check that this is the right record: delete didn't | 1671 | * Check that this is the right record: delete didn't |
@@ -1672,7 +1678,7 @@ xfs_free_ag_extent( | |||
1672 | if ((error = xfs_alloc_get_rec(bno_cur, &xxbno, &xxlen, | 1678 | if ((error = xfs_alloc_get_rec(bno_cur, &xxbno, &xxlen, |
1673 | &i))) | 1679 | &i))) |
1674 | goto error0; | 1680 | goto error0; |
1675 | XFS_WANT_CORRUPTED_GOTO( | 1681 | XFS_WANT_CORRUPTED_GOTO(mp, |
1676 | i == 1 && xxbno == ltbno && xxlen == ltlen, | 1682 | i == 1 && xxbno == ltbno && xxlen == ltlen, |
1677 | error0); | 1683 | error0); |
1678 | } | 1684 | } |
@@ -1695,17 +1701,17 @@ xfs_free_ag_extent( | |||
1695 | */ | 1701 | */ |
1696 | if ((error = xfs_alloc_lookup_eq(cnt_cur, ltbno, ltlen, &i))) | 1702 | if ((error = xfs_alloc_lookup_eq(cnt_cur, ltbno, ltlen, &i))) |
1697 | goto error0; | 1703 | goto error0; |
1698 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1704 | XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0); |
1699 | if ((error = xfs_btree_delete(cnt_cur, &i))) | 1705 | if ((error = xfs_btree_delete(cnt_cur, &i))) |
1700 | goto error0; | 1706 | goto error0; |
1701 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1707 | XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0); |
1702 | /* | 1708 | /* |
1703 | * Back up the by-block cursor to the left neighbor, and | 1709 | * Back up the by-block cursor to the left neighbor, and |
1704 | * update its length. | 1710 | * update its length. |
1705 | */ | 1711 | */ |
1706 | if ((error = xfs_btree_decrement(bno_cur, 0, &i))) | 1712 | if ((error = xfs_btree_decrement(bno_cur, 0, &i))) |
1707 | goto error0; | 1713 | goto error0; |
1708 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1714 | XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0); |
1709 | nbno = ltbno; | 1715 | nbno = ltbno; |
1710 | nlen = len + ltlen; | 1716 | nlen = len + ltlen; |
1711 | if ((error = xfs_alloc_update(bno_cur, nbno, nlen))) | 1717 | if ((error = xfs_alloc_update(bno_cur, nbno, nlen))) |
@@ -1721,10 +1727,10 @@ xfs_free_ag_extent( | |||
1721 | */ | 1727 | */ |
1722 | if ((error = xfs_alloc_lookup_eq(cnt_cur, gtbno, gtlen, &i))) | 1728 | if ((error = xfs_alloc_lookup_eq(cnt_cur, gtbno, gtlen, &i))) |
1723 | goto error0; | 1729 | goto error0; |
1724 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1730 | XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0); |
1725 | if ((error = xfs_btree_delete(cnt_cur, &i))) | 1731 | if ((error = xfs_btree_delete(cnt_cur, &i))) |
1726 | goto error0; | 1732 | goto error0; |
1727 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1733 | XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0); |
1728 | /* | 1734 | /* |
1729 | * Update the starting block and length of the right | 1735 | * Update the starting block and length of the right |
1730 | * neighbor in the by-block tree. | 1736 | * neighbor in the by-block tree. |
@@ -1743,7 +1749,7 @@ xfs_free_ag_extent( | |||
1743 | nlen = len; | 1749 | nlen = len; |
1744 | if ((error = xfs_btree_insert(bno_cur, &i))) | 1750 | if ((error = xfs_btree_insert(bno_cur, &i))) |
1745 | goto error0; | 1751 | goto error0; |
1746 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1752 | XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0); |
1747 | } | 1753 | } |
1748 | xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR); | 1754 | xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR); |
1749 | bno_cur = NULL; | 1755 | bno_cur = NULL; |
@@ -1752,10 +1758,10 @@ xfs_free_ag_extent( | |||
1752 | */ | 1758 | */ |
1753 | if ((error = xfs_alloc_lookup_eq(cnt_cur, nbno, nlen, &i))) | 1759 | if ((error = xfs_alloc_lookup_eq(cnt_cur, nbno, nlen, &i))) |
1754 | goto error0; | 1760 | goto error0; |
1755 | XFS_WANT_CORRUPTED_GOTO(i == 0, error0); | 1761 | XFS_WANT_CORRUPTED_GOTO(mp, i == 0, error0); |
1756 | if ((error = xfs_btree_insert(cnt_cur, &i))) | 1762 | if ((error = xfs_btree_insert(cnt_cur, &i))) |
1757 | goto error0; | 1763 | goto error0; |
1758 | XFS_WANT_CORRUPTED_GOTO(i == 1, error0); | 1764 | XFS_WANT_CORRUPTED_GOTO(mp, i == 1, error0); |
1759 | xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); | 1765 | xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); |
1760 | cnt_cur = NULL; | 1766 | cnt_cur = NULL; |
1761 | 1767 | ||