1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc. 4 * All Rights Reserved. 5 */ 6 #include "xfs.h" 7 #include "xfs_fs.h" 8 #include "xfs_format.h" 9 #include "xfs_log_format.h" 10 #include "xfs_shared.h" 11 #include "xfs_trans_resv.h" 12 #include "xfs_bit.h" 13 #include "xfs_mount.h" 14 #include "xfs_defer.h" 15 #include "xfs_btree.h" 16 #include "xfs_rmap.h" 17 #include "xfs_alloc_btree.h" 18 #include "xfs_alloc.h" 19 #include "xfs_extent_busy.h" 20 #include "xfs_errortag.h" 21 #include "xfs_error.h" 22 #include "xfs_trace.h" 23 #include "xfs_trans.h" 24 #include "xfs_buf_item.h" 25 #include "xfs_log.h" 26 #include "xfs_ag.h" 27 #include "xfs_ag_resv.h" 28 #include "xfs_bmap.h" 29 30 struct kmem_cache *xfs_extfree_item_cache; 31 32 struct workqueue_struct *xfs_alloc_wq; 33 34 #define XFS_ABSDIFF(a,b) (((a) <= (b)) ? ((b) - (a)) : ((a) - (b))) 35 36 #define XFSA_FIXUP_BNO_OK 1 37 #define XFSA_FIXUP_CNT_OK 2 38 39 STATIC int xfs_alloc_ag_vextent_exact(xfs_alloc_arg_t *); 40 STATIC int xfs_alloc_ag_vextent_near(xfs_alloc_arg_t *); 41 STATIC int xfs_alloc_ag_vextent_size(xfs_alloc_arg_t *); 42 43 /* 44 * Size of the AGFL. For CRC-enabled filesystes we steal a couple of slots in 45 * the beginning of the block for a proper header with the location information 46 * and CRC. 47 */ 48 unsigned int 49 xfs_agfl_size( 50 struct xfs_mount *mp) 51 { 52 unsigned int size = mp->m_sb.sb_sectsize; 53 54 if (xfs_has_crc(mp)) 55 size -= sizeof(struct xfs_agfl); 56 57 return size / sizeof(xfs_agblock_t); 58 } 59 60 unsigned int 61 xfs_refc_block( 62 struct xfs_mount *mp) 63 { 64 if (xfs_has_rmapbt(mp)) 65 return XFS_RMAP_BLOCK(mp) + 1; 66 if (xfs_has_finobt(mp)) 67 return XFS_FIBT_BLOCK(mp) + 1; 68 return XFS_IBT_BLOCK(mp) + 1; 69 } 70 71 xfs_extlen_t 72 xfs_prealloc_blocks( 73 struct xfs_mount *mp) 74 { 75 if (xfs_has_reflink(mp)) 76 return xfs_refc_block(mp) + 1; 77 if (xfs_has_rmapbt(mp)) 78 return XFS_RMAP_BLOCK(mp) + 1; 79 if (xfs_has_finobt(mp)) 80 return XFS_FIBT_BLOCK(mp) + 1; 81 return XFS_IBT_BLOCK(mp) + 1; 82 } 83 84 /* 85 * The number of blocks per AG that we withhold from xfs_mod_fdblocks to 86 * guarantee that we can refill the AGFL prior to allocating space in a nearly 87 * full AG. Although the space described by the free space btrees, the 88 * blocks used by the freesp btrees themselves, and the blocks owned by the 89 * AGFL are counted in the ondisk fdblocks, it's a mistake to let the ondisk 90 * free space in the AG drop so low that the free space btrees cannot refill an 91 * empty AGFL up to the minimum level. Rather than grind through empty AGs 92 * until the fs goes down, we subtract this many AG blocks from the incore 93 * fdblocks to ensure user allocation does not overcommit the space the 94 * filesystem needs for the AGFLs. The rmap btree uses a per-AG reservation to 95 * withhold space from xfs_mod_fdblocks, so we do not account for that here. 96 */ 97 #define XFS_ALLOCBT_AGFL_RESERVE 4 98 99 /* 100 * Compute the number of blocks that we set aside to guarantee the ability to 101 * refill the AGFL and handle a full bmap btree split. 102 * 103 * In order to avoid ENOSPC-related deadlock caused by out-of-order locking of 104 * AGF buffer (PV 947395), we place constraints on the relationship among 105 * actual allocations for data blocks, freelist blocks, and potential file data 106 * bmap btree blocks. However, these restrictions may result in no actual space 107 * allocated for a delayed extent, for example, a data block in a certain AG is 108 * allocated but there is no additional block for the additional bmap btree 109 * block due to a split of the bmap btree of the file. The result of this may 110 * lead to an infinite loop when the file gets flushed to disk and all delayed 111 * extents need to be actually allocated. To get around this, we explicitly set 112 * aside a few blocks which will not be reserved in delayed allocation. 113 * 114 * For each AG, we need to reserve enough blocks to replenish a totally empty 115 * AGFL and 4 more to handle a potential split of the file's bmap btree. 116 */ 117 unsigned int 118 xfs_alloc_set_aside( 119 struct xfs_mount *mp) 120 { 121 return mp->m_sb.sb_agcount * (XFS_ALLOCBT_AGFL_RESERVE + 4); 122 } 123 124 /* 125 * When deciding how much space to allocate out of an AG, we limit the 126 * allocation maximum size to the size the AG. However, we cannot use all the 127 * blocks in the AG - some are permanently used by metadata. These 128 * blocks are generally: 129 * - the AG superblock, AGF, AGI and AGFL 130 * - the AGF (bno and cnt) and AGI btree root blocks, and optionally 131 * the AGI free inode and rmap btree root blocks. 132 * - blocks on the AGFL according to xfs_alloc_set_aside() limits 133 * - the rmapbt root block 134 * 135 * The AG headers are sector sized, so the amount of space they take up is 136 * dependent on filesystem geometry. The others are all single blocks. 137 */ 138 unsigned int 139 xfs_alloc_ag_max_usable( 140 struct xfs_mount *mp) 141 { 142 unsigned int blocks; 143 144 blocks = XFS_BB_TO_FSB(mp, XFS_FSS_TO_BB(mp, 4)); /* ag headers */ 145 blocks += XFS_ALLOCBT_AGFL_RESERVE; 146 blocks += 3; /* AGF, AGI btree root blocks */ 147 if (xfs_has_finobt(mp)) 148 blocks++; /* finobt root block */ 149 if (xfs_has_rmapbt(mp)) 150 blocks++; /* rmap root block */ 151 if (xfs_has_reflink(mp)) 152 blocks++; /* refcount root block */ 153 154 return mp->m_sb.sb_agblocks - blocks; 155 } 156 157 /* 158 * Lookup the record equal to [bno, len] in the btree given by cur. 159 */ 160 STATIC int /* error */ 161 xfs_alloc_lookup_eq( 162 struct xfs_btree_cur *cur, /* btree cursor */ 163 xfs_agblock_t bno, /* starting block of extent */ 164 xfs_extlen_t len, /* length of extent */ 165 int *stat) /* success/failure */ 166 { 167 int error; 168 169 cur->bc_rec.a.ar_startblock = bno; 170 cur->bc_rec.a.ar_blockcount = len; 171 error = xfs_btree_lookup(cur, XFS_LOOKUP_EQ, stat); 172 cur->bc_ag.abt.active = (*stat == 1); 173 return error; 174 } 175 176 /* 177 * Lookup the first record greater than or equal to [bno, len] 178 * in the btree given by cur. 179 */ 180 int /* error */ 181 xfs_alloc_lookup_ge( 182 struct xfs_btree_cur *cur, /* btree cursor */ 183 xfs_agblock_t bno, /* starting block of extent */ 184 xfs_extlen_t len, /* length of extent */ 185 int *stat) /* success/failure */ 186 { 187 int error; 188 189 cur->bc_rec.a.ar_startblock = bno; 190 cur->bc_rec.a.ar_blockcount = len; 191 error = xfs_btree_lookup(cur, XFS_LOOKUP_GE, stat); 192 cur->bc_ag.abt.active = (*stat == 1); 193 return error; 194 } 195 196 /* 197 * Lookup the first record less than or equal to [bno, len] 198 * in the btree given by cur. 199 */ 200 int /* error */ 201 xfs_alloc_lookup_le( 202 struct xfs_btree_cur *cur, /* btree cursor */ 203 xfs_agblock_t bno, /* starting block of extent */ 204 xfs_extlen_t len, /* length of extent */ 205 int *stat) /* success/failure */ 206 { 207 int error; 208 cur->bc_rec.a.ar_startblock = bno; 209 cur->bc_rec.a.ar_blockcount = len; 210 error = xfs_btree_lookup(cur, XFS_LOOKUP_LE, stat); 211 cur->bc_ag.abt.active = (*stat == 1); 212 return error; 213 } 214 215 static inline bool 216 xfs_alloc_cur_active( 217 struct xfs_btree_cur *cur) 218 { 219 return cur && cur->bc_ag.abt.active; 220 } 221 222 /* 223 * Update the record referred to by cur to the value given 224 * by [bno, len]. 225 * This either works (return 0) or gets an EFSCORRUPTED error. 226 */ 227 STATIC int /* error */ 228 xfs_alloc_update( 229 struct xfs_btree_cur *cur, /* btree cursor */ 230 xfs_agblock_t bno, /* starting block of extent */ 231 xfs_extlen_t len) /* length of extent */ 232 { 233 union xfs_btree_rec rec; 234 235 rec.alloc.ar_startblock = cpu_to_be32(bno); 236 rec.alloc.ar_blockcount = cpu_to_be32(len); 237 return xfs_btree_update(cur, &rec); 238 } 239 240 /* 241 * Get the data from the pointed-to record. 242 */ 243 int /* error */ 244 xfs_alloc_get_rec( 245 struct xfs_btree_cur *cur, /* btree cursor */ 246 xfs_agblock_t *bno, /* output: starting block of extent */ 247 xfs_extlen_t *len, /* output: length of extent */ 248 int *stat) /* output: success/failure */ 249 { 250 struct xfs_mount *mp = cur->bc_mp; 251 struct xfs_perag *pag = cur->bc_ag.pag; 252 union xfs_btree_rec *rec; 253 int error; 254 255 error = xfs_btree_get_rec(cur, &rec, stat); 256 if (error || !(*stat)) 257 return error; 258 259 *bno = be32_to_cpu(rec->alloc.ar_startblock); 260 *len = be32_to_cpu(rec->alloc.ar_blockcount); 261 262 if (*len == 0) 263 goto out_bad_rec; 264 265 /* check for valid extent range, including overflow */ 266 if (!xfs_verify_agbno(pag, *bno)) 267 goto out_bad_rec; 268 if (*bno > *bno + *len) 269 goto out_bad_rec; 270 if (!xfs_verify_agbno(pag, *bno + *len - 1)) 271 goto out_bad_rec; 272 273 return 0; 274 275 out_bad_rec: 276 xfs_warn(mp, 277 "%s Freespace BTree record corruption in AG %d detected!", 278 cur->bc_btnum == XFS_BTNUM_BNO ? "Block" : "Size", 279 pag->pag_agno); 280 xfs_warn(mp, 281 "start block 0x%x block count 0x%x", *bno, *len); 282 return -EFSCORRUPTED; 283 } 284 285 /* 286 * Compute aligned version of the found extent. 287 * Takes alignment and min length into account. 288 */ 289 STATIC bool 290 xfs_alloc_compute_aligned( 291 xfs_alloc_arg_t *args, /* allocation argument structure */ 292 xfs_agblock_t foundbno, /* starting block in found extent */ 293 xfs_extlen_t foundlen, /* length in found extent */ 294 xfs_agblock_t *resbno, /* result block number */ 295 xfs_extlen_t *reslen, /* result length */ 296 unsigned *busy_gen) 297 { 298 xfs_agblock_t bno = foundbno; 299 xfs_extlen_t len = foundlen; 300 xfs_extlen_t diff; 301 bool busy; 302 303 /* Trim busy sections out of found extent */ 304 busy = xfs_extent_busy_trim(args, &bno, &len, busy_gen); 305 306 /* 307 * If we have a largish extent that happens to start before min_agbno, 308 * see if we can shift it into range... 309 */ 310 if (bno < args->min_agbno && bno + len > args->min_agbno) { 311 diff = args->min_agbno - bno; 312 if (len > diff) { 313 bno += diff; 314 len -= diff; 315 } 316 } 317 318 if (args->alignment > 1 && len >= args->minlen) { 319 xfs_agblock_t aligned_bno = roundup(bno, args->alignment); 320 321 diff = aligned_bno - bno; 322 323 *resbno = aligned_bno; 324 *reslen = diff >= len ? 0 : len - diff; 325 } else { 326 *resbno = bno; 327 *reslen = len; 328 } 329 330 return busy; 331 } 332 333 /* 334 * Compute best start block and diff for "near" allocations. 335 * freelen >= wantlen already checked by caller. 336 */ 337 STATIC xfs_extlen_t /* difference value (absolute) */ 338 xfs_alloc_compute_diff( 339 xfs_agblock_t wantbno, /* target starting block */ 340 xfs_extlen_t wantlen, /* target length */ 341 xfs_extlen_t alignment, /* target alignment */ 342 int datatype, /* are we allocating data? */ 343 xfs_agblock_t freebno, /* freespace's starting block */ 344 xfs_extlen_t freelen, /* freespace's length */ 345 xfs_agblock_t *newbnop) /* result: best start block from free */ 346 { 347 xfs_agblock_t freeend; /* end of freespace extent */ 348 xfs_agblock_t newbno1; /* return block number */ 349 xfs_agblock_t newbno2; /* other new block number */ 350 xfs_extlen_t newlen1=0; /* length with newbno1 */ 351 xfs_extlen_t newlen2=0; /* length with newbno2 */ 352 xfs_agblock_t wantend; /* end of target extent */ 353 bool userdata = datatype & XFS_ALLOC_USERDATA; 354 355 ASSERT(freelen >= wantlen); 356 freeend = freebno + freelen; 357 wantend = wantbno + wantlen; 358 /* 359 * We want to allocate from the start of a free extent if it is past 360 * the desired block or if we are allocating user data and the free 361 * extent is before desired block. The second case is there to allow 362 * for contiguous allocation from the remaining free space if the file 363 * grows in the short term. 364 */ 365 if (freebno >= wantbno || (userdata && freeend < wantend)) { 366 if ((newbno1 = roundup(freebno, alignment)) >= freeend) 367 newbno1 = NULLAGBLOCK; 368 } else if (freeend >= wantend && alignment > 1) { 369 newbno1 = roundup(wantbno, alignment); 370 newbno2 = newbno1 - alignment; 371 if (newbno1 >= freeend) 372 newbno1 = NULLAGBLOCK; 373 else 374 newlen1 = XFS_EXTLEN_MIN(wantlen, freeend - newbno1); 375 if (newbno2 < freebno) 376 newbno2 = NULLAGBLOCK; 377 else 378 newlen2 = XFS_EXTLEN_MIN(wantlen, freeend - newbno2); 379 if (newbno1 != NULLAGBLOCK && newbno2 != NULLAGBLOCK) { 380 if (newlen1 < newlen2 || 381 (newlen1 == newlen2 && 382 XFS_ABSDIFF(newbno1, wantbno) > 383 XFS_ABSDIFF(newbno2, wantbno))) 384 newbno1 = newbno2; 385 } else if (newbno2 != NULLAGBLOCK) 386 newbno1 = newbno2; 387 } else if (freeend >= wantend) { 388 newbno1 = wantbno; 389 } else if (alignment > 1) { 390 newbno1 = roundup(freeend - wantlen, alignment); 391 if (newbno1 > freeend - wantlen && 392 newbno1 - alignment >= freebno) 393 newbno1 -= alignment; 394 else if (newbno1 >= freeend) 395 newbno1 = NULLAGBLOCK; 396 } else 397 newbno1 = freeend - wantlen; 398 *newbnop = newbno1; 399 return newbno1 == NULLAGBLOCK ? 0 : XFS_ABSDIFF(newbno1, wantbno); 400 } 401 402 /* 403 * Fix up the length, based on mod and prod. 404 * len should be k * prod + mod for some k. 405 * If len is too small it is returned unchanged. 406 * If len hits maxlen it is left alone. 407 */ 408 STATIC void 409 xfs_alloc_fix_len( 410 xfs_alloc_arg_t *args) /* allocation argument structure */ 411 { 412 xfs_extlen_t k; 413 xfs_extlen_t rlen; 414 415 ASSERT(args->mod < args->prod); 416 rlen = args->len; 417 ASSERT(rlen >= args->minlen); 418 ASSERT(rlen <= args->maxlen); 419 if (args->prod <= 1 || rlen < args->mod || rlen == args->maxlen || 420 (args->mod == 0 && rlen < args->prod)) 421 return; 422 k = rlen % args->prod; 423 if (k == args->mod) 424 return; 425 if (k > args->mod) 426 rlen = rlen - (k - args->mod); 427 else 428 rlen = rlen - args->prod + (args->mod - k); 429 /* casts to (int) catch length underflows */ 430 if ((int)rlen < (int)args->minlen) 431 return; 432 ASSERT(rlen >= args->minlen && rlen <= args->maxlen); 433 ASSERT(rlen % args->prod == args->mod); 434 ASSERT(args->pag->pagf_freeblks + args->pag->pagf_flcount >= 435 rlen + args->minleft); 436 args->len = rlen; 437 } 438 439 /* 440 * Update the two btrees, logically removing from freespace the extent 441 * starting at rbno, rlen blocks. The extent is contained within the 442 * actual (current) free extent fbno for flen blocks. 443 * Flags are passed in indicating whether the cursors are set to the 444 * relevant records. 445 */ 446 STATIC int /* error code */ 447 xfs_alloc_fixup_trees( 448 struct xfs_btree_cur *cnt_cur, /* cursor for by-size btree */ 449 struct xfs_btree_cur *bno_cur, /* cursor for by-block btree */ 450 xfs_agblock_t fbno, /* starting block of free extent */ 451 xfs_extlen_t flen, /* length of free extent */ 452 xfs_agblock_t rbno, /* starting block of returned extent */ 453 xfs_extlen_t rlen, /* length of returned extent */ 454 int flags) /* flags, XFSA_FIXUP_... */ 455 { 456 int error; /* error code */ 457 int i; /* operation results */ 458 xfs_agblock_t nfbno1; /* first new free startblock */ 459 xfs_agblock_t nfbno2; /* second new free startblock */ 460 xfs_extlen_t nflen1=0; /* first new free length */ 461 xfs_extlen_t nflen2=0; /* second new free length */ 462 struct xfs_mount *mp; 463 464 mp = cnt_cur->bc_mp; 465 466 /* 467 * Look up the record in the by-size tree if necessary. 468 */ 469 if (flags & XFSA_FIXUP_CNT_OK) { 470 #ifdef DEBUG 471 if ((error = xfs_alloc_get_rec(cnt_cur, &nfbno1, &nflen1, &i))) 472 return error; 473 if (XFS_IS_CORRUPT(mp, 474 i != 1 || 475 nfbno1 != fbno || 476 nflen1 != flen)) 477 return -EFSCORRUPTED; 478 #endif 479 } else { 480 if ((error = xfs_alloc_lookup_eq(cnt_cur, fbno, flen, &i))) 481 return error; 482 if (XFS_IS_CORRUPT(mp, i != 1)) 483 return -EFSCORRUPTED; 484 } 485 /* 486 * Look up the record in the by-block tree if necessary. 487 */ 488 if (flags & XFSA_FIXUP_BNO_OK) { 489 #ifdef DEBUG 490 if ((error = xfs_alloc_get_rec(bno_cur, &nfbno1, &nflen1, &i))) 491 return error; 492 if (XFS_IS_CORRUPT(mp, 493 i != 1 || 494 nfbno1 != fbno || 495 nflen1 != flen)) 496 return -EFSCORRUPTED; 497 #endif 498 } else { 499 if ((error = xfs_alloc_lookup_eq(bno_cur, fbno, flen, &i))) 500 return error; 501 if (XFS_IS_CORRUPT(mp, i != 1)) 502 return -EFSCORRUPTED; 503 } 504 505 #ifdef DEBUG 506 if (bno_cur->bc_nlevels == 1 && cnt_cur->bc_nlevels == 1) { 507 struct xfs_btree_block *bnoblock; 508 struct xfs_btree_block *cntblock; 509 510 bnoblock = XFS_BUF_TO_BLOCK(bno_cur->bc_levels[0].bp); 511 cntblock = XFS_BUF_TO_BLOCK(cnt_cur->bc_levels[0].bp); 512 513 if (XFS_IS_CORRUPT(mp, 514 bnoblock->bb_numrecs != 515 cntblock->bb_numrecs)) 516 return -EFSCORRUPTED; 517 } 518 #endif 519 520 /* 521 * Deal with all four cases: the allocated record is contained 522 * within the freespace record, so we can have new freespace 523 * at either (or both) end, or no freespace remaining. 524 */ 525 if (rbno == fbno && rlen == flen) 526 nfbno1 = nfbno2 = NULLAGBLOCK; 527 else if (rbno == fbno) { 528 nfbno1 = rbno + rlen; 529 nflen1 = flen - rlen; 530 nfbno2 = NULLAGBLOCK; 531 } else if (rbno + rlen == fbno + flen) { 532 nfbno1 = fbno; 533 nflen1 = flen - rlen; 534 nfbno2 = NULLAGBLOCK; 535 } else { 536 nfbno1 = fbno; 537 nflen1 = rbno - fbno; 538 nfbno2 = rbno + rlen; 539 nflen2 = (fbno + flen) - nfbno2; 540 } 541 /* 542 * Delete the entry from the by-size btree. 543 */ 544 if ((error = xfs_btree_delete(cnt_cur, &i))) 545 return error; 546 if (XFS_IS_CORRUPT(mp, i != 1)) 547 return -EFSCORRUPTED; 548 /* 549 * Add new by-size btree entry(s). 550 */ 551 if (nfbno1 != NULLAGBLOCK) { 552 if ((error = xfs_alloc_lookup_eq(cnt_cur, nfbno1, nflen1, &i))) 553 return error; 554 if (XFS_IS_CORRUPT(mp, i != 0)) 555 return -EFSCORRUPTED; 556 if ((error = xfs_btree_insert(cnt_cur, &i))) 557 return error; 558 if (XFS_IS_CORRUPT(mp, i != 1)) 559 return -EFSCORRUPTED; 560 } 561 if (nfbno2 != NULLAGBLOCK) { 562 if ((error = xfs_alloc_lookup_eq(cnt_cur, nfbno2, nflen2, &i))) 563 return error; 564 if (XFS_IS_CORRUPT(mp, i != 0)) 565 return -EFSCORRUPTED; 566 if ((error = xfs_btree_insert(cnt_cur, &i))) 567 return error; 568 if (XFS_IS_CORRUPT(mp, i != 1)) 569 return -EFSCORRUPTED; 570 } 571 /* 572 * Fix up the by-block btree entry(s). 573 */ 574 if (nfbno1 == NULLAGBLOCK) { 575 /* 576 * No remaining freespace, just delete the by-block tree entry. 577 */ 578 if ((error = xfs_btree_delete(bno_cur, &i))) 579 return error; 580 if (XFS_IS_CORRUPT(mp, i != 1)) 581 return -EFSCORRUPTED; 582 } else { 583 /* 584 * Update the by-block entry to start later|be shorter. 585 */ 586 if ((error = xfs_alloc_update(bno_cur, nfbno1, nflen1))) 587 return error; 588 } 589 if (nfbno2 != NULLAGBLOCK) { 590 /* 591 * 2 resulting free entries, need to add one. 592 */ 593 if ((error = xfs_alloc_lookup_eq(bno_cur, nfbno2, nflen2, &i))) 594 return error; 595 if (XFS_IS_CORRUPT(mp, i != 0)) 596 return -EFSCORRUPTED; 597 if ((error = xfs_btree_insert(bno_cur, &i))) 598 return error; 599 if (XFS_IS_CORRUPT(mp, i != 1)) 600 return -EFSCORRUPTED; 601 } 602 return 0; 603 } 604 605 static xfs_failaddr_t 606 xfs_agfl_verify( 607 struct xfs_buf *bp) 608 { 609 struct xfs_mount *mp = bp->b_mount; 610 struct xfs_agfl *agfl = XFS_BUF_TO_AGFL(bp); 611 __be32 *agfl_bno = xfs_buf_to_agfl_bno(bp); 612 int i; 613 614 /* 615 * There is no verification of non-crc AGFLs because mkfs does not 616 * initialise the AGFL to zero or NULL. Hence the only valid part of the 617 * AGFL is what the AGF says is active. We can't get to the AGF, so we 618 * can't verify just those entries are valid. 619 */ 620 if (!xfs_has_crc(mp)) 621 return NULL; 622 623 if (!xfs_verify_magic(bp, agfl->agfl_magicnum)) 624 return __this_address; 625 if (!uuid_equal(&agfl->agfl_uuid, &mp->m_sb.sb_meta_uuid)) 626 return __this_address; 627 /* 628 * during growfs operations, the perag is not fully initialised, 629 * so we can't use it for any useful checking. growfs ensures we can't 630 * use it by using uncached buffers that don't have the perag attached 631 * so we can detect and avoid this problem. 632 */ 633 if (bp->b_pag && be32_to_cpu(agfl->agfl_seqno) != bp->b_pag->pag_agno) 634 return __this_address; 635 636 for (i = 0; i < xfs_agfl_size(mp); i++) { 637 if (be32_to_cpu(agfl_bno[i]) != NULLAGBLOCK && 638 be32_to_cpu(agfl_bno[i]) >= mp->m_sb.sb_agblocks) 639 return __this_address; 640 } 641 642 if (!xfs_log_check_lsn(mp, be64_to_cpu(XFS_BUF_TO_AGFL(bp)->agfl_lsn))) 643 return __this_address; 644 return NULL; 645 } 646 647 static void 648 xfs_agfl_read_verify( 649 struct xfs_buf *bp) 650 { 651 struct xfs_mount *mp = bp->b_mount; 652 xfs_failaddr_t fa; 653 654 /* 655 * There is no verification of non-crc AGFLs because mkfs does not 656 * initialise the AGFL to zero or NULL. Hence the only valid part of the 657 * AGFL is what the AGF says is active. We can't get to the AGF, so we 658 * can't verify just those entries are valid. 659 */ 660 if (!xfs_has_crc(mp)) 661 return; 662 663 if (!xfs_buf_verify_cksum(bp, XFS_AGFL_CRC_OFF)) 664 xfs_verifier_error(bp, -EFSBADCRC, __this_address); 665 else { 666 fa = xfs_agfl_verify(bp); 667 if (fa) 668 xfs_verifier_error(bp, -EFSCORRUPTED, fa); 669 } 670 } 671 672 static void 673 xfs_agfl_write_verify( 674 struct xfs_buf *bp) 675 { 676 struct xfs_mount *mp = bp->b_mount; 677 struct xfs_buf_log_item *bip = bp->b_log_item; 678 xfs_failaddr_t fa; 679 680 /* no verification of non-crc AGFLs */ 681 if (!xfs_has_crc(mp)) 682 return; 683 684 fa = xfs_agfl_verify(bp); 685 if (fa) { 686 xfs_verifier_error(bp, -EFSCORRUPTED, fa); 687 return; 688 } 689 690 if (bip) 691 XFS_BUF_TO_AGFL(bp)->agfl_lsn = cpu_to_be64(bip->bli_item.li_lsn); 692 693 xfs_buf_update_cksum(bp, XFS_AGFL_CRC_OFF); 694 } 695 696 const struct xfs_buf_ops xfs_agfl_buf_ops = { 697 .name = "xfs_agfl", 698 .magic = { cpu_to_be32(XFS_AGFL_MAGIC), cpu_to_be32(XFS_AGFL_MAGIC) }, 699 .verify_read = xfs_agfl_read_verify, 700 .verify_write = xfs_agfl_write_verify, 701 .verify_struct = xfs_agfl_verify, 702 }; 703 704 /* 705 * Read in the allocation group free block array. 706 */ 707 int 708 xfs_alloc_read_agfl( 709 struct xfs_perag *pag, 710 struct xfs_trans *tp, 711 struct xfs_buf **bpp) 712 { 713 struct xfs_mount *mp = pag->pag_mount; 714 struct xfs_buf *bp; 715 int error; 716 717 error = xfs_trans_read_buf( 718 mp, tp, mp->m_ddev_targp, 719 XFS_AG_DADDR(mp, pag->pag_agno, XFS_AGFL_DADDR(mp)), 720 XFS_FSS_TO_BB(mp, 1), 0, &bp, &xfs_agfl_buf_ops); 721 if (error) 722 return error; 723 xfs_buf_set_ref(bp, XFS_AGFL_REF); 724 *bpp = bp; 725 return 0; 726 } 727 728 STATIC int 729 xfs_alloc_update_counters( 730 struct xfs_trans *tp, 731 struct xfs_buf *agbp, 732 long len) 733 { 734 struct xfs_agf *agf = agbp->b_addr; 735 736 agbp->b_pag->pagf_freeblks += len; 737 be32_add_cpu(&agf->agf_freeblks, len); 738 739 if (unlikely(be32_to_cpu(agf->agf_freeblks) > 740 be32_to_cpu(agf->agf_length))) { 741 xfs_buf_mark_corrupt(agbp); 742 return -EFSCORRUPTED; 743 } 744 745 xfs_alloc_log_agf(tp, agbp, XFS_AGF_FREEBLKS); 746 return 0; 747 } 748 749 /* 750 * Block allocation algorithm and data structures. 751 */ 752 struct xfs_alloc_cur { 753 struct xfs_btree_cur *cnt; /* btree cursors */ 754 struct xfs_btree_cur *bnolt; 755 struct xfs_btree_cur *bnogt; 756 xfs_extlen_t cur_len;/* current search length */ 757 xfs_agblock_t rec_bno;/* extent startblock */ 758 xfs_extlen_t rec_len;/* extent length */ 759 xfs_agblock_t bno; /* alloc bno */ 760 xfs_extlen_t len; /* alloc len */ 761 xfs_extlen_t diff; /* diff from search bno */ 762 unsigned int busy_gen;/* busy state */ 763 bool busy; 764 }; 765 766 /* 767 * Set up cursors, etc. in the extent allocation cursor. This function can be 768 * called multiple times to reset an initialized structure without having to 769 * reallocate cursors. 770 */ 771 static int 772 xfs_alloc_cur_setup( 773 struct xfs_alloc_arg *args, 774 struct xfs_alloc_cur *acur) 775 { 776 int error; 777 int i; 778 779 ASSERT(args->alignment == 1 || args->type != XFS_ALLOCTYPE_THIS_BNO); 780 781 acur->cur_len = args->maxlen; 782 acur->rec_bno = 0; 783 acur->rec_len = 0; 784 acur->bno = 0; 785 acur->len = 0; 786 acur->diff = -1; 787 acur->busy = false; 788 acur->busy_gen = 0; 789 790 /* 791 * Perform an initial cntbt lookup to check for availability of maxlen 792 * extents. If this fails, we'll return -ENOSPC to signal the caller to 793 * attempt a small allocation. 794 */ 795 if (!acur->cnt) 796 acur->cnt = xfs_allocbt_init_cursor(args->mp, args->tp, 797 args->agbp, args->pag, XFS_BTNUM_CNT); 798 error = xfs_alloc_lookup_ge(acur->cnt, 0, args->maxlen, &i); 799 if (error) 800 return error; 801 802 /* 803 * Allocate the bnobt left and right search cursors. 804 */ 805 if (!acur->bnolt) 806 acur->bnolt = xfs_allocbt_init_cursor(args->mp, args->tp, 807 args->agbp, args->pag, XFS_BTNUM_BNO); 808 if (!acur->bnogt) 809 acur->bnogt = xfs_allocbt_init_cursor(args->mp, args->tp, 810 args->agbp, args->pag, XFS_BTNUM_BNO); 811 return i == 1 ? 0 : -ENOSPC; 812 } 813 814 static void 815 xfs_alloc_cur_close( 816 struct xfs_alloc_cur *acur, 817 bool error) 818 { 819 int cur_error = XFS_BTREE_NOERROR; 820 821 if (error) 822 cur_error = XFS_BTREE_ERROR; 823 824 if (acur->cnt) 825 xfs_btree_del_cursor(acur->cnt, cur_error); 826 if (acur->bnolt) 827 xfs_btree_del_cursor(acur->bnolt, cur_error); 828 if (acur->bnogt) 829 xfs_btree_del_cursor(acur->bnogt, cur_error); 830 acur->cnt = acur->bnolt = acur->bnogt = NULL; 831 } 832 833 /* 834 * Check an extent for allocation and track the best available candidate in the 835 * allocation structure. The cursor is deactivated if it has entered an out of 836 * range state based on allocation arguments. Optionally return the extent 837 * extent geometry and allocation status if requested by the caller. 838 */ 839 static int 840 xfs_alloc_cur_check( 841 struct xfs_alloc_arg *args, 842 struct xfs_alloc_cur *acur, 843 struct xfs_btree_cur *cur, 844 int *new) 845 { 846 int error, i; 847 xfs_agblock_t bno, bnoa, bnew; 848 xfs_extlen_t len, lena, diff = -1; 849 bool busy; 850 unsigned busy_gen = 0; 851 bool deactivate = false; 852 bool isbnobt = cur->bc_btnum == XFS_BTNUM_BNO; 853 854 *new = 0; 855 856 error = xfs_alloc_get_rec(cur, &bno, &len, &i); 857 if (error) 858 return error; 859 if (XFS_IS_CORRUPT(args->mp, i != 1)) 860 return -EFSCORRUPTED; 861 862 /* 863 * Check minlen and deactivate a cntbt cursor if out of acceptable size 864 * range (i.e., walking backwards looking for a minlen extent). 865 */ 866 if (len < args->minlen) { 867 deactivate = !isbnobt; 868 goto out; 869 } 870 871 busy = xfs_alloc_compute_aligned(args, bno, len, &bnoa, &lena, 872 &busy_gen); 873 acur->busy |= busy; 874 if (busy) 875 acur->busy_gen = busy_gen; 876 /* deactivate a bnobt cursor outside of locality range */ 877 if (bnoa < args->min_agbno || bnoa > args->max_agbno) { 878 deactivate = isbnobt; 879 goto out; 880 } 881 if (lena < args->minlen) 882 goto out; 883 884 args->len = XFS_EXTLEN_MIN(lena, args->maxlen); 885 xfs_alloc_fix_len(args); 886 ASSERT(args->len >= args->minlen); 887 if (args->len < acur->len) 888 goto out; 889 890 /* 891 * We have an aligned record that satisfies minlen and beats or matches 892 * the candidate extent size. Compare locality for near allocation mode. 893 */ 894 ASSERT(args->type == XFS_ALLOCTYPE_NEAR_BNO); 895 diff = xfs_alloc_compute_diff(args->agbno, args->len, 896 args->alignment, args->datatype, 897 bnoa, lena, &bnew); 898 if (bnew == NULLAGBLOCK) 899 goto out; 900 901 /* 902 * Deactivate a bnobt cursor with worse locality than the current best. 903 */ 904 if (diff > acur->diff) { 905 deactivate = isbnobt; 906 goto out; 907 } 908 909 ASSERT(args->len > acur->len || 910 (args->len == acur->len && diff <= acur->diff)); 911 acur->rec_bno = bno; 912 acur->rec_len = len; 913 acur->bno = bnew; 914 acur->len = args->len; 915 acur->diff = diff; 916 *new = 1; 917 918 /* 919 * We're done if we found a perfect allocation. This only deactivates 920 * the current cursor, but this is just an optimization to terminate a 921 * cntbt search that otherwise runs to the edge of the tree. 922 */ 923 if (acur->diff == 0 && acur->len == args->maxlen) 924 deactivate = true; 925 out: 926 if (deactivate) 927 cur->bc_ag.abt.active = false; 928 trace_xfs_alloc_cur_check(args->mp, cur->bc_btnum, bno, len, diff, 929 *new); 930 return 0; 931 } 932 933 /* 934 * Complete an allocation of a candidate extent. Remove the extent from both 935 * trees and update the args structure. 936 */ 937 STATIC int 938 xfs_alloc_cur_finish( 939 struct xfs_alloc_arg *args, 940 struct xfs_alloc_cur *acur) 941 { 942 struct xfs_agf __maybe_unused *agf = args->agbp->b_addr; 943 int error; 944 945 ASSERT(acur->cnt && acur->bnolt); 946 ASSERT(acur->bno >= acur->rec_bno); 947 ASSERT(acur->bno + acur->len <= acur->rec_bno + acur->rec_len); 948 ASSERT(acur->rec_bno + acur->rec_len <= be32_to_cpu(agf->agf_length)); 949 950 error = xfs_alloc_fixup_trees(acur->cnt, acur->bnolt, acur->rec_bno, 951 acur->rec_len, acur->bno, acur->len, 0); 952 if (error) 953 return error; 954 955 args->agbno = acur->bno; 956 args->len = acur->len; 957 args->wasfromfl = 0; 958 959 trace_xfs_alloc_cur(args); 960 return 0; 961 } 962 963 /* 964 * Locality allocation lookup algorithm. This expects a cntbt cursor and uses 965 * bno optimized lookup to search for extents with ideal size and locality. 966 */ 967 STATIC int 968 xfs_alloc_cntbt_iter( 969 struct xfs_alloc_arg *args, 970 struct xfs_alloc_cur *acur) 971 { 972 struct xfs_btree_cur *cur = acur->cnt; 973 xfs_agblock_t bno; 974 xfs_extlen_t len, cur_len; 975 int error; 976 int i; 977 978 if (!xfs_alloc_cur_active(cur)) 979 return 0; 980 981 /* locality optimized lookup */ 982 cur_len = acur->cur_len; 983 error = xfs_alloc_lookup_ge(cur, args->agbno, cur_len, &i); 984 if (error) 985 return error; 986 if (i == 0) 987 return 0; 988 error = xfs_alloc_get_rec(cur, &bno, &len, &i); 989 if (error) 990 return error; 991 992 /* check the current record and update search length from it */ 993 error = xfs_alloc_cur_check(args, acur, cur, &i); 994 if (error) 995 return error; 996 ASSERT(len >= acur->cur_len); 997 acur->cur_len = len; 998 999 /* 1000 * We looked up the first record >= [agbno, len] above. The agbno is a 1001 * secondary key and so the current record may lie just before or after 1002 * agbno. If it is past agbno, check the previous record too so long as 1003 * the length matches as it may be closer. Don't check a smaller record 1004 * because that could deactivate our cursor. 1005 */ 1006 if (bno > args->agbno) { 1007 error = xfs_btree_decrement(cur, 0, &i); 1008 if (!error && i) { 1009 error = xfs_alloc_get_rec(cur, &bno, &len, &i); 1010 if (!error && i && len == acur->cur_len) 1011 error = xfs_alloc_cur_check(args, acur, cur, 1012 &i); 1013 } 1014 if (error) 1015 return error; 1016 } 1017 1018 /* 1019 * Increment the search key until we find at least one allocation 1020 * candidate or if the extent we found was larger. Otherwise, double the 1021 * search key to optimize the search. Efficiency is more important here 1022 * than absolute best locality. 1023 */ 1024 cur_len <<= 1; 1025 if (!acur->len || acur->cur_len >= cur_len) 1026 acur->cur_len++; 1027 else 1028 acur->cur_len = cur_len; 1029 1030 return error; 1031 } 1032 1033 /* 1034 * Deal with the case where only small freespaces remain. Either return the 1035 * contents of the last freespace record, or allocate space from the freelist if 1036 * there is nothing in the tree. 1037 */ 1038 STATIC int /* error */ 1039 xfs_alloc_ag_vextent_small( 1040 struct xfs_alloc_arg *args, /* allocation argument structure */ 1041 struct xfs_btree_cur *ccur, /* optional by-size cursor */ 1042 xfs_agblock_t *fbnop, /* result block number */ 1043 xfs_extlen_t *flenp, /* result length */ 1044 int *stat) /* status: 0-freelist, 1-normal/none */ 1045 { 1046 struct xfs_agf *agf = args->agbp->b_addr; 1047 int error = 0; 1048 xfs_agblock_t fbno = NULLAGBLOCK; 1049 xfs_extlen_t flen = 0; 1050 int i = 0; 1051 1052 /* 1053 * If a cntbt cursor is provided, try to allocate the largest record in 1054 * the tree. Try the AGFL if the cntbt is empty, otherwise fail the 1055 * allocation. Make sure to respect minleft even when pulling from the 1056 * freelist. 1057 */ 1058 if (ccur) 1059 error = xfs_btree_decrement(ccur, 0, &i); 1060 if (error) 1061 goto error; 1062 if (i) { 1063 error = xfs_alloc_get_rec(ccur, &fbno, &flen, &i); 1064 if (error) 1065 goto error; 1066 if (XFS_IS_CORRUPT(args->mp, i != 1)) { 1067 error = -EFSCORRUPTED; 1068 goto error; 1069 } 1070 goto out; 1071 } 1072 1073 if (args->minlen != 1 || args->alignment != 1 || 1074 args->resv == XFS_AG_RESV_AGFL || 1075 be32_to_cpu(agf->agf_flcount) <= args->minleft) 1076 goto out; 1077 1078 error = xfs_alloc_get_freelist(args->pag, args->tp, args->agbp, 1079 &fbno, 0); 1080 if (error) 1081 goto error; 1082 if (fbno == NULLAGBLOCK) 1083 goto out; 1084 1085 xfs_extent_busy_reuse(args->mp, args->pag, fbno, 1, 1086 (args->datatype & XFS_ALLOC_NOBUSY)); 1087 1088 if (args->datatype & XFS_ALLOC_USERDATA) { 1089 struct xfs_buf *bp; 1090 1091 error = xfs_trans_get_buf(args->tp, args->mp->m_ddev_targp, 1092 XFS_AGB_TO_DADDR(args->mp, args->agno, fbno), 1093 args->mp->m_bsize, 0, &bp); 1094 if (error) 1095 goto error; 1096 xfs_trans_binval(args->tp, bp); 1097 } 1098 *fbnop = args->agbno = fbno; 1099 *flenp = args->len = 1; 1100 if (XFS_IS_CORRUPT(args->mp, fbno >= be32_to_cpu(agf->agf_length))) { 1101 error = -EFSCORRUPTED; 1102 goto error; 1103 } 1104 args->wasfromfl = 1; 1105 trace_xfs_alloc_small_freelist(args); 1106 1107 /* 1108 * If we're feeding an AGFL block to something that doesn't live in the 1109 * free space, we need to clear out the OWN_AG rmap. 1110 */ 1111 error = xfs_rmap_free(args->tp, args->agbp, args->pag, fbno, 1, 1112 &XFS_RMAP_OINFO_AG); 1113 if (error) 1114 goto error; 1115 1116 *stat = 0; 1117 return 0; 1118 1119 out: 1120 /* 1121 * Can't do the allocation, give up. 1122 */ 1123 if (flen < args->minlen) { 1124 args->agbno = NULLAGBLOCK; 1125 trace_xfs_alloc_small_notenough(args); 1126 flen = 0; 1127 } 1128 *fbnop = fbno; 1129 *flenp = flen; 1130 *stat = 1; 1131 trace_xfs_alloc_small_done(args); 1132 return 0; 1133 1134 error: 1135 trace_xfs_alloc_small_error(args); 1136 return error; 1137 } 1138 1139 /* 1140 * Allocate a variable extent in the allocation group agno. 1141 * Type and bno are used to determine where in the allocation group the 1142 * extent will start. 1143 * Extent's length (returned in *len) will be between minlen and maxlen, 1144 * and of the form k * prod + mod unless there's nothing that large. 1145 * Return the starting a.g. block, or NULLAGBLOCK if we can't do it. 1146 */ 1147 STATIC int /* error */ 1148 xfs_alloc_ag_vextent( 1149 xfs_alloc_arg_t *args) /* argument structure for allocation */ 1150 { 1151 int error=0; 1152 1153 ASSERT(args->minlen > 0); 1154 ASSERT(args->maxlen > 0); 1155 ASSERT(args->minlen <= args->maxlen); 1156 ASSERT(args->mod < args->prod); 1157 ASSERT(args->alignment > 0); 1158 1159 /* 1160 * Branch to correct routine based on the type. 1161 */ 1162 args->wasfromfl = 0; 1163 switch (args->type) { 1164 case XFS_ALLOCTYPE_THIS_AG: 1165 error = xfs_alloc_ag_vextent_size(args); 1166 break; 1167 case XFS_ALLOCTYPE_NEAR_BNO: 1168 error = xfs_alloc_ag_vextent_near(args); 1169 break; 1170 case XFS_ALLOCTYPE_THIS_BNO: 1171 error = xfs_alloc_ag_vextent_exact(args); 1172 break; 1173 default: 1174 ASSERT(0); 1175 /* NOTREACHED */ 1176 } 1177 1178 if (error || args->agbno == NULLAGBLOCK) 1179 return error; 1180 1181 ASSERT(args->len >= args->minlen); 1182 ASSERT(args->len <= args->maxlen); 1183 ASSERT(!args->wasfromfl || args->resv != XFS_AG_RESV_AGFL); 1184 ASSERT(args->agbno % args->alignment == 0); 1185 1186 /* if not file data, insert new block into the reverse map btree */ 1187 if (!xfs_rmap_should_skip_owner_update(&args->oinfo)) { 1188 error = xfs_rmap_alloc(args->tp, args->agbp, args->pag, 1189 args->agbno, args->len, &args->oinfo); 1190 if (error) 1191 return error; 1192 } 1193 1194 if (!args->wasfromfl) { 1195 error = xfs_alloc_update_counters(args->tp, args->agbp, 1196 -((long)(args->len))); 1197 if (error) 1198 return error; 1199 1200 ASSERT(!xfs_extent_busy_search(args->mp, args->pag, 1201 args->agbno, args->len)); 1202 } 1203 1204 xfs_ag_resv_alloc_extent(args->pag, args->resv, args); 1205 1206 XFS_STATS_INC(args->mp, xs_allocx); 1207 XFS_STATS_ADD(args->mp, xs_allocb, args->len); 1208 return error; 1209 } 1210 1211 /* 1212 * Allocate a variable extent at exactly agno/bno. 1213 * Extent's length (returned in *len) will be between minlen and maxlen, 1214 * and of the form k * prod + mod unless there's nothing that large. 1215 * Return the starting a.g. block (bno), or NULLAGBLOCK if we can't do it. 1216 */ 1217 STATIC int /* error */ 1218 xfs_alloc_ag_vextent_exact( 1219 xfs_alloc_arg_t *args) /* allocation argument structure */ 1220 { 1221 struct xfs_agf __maybe_unused *agf = args->agbp->b_addr; 1222 struct xfs_btree_cur *bno_cur;/* by block-number btree cursor */ 1223 struct xfs_btree_cur *cnt_cur;/* by count btree cursor */ 1224 int error; 1225 xfs_agblock_t fbno; /* start block of found extent */ 1226 xfs_extlen_t flen; /* length of found extent */ 1227 xfs_agblock_t tbno; /* start block of busy extent */ 1228 xfs_extlen_t tlen; /* length of busy extent */ 1229 xfs_agblock_t tend; /* end block of busy extent */ 1230 int i; /* success/failure of operation */ 1231 unsigned busy_gen; 1232 1233 ASSERT(args->alignment == 1); 1234 1235 /* 1236 * Allocate/initialize a cursor for the by-number freespace btree. 1237 */ 1238 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, 1239 args->pag, XFS_BTNUM_BNO); 1240 1241 /* 1242 * Lookup bno and minlen in the btree (minlen is irrelevant, really). 1243 * Look for the closest free block <= bno, it must contain bno 1244 * if any free block does. 1245 */ 1246 error = xfs_alloc_lookup_le(bno_cur, args->agbno, args->minlen, &i); 1247 if (error) 1248 goto error0; 1249 if (!i) 1250 goto not_found; 1251 1252 /* 1253 * Grab the freespace record. 1254 */ 1255 error = xfs_alloc_get_rec(bno_cur, &fbno, &flen, &i); 1256 if (error) 1257 goto error0; 1258 if (XFS_IS_CORRUPT(args->mp, i != 1)) { 1259 error = -EFSCORRUPTED; 1260 goto error0; 1261 } 1262 ASSERT(fbno <= args->agbno); 1263 1264 /* 1265 * Check for overlapping busy extents. 1266 */ 1267 tbno = fbno; 1268 tlen = flen; 1269 xfs_extent_busy_trim(args, &tbno, &tlen, &busy_gen); 1270 1271 /* 1272 * Give up if the start of the extent is busy, or the freespace isn't 1273 * long enough for the minimum request. 1274 */ 1275 if (tbno > args->agbno) 1276 goto not_found; 1277 if (tlen < args->minlen) 1278 goto not_found; 1279 tend = tbno + tlen; 1280 if (tend < args->agbno + args->minlen) 1281 goto not_found; 1282 1283 /* 1284 * End of extent will be smaller of the freespace end and the 1285 * maximal requested end. 1286 * 1287 * Fix the length according to mod and prod if given. 1288 */ 1289 args->len = XFS_AGBLOCK_MIN(tend, args->agbno + args->maxlen) 1290 - args->agbno; 1291 xfs_alloc_fix_len(args); 1292 ASSERT(args->agbno + args->len <= tend); 1293 1294 /* 1295 * We are allocating agbno for args->len 1296 * Allocate/initialize a cursor for the by-size btree. 1297 */ 1298 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, 1299 args->pag, XFS_BTNUM_CNT); 1300 ASSERT(args->agbno + args->len <= be32_to_cpu(agf->agf_length)); 1301 error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, args->agbno, 1302 args->len, XFSA_FIXUP_BNO_OK); 1303 if (error) { 1304 xfs_btree_del_cursor(cnt_cur, XFS_BTREE_ERROR); 1305 goto error0; 1306 } 1307 1308 xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR); 1309 xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); 1310 1311 args->wasfromfl = 0; 1312 trace_xfs_alloc_exact_done(args); 1313 return 0; 1314 1315 not_found: 1316 /* Didn't find it, return null. */ 1317 xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR); 1318 args->agbno = NULLAGBLOCK; 1319 trace_xfs_alloc_exact_notfound(args); 1320 return 0; 1321 1322 error0: 1323 xfs_btree_del_cursor(bno_cur, XFS_BTREE_ERROR); 1324 trace_xfs_alloc_exact_error(args); 1325 return error; 1326 } 1327 1328 /* 1329 * Search a given number of btree records in a given direction. Check each 1330 * record against the good extent we've already found. 1331 */ 1332 STATIC int 1333 xfs_alloc_walk_iter( 1334 struct xfs_alloc_arg *args, 1335 struct xfs_alloc_cur *acur, 1336 struct xfs_btree_cur *cur, 1337 bool increment, 1338 bool find_one, /* quit on first candidate */ 1339 int count, /* rec count (-1 for infinite) */ 1340 int *stat) 1341 { 1342 int error; 1343 int i; 1344 1345 *stat = 0; 1346 1347 /* 1348 * Search so long as the cursor is active or we find a better extent. 1349 * The cursor is deactivated if it extends beyond the range of the 1350 * current allocation candidate. 1351 */ 1352 while (xfs_alloc_cur_active(cur) && count) { 1353 error = xfs_alloc_cur_check(args, acur, cur, &i); 1354 if (error) 1355 return error; 1356 if (i == 1) { 1357 *stat = 1; 1358 if (find_one) 1359 break; 1360 } 1361 if (!xfs_alloc_cur_active(cur)) 1362 break; 1363 1364 if (increment) 1365 error = xfs_btree_increment(cur, 0, &i); 1366 else 1367 error = xfs_btree_decrement(cur, 0, &i); 1368 if (error) 1369 return error; 1370 if (i == 0) 1371 cur->bc_ag.abt.active = false; 1372 1373 if (count > 0) 1374 count--; 1375 } 1376 1377 return 0; 1378 } 1379 1380 /* 1381 * Search the by-bno and by-size btrees in parallel in search of an extent with 1382 * ideal locality based on the NEAR mode ->agbno locality hint. 1383 */ 1384 STATIC int 1385 xfs_alloc_ag_vextent_locality( 1386 struct xfs_alloc_arg *args, 1387 struct xfs_alloc_cur *acur, 1388 int *stat) 1389 { 1390 struct xfs_btree_cur *fbcur = NULL; 1391 int error; 1392 int i; 1393 bool fbinc; 1394 1395 ASSERT(acur->len == 0); 1396 ASSERT(args->type == XFS_ALLOCTYPE_NEAR_BNO); 1397 1398 *stat = 0; 1399 1400 error = xfs_alloc_lookup_ge(acur->cnt, args->agbno, acur->cur_len, &i); 1401 if (error) 1402 return error; 1403 error = xfs_alloc_lookup_le(acur->bnolt, args->agbno, 0, &i); 1404 if (error) 1405 return error; 1406 error = xfs_alloc_lookup_ge(acur->bnogt, args->agbno, 0, &i); 1407 if (error) 1408 return error; 1409 1410 /* 1411 * Search the bnobt and cntbt in parallel. Search the bnobt left and 1412 * right and lookup the closest extent to the locality hint for each 1413 * extent size key in the cntbt. The entire search terminates 1414 * immediately on a bnobt hit because that means we've found best case 1415 * locality. Otherwise the search continues until the cntbt cursor runs 1416 * off the end of the tree. If no allocation candidate is found at this 1417 * point, give up on locality, walk backwards from the end of the cntbt 1418 * and take the first available extent. 1419 * 1420 * The parallel tree searches balance each other out to provide fairly 1421 * consistent performance for various situations. The bnobt search can 1422 * have pathological behavior in the worst case scenario of larger 1423 * allocation requests and fragmented free space. On the other hand, the 1424 * bnobt is able to satisfy most smaller allocation requests much more 1425 * quickly than the cntbt. The cntbt search can sift through fragmented 1426 * free space and sets of free extents for larger allocation requests 1427 * more quickly than the bnobt. Since the locality hint is just a hint 1428 * and we don't want to scan the entire bnobt for perfect locality, the 1429 * cntbt search essentially bounds the bnobt search such that we can 1430 * find good enough locality at reasonable performance in most cases. 1431 */ 1432 while (xfs_alloc_cur_active(acur->bnolt) || 1433 xfs_alloc_cur_active(acur->bnogt) || 1434 xfs_alloc_cur_active(acur->cnt)) { 1435 1436 trace_xfs_alloc_cur_lookup(args); 1437 1438 /* 1439 * Search the bnobt left and right. In the case of a hit, finish 1440 * the search in the opposite direction and we're done. 1441 */ 1442 error = xfs_alloc_walk_iter(args, acur, acur->bnolt, false, 1443 true, 1, &i); 1444 if (error) 1445 return error; 1446 if (i == 1) { 1447 trace_xfs_alloc_cur_left(args); 1448 fbcur = acur->bnogt; 1449 fbinc = true; 1450 break; 1451 } 1452 error = xfs_alloc_walk_iter(args, acur, acur->bnogt, true, true, 1453 1, &i); 1454 if (error) 1455 return error; 1456 if (i == 1) { 1457 trace_xfs_alloc_cur_right(args); 1458 fbcur = acur->bnolt; 1459 fbinc = false; 1460 break; 1461 } 1462 1463 /* 1464 * Check the extent with best locality based on the current 1465 * extent size search key and keep track of the best candidate. 1466 */ 1467 error = xfs_alloc_cntbt_iter(args, acur); 1468 if (error) 1469 return error; 1470 if (!xfs_alloc_cur_active(acur->cnt)) { 1471 trace_xfs_alloc_cur_lookup_done(args); 1472 break; 1473 } 1474 } 1475 1476 /* 1477 * If we failed to find anything due to busy extents, return empty 1478 * handed so the caller can flush and retry. If no busy extents were 1479 * found, walk backwards from the end of the cntbt as a last resort. 1480 */ 1481 if (!xfs_alloc_cur_active(acur->cnt) && !acur->len && !acur->busy) { 1482 error = xfs_btree_decrement(acur->cnt, 0, &i); 1483 if (error) 1484 return error; 1485 if (i) { 1486 acur->cnt->bc_ag.abt.active = true; 1487 fbcur = acur->cnt; 1488 fbinc = false; 1489 } 1490 } 1491 1492 /* 1493 * Search in the opposite direction for a better entry in the case of 1494 * a bnobt hit or walk backwards from the end of the cntbt. 1495 */ 1496 if (fbcur) { 1497 error = xfs_alloc_walk_iter(args, acur, fbcur, fbinc, true, -1, 1498 &i); 1499 if (error) 1500 return error; 1501 } 1502 1503 if (acur->len) 1504 *stat = 1; 1505 1506 return 0; 1507 } 1508 1509 /* Check the last block of the cnt btree for allocations. */ 1510 static int 1511 xfs_alloc_ag_vextent_lastblock( 1512 struct xfs_alloc_arg *args, 1513 struct xfs_alloc_cur *acur, 1514 xfs_agblock_t *bno, 1515 xfs_extlen_t *len, 1516 bool *allocated) 1517 { 1518 int error; 1519 int i; 1520 1521 #ifdef DEBUG 1522 /* Randomly don't execute the first algorithm. */ 1523 if (prandom_u32_max(2)) 1524 return 0; 1525 #endif 1526 1527 /* 1528 * Start from the entry that lookup found, sequence through all larger 1529 * free blocks. If we're actually pointing at a record smaller than 1530 * maxlen, go to the start of this block, and skip all those smaller 1531 * than minlen. 1532 */ 1533 if (*len || args->alignment > 1) { 1534 acur->cnt->bc_levels[0].ptr = 1; 1535 do { 1536 error = xfs_alloc_get_rec(acur->cnt, bno, len, &i); 1537 if (error) 1538 return error; 1539 if (XFS_IS_CORRUPT(args->mp, i != 1)) 1540 return -EFSCORRUPTED; 1541 if (*len >= args->minlen) 1542 break; 1543 error = xfs_btree_increment(acur->cnt, 0, &i); 1544 if (error) 1545 return error; 1546 } while (i); 1547 ASSERT(*len >= args->minlen); 1548 if (!i) 1549 return 0; 1550 } 1551 1552 error = xfs_alloc_walk_iter(args, acur, acur->cnt, true, false, -1, &i); 1553 if (error) 1554 return error; 1555 1556 /* 1557 * It didn't work. We COULD be in a case where there's a good record 1558 * somewhere, so try again. 1559 */ 1560 if (acur->len == 0) 1561 return 0; 1562 1563 trace_xfs_alloc_near_first(args); 1564 *allocated = true; 1565 return 0; 1566 } 1567 1568 /* 1569 * Allocate a variable extent near bno in the allocation group agno. 1570 * Extent's length (returned in len) will be between minlen and maxlen, 1571 * and of the form k * prod + mod unless there's nothing that large. 1572 * Return the starting a.g. block, or NULLAGBLOCK if we can't do it. 1573 */ 1574 STATIC int 1575 xfs_alloc_ag_vextent_near( 1576 struct xfs_alloc_arg *args) 1577 { 1578 struct xfs_alloc_cur acur = {}; 1579 int error; /* error code */ 1580 int i; /* result code, temporary */ 1581 xfs_agblock_t bno; 1582 xfs_extlen_t len; 1583 1584 /* handle uninitialized agbno range so caller doesn't have to */ 1585 if (!args->min_agbno && !args->max_agbno) 1586 args->max_agbno = args->mp->m_sb.sb_agblocks - 1; 1587 ASSERT(args->min_agbno <= args->max_agbno); 1588 1589 /* clamp agbno to the range if it's outside */ 1590 if (args->agbno < args->min_agbno) 1591 args->agbno = args->min_agbno; 1592 if (args->agbno > args->max_agbno) 1593 args->agbno = args->max_agbno; 1594 1595 restart: 1596 len = 0; 1597 1598 /* 1599 * Set up cursors and see if there are any free extents as big as 1600 * maxlen. If not, pick the last entry in the tree unless the tree is 1601 * empty. 1602 */ 1603 error = xfs_alloc_cur_setup(args, &acur); 1604 if (error == -ENOSPC) { 1605 error = xfs_alloc_ag_vextent_small(args, acur.cnt, &bno, 1606 &len, &i); 1607 if (error) 1608 goto out; 1609 if (i == 0 || len == 0) { 1610 trace_xfs_alloc_near_noentry(args); 1611 goto out; 1612 } 1613 ASSERT(i == 1); 1614 } else if (error) { 1615 goto out; 1616 } 1617 1618 /* 1619 * First algorithm. 1620 * If the requested extent is large wrt the freespaces available 1621 * in this a.g., then the cursor will be pointing to a btree entry 1622 * near the right edge of the tree. If it's in the last btree leaf 1623 * block, then we just examine all the entries in that block 1624 * that are big enough, and pick the best one. 1625 */ 1626 if (xfs_btree_islastblock(acur.cnt, 0)) { 1627 bool allocated = false; 1628 1629 error = xfs_alloc_ag_vextent_lastblock(args, &acur, &bno, &len, 1630 &allocated); 1631 if (error) 1632 goto out; 1633 if (allocated) 1634 goto alloc_finish; 1635 } 1636 1637 /* 1638 * Second algorithm. Combined cntbt and bnobt search to find ideal 1639 * locality. 1640 */ 1641 error = xfs_alloc_ag_vextent_locality(args, &acur, &i); 1642 if (error) 1643 goto out; 1644 1645 /* 1646 * If we couldn't get anything, give up. 1647 */ 1648 if (!acur.len) { 1649 if (acur.busy) { 1650 trace_xfs_alloc_near_busy(args); 1651 xfs_extent_busy_flush(args->mp, args->pag, 1652 acur.busy_gen); 1653 goto restart; 1654 } 1655 trace_xfs_alloc_size_neither(args); 1656 args->agbno = NULLAGBLOCK; 1657 goto out; 1658 } 1659 1660 alloc_finish: 1661 /* fix up btrees on a successful allocation */ 1662 error = xfs_alloc_cur_finish(args, &acur); 1663 1664 out: 1665 xfs_alloc_cur_close(&acur, error); 1666 return error; 1667 } 1668 1669 /* 1670 * Allocate a variable extent anywhere in the allocation group agno. 1671 * Extent's length (returned in len) will be between minlen and maxlen, 1672 * and of the form k * prod + mod unless there's nothing that large. 1673 * Return the starting a.g. block, or NULLAGBLOCK if we can't do it. 1674 */ 1675 STATIC int /* error */ 1676 xfs_alloc_ag_vextent_size( 1677 xfs_alloc_arg_t *args) /* allocation argument structure */ 1678 { 1679 struct xfs_agf *agf = args->agbp->b_addr; 1680 struct xfs_btree_cur *bno_cur; /* cursor for bno btree */ 1681 struct xfs_btree_cur *cnt_cur; /* cursor for cnt btree */ 1682 int error; /* error result */ 1683 xfs_agblock_t fbno; /* start of found freespace */ 1684 xfs_extlen_t flen; /* length of found freespace */ 1685 int i; /* temp status variable */ 1686 xfs_agblock_t rbno; /* returned block number */ 1687 xfs_extlen_t rlen; /* length of returned extent */ 1688 bool busy; 1689 unsigned busy_gen; 1690 1691 restart: 1692 /* 1693 * Allocate and initialize a cursor for the by-size btree. 1694 */ 1695 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, 1696 args->pag, XFS_BTNUM_CNT); 1697 bno_cur = NULL; 1698 1699 /* 1700 * Look for an entry >= maxlen+alignment-1 blocks. 1701 */ 1702 if ((error = xfs_alloc_lookup_ge(cnt_cur, 0, 1703 args->maxlen + args->alignment - 1, &i))) 1704 goto error0; 1705 1706 /* 1707 * If none then we have to settle for a smaller extent. In the case that 1708 * there are no large extents, this will return the last entry in the 1709 * tree unless the tree is empty. In the case that there are only busy 1710 * large extents, this will return the largest small extent unless there 1711 * are no smaller extents available. 1712 */ 1713 if (!i) { 1714 error = xfs_alloc_ag_vextent_small(args, cnt_cur, 1715 &fbno, &flen, &i); 1716 if (error) 1717 goto error0; 1718 if (i == 0 || flen == 0) { 1719 xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); 1720 trace_xfs_alloc_size_noentry(args); 1721 return 0; 1722 } 1723 ASSERT(i == 1); 1724 busy = xfs_alloc_compute_aligned(args, fbno, flen, &rbno, 1725 &rlen, &busy_gen); 1726 } else { 1727 /* 1728 * Search for a non-busy extent that is large enough. 1729 */ 1730 for (;;) { 1731 error = xfs_alloc_get_rec(cnt_cur, &fbno, &flen, &i); 1732 if (error) 1733 goto error0; 1734 if (XFS_IS_CORRUPT(args->mp, i != 1)) { 1735 error = -EFSCORRUPTED; 1736 goto error0; 1737 } 1738 1739 busy = xfs_alloc_compute_aligned(args, fbno, flen, 1740 &rbno, &rlen, &busy_gen); 1741 1742 if (rlen >= args->maxlen) 1743 break; 1744 1745 error = xfs_btree_increment(cnt_cur, 0, &i); 1746 if (error) 1747 goto error0; 1748 if (i == 0) { 1749 /* 1750 * Our only valid extents must have been busy. 1751 * Make it unbusy by forcing the log out and 1752 * retrying. 1753 */ 1754 xfs_btree_del_cursor(cnt_cur, 1755 XFS_BTREE_NOERROR); 1756 trace_xfs_alloc_size_busy(args); 1757 xfs_extent_busy_flush(args->mp, 1758 args->pag, busy_gen); 1759 goto restart; 1760 } 1761 } 1762 } 1763 1764 /* 1765 * In the first case above, we got the last entry in the 1766 * by-size btree. Now we check to see if the space hits maxlen 1767 * once aligned; if not, we search left for something better. 1768 * This can't happen in the second case above. 1769 */ 1770 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); 1771 if (XFS_IS_CORRUPT(args->mp, 1772 rlen != 0 && 1773 (rlen > flen || 1774 rbno + rlen > fbno + flen))) { 1775 error = -EFSCORRUPTED; 1776 goto error0; 1777 } 1778 if (rlen < args->maxlen) { 1779 xfs_agblock_t bestfbno; 1780 xfs_extlen_t bestflen; 1781 xfs_agblock_t bestrbno; 1782 xfs_extlen_t bestrlen; 1783 1784 bestrlen = rlen; 1785 bestrbno = rbno; 1786 bestflen = flen; 1787 bestfbno = fbno; 1788 for (;;) { 1789 if ((error = xfs_btree_decrement(cnt_cur, 0, &i))) 1790 goto error0; 1791 if (i == 0) 1792 break; 1793 if ((error = xfs_alloc_get_rec(cnt_cur, &fbno, &flen, 1794 &i))) 1795 goto error0; 1796 if (XFS_IS_CORRUPT(args->mp, i != 1)) { 1797 error = -EFSCORRUPTED; 1798 goto error0; 1799 } 1800 if (flen < bestrlen) 1801 break; 1802 busy = xfs_alloc_compute_aligned(args, fbno, flen, 1803 &rbno, &rlen, &busy_gen); 1804 rlen = XFS_EXTLEN_MIN(args->maxlen, rlen); 1805 if (XFS_IS_CORRUPT(args->mp, 1806 rlen != 0 && 1807 (rlen > flen || 1808 rbno + rlen > fbno + flen))) { 1809 error = -EFSCORRUPTED; 1810 goto error0; 1811 } 1812 if (rlen > bestrlen) { 1813 bestrlen = rlen; 1814 bestrbno = rbno; 1815 bestflen = flen; 1816 bestfbno = fbno; 1817 if (rlen == args->maxlen) 1818 break; 1819 } 1820 } 1821 if ((error = xfs_alloc_lookup_eq(cnt_cur, bestfbno, bestflen, 1822 &i))) 1823 goto error0; 1824 if (XFS_IS_CORRUPT(args->mp, i != 1)) { 1825 error = -EFSCORRUPTED; 1826 goto error0; 1827 } 1828 rlen = bestrlen; 1829 rbno = bestrbno; 1830 flen = bestflen; 1831 fbno = bestfbno; 1832 } 1833 args->wasfromfl = 0; 1834 /* 1835 * Fix up the length. 1836 */ 1837 args->len = rlen; 1838 if (rlen < args->minlen) { 1839 if (busy) { 1840 xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); 1841 trace_xfs_alloc_size_busy(args); 1842 xfs_extent_busy_flush(args->mp, args->pag, busy_gen); 1843 goto restart; 1844 } 1845 goto out_nominleft; 1846 } 1847 xfs_alloc_fix_len(args); 1848 1849 rlen = args->len; 1850 if (XFS_IS_CORRUPT(args->mp, rlen > flen)) { 1851 error = -EFSCORRUPTED; 1852 goto error0; 1853 } 1854 /* 1855 * Allocate and initialize a cursor for the by-block tree. 1856 */ 1857 bno_cur = xfs_allocbt_init_cursor(args->mp, args->tp, args->agbp, 1858 args->pag, XFS_BTNUM_BNO); 1859 if ((error = xfs_alloc_fixup_trees(cnt_cur, bno_cur, fbno, flen, 1860 rbno, rlen, XFSA_FIXUP_CNT_OK))) 1861 goto error0; 1862 xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); 1863 xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR); 1864 cnt_cur = bno_cur = NULL; 1865 args->len = rlen; 1866 args->agbno = rbno; 1867 if (XFS_IS_CORRUPT(args->mp, 1868 args->agbno + args->len > 1869 be32_to_cpu(agf->agf_length))) { 1870 error = -EFSCORRUPTED; 1871 goto error0; 1872 } 1873 trace_xfs_alloc_size_done(args); 1874 return 0; 1875 1876 error0: 1877 trace_xfs_alloc_size_error(args); 1878 if (cnt_cur) 1879 xfs_btree_del_cursor(cnt_cur, XFS_BTREE_ERROR); 1880 if (bno_cur) 1881 xfs_btree_del_cursor(bno_cur, XFS_BTREE_ERROR); 1882 return error; 1883 1884 out_nominleft: 1885 xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); 1886 trace_xfs_alloc_size_nominleft(args); 1887 args->agbno = NULLAGBLOCK; 1888 return 0; 1889 } 1890 1891 /* 1892 * Free the extent starting at agno/bno for length. 1893 */ 1894 STATIC int 1895 xfs_free_ag_extent( 1896 struct xfs_trans *tp, 1897 struct xfs_buf *agbp, 1898 xfs_agnumber_t agno, 1899 xfs_agblock_t bno, 1900 xfs_extlen_t len, 1901 const struct xfs_owner_info *oinfo, 1902 enum xfs_ag_resv_type type) 1903 { 1904 struct xfs_mount *mp; 1905 struct xfs_btree_cur *bno_cur; 1906 struct xfs_btree_cur *cnt_cur; 1907 xfs_agblock_t gtbno; /* start of right neighbor */ 1908 xfs_extlen_t gtlen; /* length of right neighbor */ 1909 xfs_agblock_t ltbno; /* start of left neighbor */ 1910 xfs_extlen_t ltlen; /* length of left neighbor */ 1911 xfs_agblock_t nbno; /* new starting block of freesp */ 1912 xfs_extlen_t nlen; /* new length of freespace */ 1913 int haveleft; /* have a left neighbor */ 1914 int haveright; /* have a right neighbor */ 1915 int i; 1916 int error; 1917 struct xfs_perag *pag = agbp->b_pag; 1918 1919 bno_cur = cnt_cur = NULL; 1920 mp = tp->t_mountp; 1921 1922 if (!xfs_rmap_should_skip_owner_update(oinfo)) { 1923 error = xfs_rmap_free(tp, agbp, pag, bno, len, oinfo); 1924 if (error) 1925 goto error0; 1926 } 1927 1928 /* 1929 * Allocate and initialize a cursor for the by-block btree. 1930 */ 1931 bno_cur = xfs_allocbt_init_cursor(mp, tp, agbp, pag, XFS_BTNUM_BNO); 1932 /* 1933 * Look for a neighboring block on the left (lower block numbers) 1934 * that is contiguous with this space. 1935 */ 1936 if ((error = xfs_alloc_lookup_le(bno_cur, bno, len, &haveleft))) 1937 goto error0; 1938 if (haveleft) { 1939 /* 1940 * There is a block to our left. 1941 */ 1942 if ((error = xfs_alloc_get_rec(bno_cur, <bno, <len, &i))) 1943 goto error0; 1944 if (XFS_IS_CORRUPT(mp, i != 1)) { 1945 error = -EFSCORRUPTED; 1946 goto error0; 1947 } 1948 /* 1949 * It's not contiguous, though. 1950 */ 1951 if (ltbno + ltlen < bno) 1952 haveleft = 0; 1953 else { 1954 /* 1955 * If this failure happens the request to free this 1956 * space was invalid, it's (partly) already free. 1957 * Very bad. 1958 */ 1959 if (XFS_IS_CORRUPT(mp, ltbno + ltlen > bno)) { 1960 error = -EFSCORRUPTED; 1961 goto error0; 1962 } 1963 } 1964 } 1965 /* 1966 * Look for a neighboring block on the right (higher block numbers) 1967 * that is contiguous with this space. 1968 */ 1969 if ((error = xfs_btree_increment(bno_cur, 0, &haveright))) 1970 goto error0; 1971 if (haveright) { 1972 /* 1973 * There is a block to our right. 1974 */ 1975 if ((error = xfs_alloc_get_rec(bno_cur, >bno, >len, &i))) 1976 goto error0; 1977 if (XFS_IS_CORRUPT(mp, i != 1)) { 1978 error = -EFSCORRUPTED; 1979 goto error0; 1980 } 1981 /* 1982 * It's not contiguous, though. 1983 */ 1984 if (bno + len < gtbno) 1985 haveright = 0; 1986 else { 1987 /* 1988 * If this failure happens the request to free this 1989 * space was invalid, it's (partly) already free. 1990 * Very bad. 1991 */ 1992 if (XFS_IS_CORRUPT(mp, bno + len > gtbno)) { 1993 error = -EFSCORRUPTED; 1994 goto error0; 1995 } 1996 } 1997 } 1998 /* 1999 * Now allocate and initialize a cursor for the by-size tree. 2000 */ 2001 cnt_cur = xfs_allocbt_init_cursor(mp, tp, agbp, pag, XFS_BTNUM_CNT); 2002 /* 2003 * Have both left and right contiguous neighbors. 2004 * Merge all three into a single free block. 2005 */ 2006 if (haveleft && haveright) { 2007 /* 2008 * Delete the old by-size entry on the left. 2009 */ 2010 if ((error = xfs_alloc_lookup_eq(cnt_cur, ltbno, ltlen, &i))) 2011 goto error0; 2012 if (XFS_IS_CORRUPT(mp, i != 1)) { 2013 error = -EFSCORRUPTED; 2014 goto error0; 2015 } 2016 if ((error = xfs_btree_delete(cnt_cur, &i))) 2017 goto error0; 2018 if (XFS_IS_CORRUPT(mp, i != 1)) { 2019 error = -EFSCORRUPTED; 2020 goto error0; 2021 } 2022 /* 2023 * Delete the old by-size entry on the right. 2024 */ 2025 if ((error = xfs_alloc_lookup_eq(cnt_cur, gtbno, gtlen, &i))) 2026 goto error0; 2027 if (XFS_IS_CORRUPT(mp, i != 1)) { 2028 error = -EFSCORRUPTED; 2029 goto error0; 2030 } 2031 if ((error = xfs_btree_delete(cnt_cur, &i))) 2032 goto error0; 2033 if (XFS_IS_CORRUPT(mp, i != 1)) { 2034 error = -EFSCORRUPTED; 2035 goto error0; 2036 } 2037 /* 2038 * Delete the old by-block entry for the right block. 2039 */ 2040 if ((error = xfs_btree_delete(bno_cur, &i))) 2041 goto error0; 2042 if (XFS_IS_CORRUPT(mp, i != 1)) { 2043 error = -EFSCORRUPTED; 2044 goto error0; 2045 } 2046 /* 2047 * Move the by-block cursor back to the left neighbor. 2048 */ 2049 if ((error = xfs_btree_decrement(bno_cur, 0, &i))) 2050 goto error0; 2051 if (XFS_IS_CORRUPT(mp, i != 1)) { 2052 error = -EFSCORRUPTED; 2053 goto error0; 2054 } 2055 #ifdef DEBUG 2056 /* 2057 * Check that this is the right record: delete didn't 2058 * mangle the cursor. 2059 */ 2060 { 2061 xfs_agblock_t xxbno; 2062 xfs_extlen_t xxlen; 2063 2064 if ((error = xfs_alloc_get_rec(bno_cur, &xxbno, &xxlen, 2065 &i))) 2066 goto error0; 2067 if (XFS_IS_CORRUPT(mp, 2068 i != 1 || 2069 xxbno != ltbno || 2070 xxlen != ltlen)) { 2071 error = -EFSCORRUPTED; 2072 goto error0; 2073 } 2074 } 2075 #endif 2076 /* 2077 * Update remaining by-block entry to the new, joined block. 2078 */ 2079 nbno = ltbno; 2080 nlen = len + ltlen + gtlen; 2081 if ((error = xfs_alloc_update(bno_cur, nbno, nlen))) 2082 goto error0; 2083 } 2084 /* 2085 * Have only a left contiguous neighbor. 2086 * Merge it together with the new freespace. 2087 */ 2088 else if (haveleft) { 2089 /* 2090 * Delete the old by-size entry on the left. 2091 */ 2092 if ((error = xfs_alloc_lookup_eq(cnt_cur, ltbno, ltlen, &i))) 2093 goto error0; 2094 if (XFS_IS_CORRUPT(mp, i != 1)) { 2095 error = -EFSCORRUPTED; 2096 goto error0; 2097 } 2098 if ((error = xfs_btree_delete(cnt_cur, &i))) 2099 goto error0; 2100 if (XFS_IS_CORRUPT(mp, i != 1)) { 2101 error = -EFSCORRUPTED; 2102 goto error0; 2103 } 2104 /* 2105 * Back up the by-block cursor to the left neighbor, and 2106 * update its length. 2107 */ 2108 if ((error = xfs_btree_decrement(bno_cur, 0, &i))) 2109 goto error0; 2110 if (XFS_IS_CORRUPT(mp, i != 1)) { 2111 error = -EFSCORRUPTED; 2112 goto error0; 2113 } 2114 nbno = ltbno; 2115 nlen = len + ltlen; 2116 if ((error = xfs_alloc_update(bno_cur, nbno, nlen))) 2117 goto error0; 2118 } 2119 /* 2120 * Have only a right contiguous neighbor. 2121 * Merge it together with the new freespace. 2122 */ 2123 else if (haveright) { 2124 /* 2125 * Delete the old by-size entry on the right. 2126 */ 2127 if ((error = xfs_alloc_lookup_eq(cnt_cur, gtbno, gtlen, &i))) 2128 goto error0; 2129 if (XFS_IS_CORRUPT(mp, i != 1)) { 2130 error = -EFSCORRUPTED; 2131 goto error0; 2132 } 2133 if ((error = xfs_btree_delete(cnt_cur, &i))) 2134 goto error0; 2135 if (XFS_IS_CORRUPT(mp, i != 1)) { 2136 error = -EFSCORRUPTED; 2137 goto error0; 2138 } 2139 /* 2140 * Update the starting block and length of the right 2141 * neighbor in the by-block tree. 2142 */ 2143 nbno = bno; 2144 nlen = len + gtlen; 2145 if ((error = xfs_alloc_update(bno_cur, nbno, nlen))) 2146 goto error0; 2147 } 2148 /* 2149 * No contiguous neighbors. 2150 * Insert the new freespace into the by-block tree. 2151 */ 2152 else { 2153 nbno = bno; 2154 nlen = len; 2155 if ((error = xfs_btree_insert(bno_cur, &i))) 2156 goto error0; 2157 if (XFS_IS_CORRUPT(mp, i != 1)) { 2158 error = -EFSCORRUPTED; 2159 goto error0; 2160 } 2161 } 2162 xfs_btree_del_cursor(bno_cur, XFS_BTREE_NOERROR); 2163 bno_cur = NULL; 2164 /* 2165 * In all cases we need to insert the new freespace in the by-size tree. 2166 */ 2167 if ((error = xfs_alloc_lookup_eq(cnt_cur, nbno, nlen, &i))) 2168 goto error0; 2169 if (XFS_IS_CORRUPT(mp, i != 0)) { 2170 error = -EFSCORRUPTED; 2171 goto error0; 2172 } 2173 if ((error = xfs_btree_insert(cnt_cur, &i))) 2174 goto error0; 2175 if (XFS_IS_CORRUPT(mp, i != 1)) { 2176 error = -EFSCORRUPTED; 2177 goto error0; 2178 } 2179 xfs_btree_del_cursor(cnt_cur, XFS_BTREE_NOERROR); 2180 cnt_cur = NULL; 2181 2182 /* 2183 * Update the freespace totals in the ag and superblock. 2184 */ 2185 error = xfs_alloc_update_counters(tp, agbp, len); 2186 xfs_ag_resv_free_extent(agbp->b_pag, type, tp, len); 2187 if (error) 2188 goto error0; 2189 2190 XFS_STATS_INC(mp, xs_freex); 2191 XFS_STATS_ADD(mp, xs_freeb, len); 2192 2193 trace_xfs_free_extent(mp, agno, bno, len, type, haveleft, haveright); 2194 2195 return 0; 2196 2197 error0: 2198 trace_xfs_free_extent(mp, agno, bno, len, type, -1, -1); 2199 if (bno_cur) 2200 xfs_btree_del_cursor(bno_cur, XFS_BTREE_ERROR); 2201 if (cnt_cur) 2202 xfs_btree_del_cursor(cnt_cur, XFS_BTREE_ERROR); 2203 return error; 2204 } 2205 2206 /* 2207 * Visible (exported) allocation/free functions. 2208 * Some of these are used just by xfs_alloc_btree.c and this file. 2209 */ 2210 2211 /* 2212 * Compute and fill in value of m_alloc_maxlevels. 2213 */ 2214 void 2215 xfs_alloc_compute_maxlevels( 2216 xfs_mount_t *mp) /* file system mount structure */ 2217 { 2218 mp->m_alloc_maxlevels = xfs_btree_compute_maxlevels(mp->m_alloc_mnr, 2219 (mp->m_sb.sb_agblocks + 1) / 2); 2220 ASSERT(mp->m_alloc_maxlevels <= xfs_allocbt_maxlevels_ondisk()); 2221 } 2222 2223 /* 2224 * Find the length of the longest extent in an AG. The 'need' parameter 2225 * specifies how much space we're going to need for the AGFL and the 2226 * 'reserved' parameter tells us how many blocks in this AG are reserved for 2227 * other callers. 2228 */ 2229 xfs_extlen_t 2230 xfs_alloc_longest_free_extent( 2231 struct xfs_perag *pag, 2232 xfs_extlen_t need, 2233 xfs_extlen_t reserved) 2234 { 2235 xfs_extlen_t delta = 0; 2236 2237 /* 2238 * If the AGFL needs a recharge, we'll have to subtract that from the 2239 * longest extent. 2240 */ 2241 if (need > pag->pagf_flcount) 2242 delta = need - pag->pagf_flcount; 2243 2244 /* 2245 * If we cannot maintain others' reservations with space from the 2246 * not-longest freesp extents, we'll have to subtract /that/ from 2247 * the longest extent too. 2248 */ 2249 if (pag->pagf_freeblks - pag->pagf_longest < reserved) 2250 delta += reserved - (pag->pagf_freeblks - pag->pagf_longest); 2251 2252 /* 2253 * If the longest extent is long enough to satisfy all the 2254 * reservations and AGFL rules in place, we can return this extent. 2255 */ 2256 if (pag->pagf_longest > delta) 2257 return min_t(xfs_extlen_t, pag->pag_mount->m_ag_max_usable, 2258 pag->pagf_longest - delta); 2259 2260 /* Otherwise, let the caller try for 1 block if there's space. */ 2261 return pag->pagf_flcount > 0 || pag->pagf_longest > 0; 2262 } 2263 2264 /* 2265 * Compute the minimum length of the AGFL in the given AG. If @pag is NULL, 2266 * return the largest possible minimum length. 2267 */ 2268 unsigned int 2269 xfs_alloc_min_freelist( 2270 struct xfs_mount *mp, 2271 struct xfs_perag *pag) 2272 { 2273 /* AG btrees have at least 1 level. */ 2274 static const uint8_t fake_levels[XFS_BTNUM_AGF] = {1, 1, 1}; 2275 const uint8_t *levels = pag ? pag->pagf_levels : fake_levels; 2276 unsigned int min_free; 2277 2278 ASSERT(mp->m_alloc_maxlevels > 0); 2279 2280 /* space needed by-bno freespace btree */ 2281 min_free = min_t(unsigned int, levels[XFS_BTNUM_BNOi] + 1, 2282 mp->m_alloc_maxlevels); 2283 /* space needed by-size freespace btree */ 2284 min_free += min_t(unsigned int, levels[XFS_BTNUM_CNTi] + 1, 2285 mp->m_alloc_maxlevels); 2286 /* space needed reverse mapping used space btree */ 2287 if (xfs_has_rmapbt(mp)) 2288 min_free += min_t(unsigned int, levels[XFS_BTNUM_RMAPi] + 1, 2289 mp->m_rmap_maxlevels); 2290 2291 return min_free; 2292 } 2293 2294 /* 2295 * Check if the operation we are fixing up the freelist for should go ahead or 2296 * not. If we are freeing blocks, we always allow it, otherwise the allocation 2297 * is dependent on whether the size and shape of free space available will 2298 * permit the requested allocation to take place. 2299 */ 2300 static bool 2301 xfs_alloc_space_available( 2302 struct xfs_alloc_arg *args, 2303 xfs_extlen_t min_free, 2304 int flags) 2305 { 2306 struct xfs_perag *pag = args->pag; 2307 xfs_extlen_t alloc_len, longest; 2308 xfs_extlen_t reservation; /* blocks that are still reserved */ 2309 int available; 2310 xfs_extlen_t agflcount; 2311 2312 if (flags & XFS_ALLOC_FLAG_FREEING) 2313 return true; 2314 2315 reservation = xfs_ag_resv_needed(pag, args->resv); 2316 2317 /* do we have enough contiguous free space for the allocation? */ 2318 alloc_len = args->minlen + (args->alignment - 1) + args->minalignslop; 2319 longest = xfs_alloc_longest_free_extent(pag, min_free, reservation); 2320 if (longest < alloc_len) 2321 return false; 2322 2323 /* 2324 * Do we have enough free space remaining for the allocation? Don't 2325 * account extra agfl blocks because we are about to defer free them, 2326 * making them unavailable until the current transaction commits. 2327 */ 2328 agflcount = min_t(xfs_extlen_t, pag->pagf_flcount, min_free); 2329 available = (int)(pag->pagf_freeblks + agflcount - 2330 reservation - min_free - args->minleft); 2331 if (available < (int)max(args->total, alloc_len)) 2332 return false; 2333 2334 /* 2335 * Clamp maxlen to the amount of free space available for the actual 2336 * extent allocation. 2337 */ 2338 if (available < (int)args->maxlen && !(flags & XFS_ALLOC_FLAG_CHECK)) { 2339 args->maxlen = available; 2340 ASSERT(args->maxlen > 0); 2341 ASSERT(args->maxlen >= args->minlen); 2342 } 2343 2344 return true; 2345 } 2346 2347 int 2348 xfs_free_agfl_block( 2349 struct xfs_trans *tp, 2350 xfs_agnumber_t agno, 2351 xfs_agblock_t agbno, 2352 struct xfs_buf *agbp, 2353 struct xfs_owner_info *oinfo) 2354 { 2355 int error; 2356 struct xfs_buf *bp; 2357 2358 error = xfs_free_ag_extent(tp, agbp, agno, agbno, 1, oinfo, 2359 XFS_AG_RESV_AGFL); 2360 if (error) 2361 return error; 2362 2363 error = xfs_trans_get_buf(tp, tp->t_mountp->m_ddev_targp, 2364 XFS_AGB_TO_DADDR(tp->t_mountp, agno, agbno), 2365 tp->t_mountp->m_bsize, 0, &bp); 2366 if (error) 2367 return error; 2368 xfs_trans_binval(tp, bp); 2369 2370 return 0; 2371 } 2372 2373 /* 2374 * Check the agfl fields of the agf for inconsistency or corruption. The purpose 2375 * is to detect an agfl header padding mismatch between current and early v5 2376 * kernels. This problem manifests as a 1-slot size difference between the 2377 * on-disk flcount and the active [first, last] range of a wrapped agfl. This 2378 * may also catch variants of agfl count corruption unrelated to padding. Either 2379 * way, we'll reset the agfl and warn the user. 2380 * 2381 * Return true if a reset is required before the agfl can be used, false 2382 * otherwise. 2383 */ 2384 static bool 2385 xfs_agfl_needs_reset( 2386 struct xfs_mount *mp, 2387 struct xfs_agf *agf) 2388 { 2389 uint32_t f = be32_to_cpu(agf->agf_flfirst); 2390 uint32_t l = be32_to_cpu(agf->agf_fllast); 2391 uint32_t c = be32_to_cpu(agf->agf_flcount); 2392 int agfl_size = xfs_agfl_size(mp); 2393 int active; 2394 2395 /* no agfl header on v4 supers */ 2396 if (!xfs_has_crc(mp)) 2397 return false; 2398 2399 /* 2400 * The agf read verifier catches severe corruption of these fields. 2401 * Repeat some sanity checks to cover a packed -> unpacked mismatch if 2402 * the verifier allows it. 2403 */ 2404 if (f >= agfl_size || l >= agfl_size) 2405 return true; 2406 if (c > agfl_size) 2407 return true; 2408 2409 /* 2410 * Check consistency between the on-disk count and the active range. An 2411 * agfl padding mismatch manifests as an inconsistent flcount. 2412 */ 2413 if (c && l >= f) 2414 active = l - f + 1; 2415 else if (c) 2416 active = agfl_size - f + l + 1; 2417 else 2418 active = 0; 2419 2420 return active != c; 2421 } 2422 2423 /* 2424 * Reset the agfl to an empty state. Ignore/drop any existing blocks since the 2425 * agfl content cannot be trusted. Warn the user that a repair is required to 2426 * recover leaked blocks. 2427 * 2428 * The purpose of this mechanism is to handle filesystems affected by the agfl 2429 * header padding mismatch problem. A reset keeps the filesystem online with a 2430 * relatively minor free space accounting inconsistency rather than suffer the 2431 * inevitable crash from use of an invalid agfl block. 2432 */ 2433 static void 2434 xfs_agfl_reset( 2435 struct xfs_trans *tp, 2436 struct xfs_buf *agbp, 2437 struct xfs_perag *pag) 2438 { 2439 struct xfs_mount *mp = tp->t_mountp; 2440 struct xfs_agf *agf = agbp->b_addr; 2441 2442 ASSERT(pag->pagf_agflreset); 2443 trace_xfs_agfl_reset(mp, agf, 0, _RET_IP_); 2444 2445 xfs_warn(mp, 2446 "WARNING: Reset corrupted AGFL on AG %u. %d blocks leaked. " 2447 "Please unmount and run xfs_repair.", 2448 pag->pag_agno, pag->pagf_flcount); 2449 2450 agf->agf_flfirst = 0; 2451 agf->agf_fllast = cpu_to_be32(xfs_agfl_size(mp) - 1); 2452 agf->agf_flcount = 0; 2453 xfs_alloc_log_agf(tp, agbp, XFS_AGF_FLFIRST | XFS_AGF_FLLAST | 2454 XFS_AGF_FLCOUNT); 2455 2456 pag->pagf_flcount = 0; 2457 pag->pagf_agflreset = false; 2458 } 2459 2460 /* 2461 * Defer an AGFL block free. This is effectively equivalent to 2462 * xfs_free_extent_later() with some special handling particular to AGFL blocks. 2463 * 2464 * Deferring AGFL frees helps prevent log reservation overruns due to too many 2465 * allocation operations in a transaction. AGFL frees are prone to this problem 2466 * because for one they are always freed one at a time. Further, an immediate 2467 * AGFL block free can cause a btree join and require another block free before 2468 * the real allocation can proceed. Deferring the free disconnects freeing up 2469 * the AGFL slot from freeing the block. 2470 */ 2471 STATIC void 2472 xfs_defer_agfl_block( 2473 struct xfs_trans *tp, 2474 xfs_agnumber_t agno, 2475 xfs_fsblock_t agbno, 2476 struct xfs_owner_info *oinfo) 2477 { 2478 struct xfs_mount *mp = tp->t_mountp; 2479 struct xfs_extent_free_item *new; /* new element */ 2480 2481 ASSERT(xfs_extfree_item_cache != NULL); 2482 ASSERT(oinfo != NULL); 2483 2484 new = kmem_cache_zalloc(xfs_extfree_item_cache, 2485 GFP_KERNEL | __GFP_NOFAIL); 2486 new->xefi_startblock = XFS_AGB_TO_FSB(mp, agno, agbno); 2487 new->xefi_blockcount = 1; 2488 new->xefi_owner = oinfo->oi_owner; 2489 2490 trace_xfs_agfl_free_defer(mp, agno, 0, agbno, 1); 2491 2492 xfs_defer_add(tp, XFS_DEFER_OPS_TYPE_AGFL_FREE, &new->xefi_list); 2493 } 2494 2495 /* 2496 * Add the extent to the list of extents to be free at transaction end. 2497 * The list is maintained sorted (by block number). 2498 */ 2499 void 2500 __xfs_free_extent_later( 2501 struct xfs_trans *tp, 2502 xfs_fsblock_t bno, 2503 xfs_filblks_t len, 2504 const struct xfs_owner_info *oinfo, 2505 bool skip_discard) 2506 { 2507 struct xfs_extent_free_item *new; /* new element */ 2508 #ifdef DEBUG 2509 struct xfs_mount *mp = tp->t_mountp; 2510 xfs_agnumber_t agno; 2511 xfs_agblock_t agbno; 2512 2513 ASSERT(bno != NULLFSBLOCK); 2514 ASSERT(len > 0); 2515 ASSERT(len <= XFS_MAX_BMBT_EXTLEN); 2516 ASSERT(!isnullstartblock(bno)); 2517 agno = XFS_FSB_TO_AGNO(mp, bno); 2518 agbno = XFS_FSB_TO_AGBNO(mp, bno); 2519 ASSERT(agno < mp->m_sb.sb_agcount); 2520 ASSERT(agbno < mp->m_sb.sb_agblocks); 2521 ASSERT(len < mp->m_sb.sb_agblocks); 2522 ASSERT(agbno + len <= mp->m_sb.sb_agblocks); 2523 #endif 2524 ASSERT(xfs_extfree_item_cache != NULL); 2525 2526 new = kmem_cache_zalloc(xfs_extfree_item_cache, 2527 GFP_KERNEL | __GFP_NOFAIL); 2528 new->xefi_startblock = bno; 2529 new->xefi_blockcount = (xfs_extlen_t)len; 2530 if (skip_discard) 2531 new->xefi_flags |= XFS_EFI_SKIP_DISCARD; 2532 if (oinfo) { 2533 ASSERT(oinfo->oi_offset == 0); 2534 2535 if (oinfo->oi_flags & XFS_OWNER_INFO_ATTR_FORK) 2536 new->xefi_flags |= XFS_EFI_ATTR_FORK; 2537 if (oinfo->oi_flags & XFS_OWNER_INFO_BMBT_BLOCK) 2538 new->xefi_flags |= XFS_EFI_BMBT_BLOCK; 2539 new->xefi_owner = oinfo->oi_owner; 2540 } else { 2541 new->xefi_owner = XFS_RMAP_OWN_NULL; 2542 } 2543 trace_xfs_bmap_free_defer(tp->t_mountp, 2544 XFS_FSB_TO_AGNO(tp->t_mountp, bno), 0, 2545 XFS_FSB_TO_AGBNO(tp->t_mountp, bno), len); 2546 xfs_defer_add(tp, XFS_DEFER_OPS_TYPE_FREE, &new->xefi_list); 2547 } 2548 2549 #ifdef DEBUG 2550 /* 2551 * Check if an AGF has a free extent record whose length is equal to 2552 * args->minlen. 2553 */ 2554 STATIC int 2555 xfs_exact_minlen_extent_available( 2556 struct xfs_alloc_arg *args, 2557 struct xfs_buf *agbp, 2558 int *stat) 2559 { 2560 struct xfs_btree_cur *cnt_cur; 2561 xfs_agblock_t fbno; 2562 xfs_extlen_t flen; 2563 int error = 0; 2564 2565 cnt_cur = xfs_allocbt_init_cursor(args->mp, args->tp, agbp, 2566 args->pag, XFS_BTNUM_CNT); 2567 error = xfs_alloc_lookup_ge(cnt_cur, 0, args->minlen, stat); 2568 if (error) 2569 goto out; 2570 2571 if (*stat == 0) { 2572 error = -EFSCORRUPTED; 2573 goto out; 2574 } 2575 2576 error = xfs_alloc_get_rec(cnt_cur, &fbno, &flen, stat); 2577 if (error) 2578 goto out; 2579 2580 if (*stat == 1 && flen != args->minlen) 2581 *stat = 0; 2582 2583 out: 2584 xfs_btree_del_cursor(cnt_cur, error); 2585 2586 return error; 2587 } 2588 #endif 2589 2590 /* 2591 * Decide whether to use this allocation group for this allocation. 2592 * If so, fix up the btree freelist's size. 2593 */ 2594 int /* error */ 2595 xfs_alloc_fix_freelist( 2596 struct xfs_alloc_arg *args, /* allocation argument structure */ 2597 int flags) /* XFS_ALLOC_FLAG_... */ 2598 { 2599 struct xfs_mount *mp = args->mp; 2600 struct xfs_perag *pag = args->pag; 2601 struct xfs_trans *tp = args->tp; 2602 struct xfs_buf *agbp = NULL; 2603 struct xfs_buf *agflbp = NULL; 2604 struct xfs_alloc_arg targs; /* local allocation arguments */ 2605 xfs_agblock_t bno; /* freelist block */ 2606 xfs_extlen_t need; /* total blocks needed in freelist */ 2607 int error = 0; 2608 2609 /* deferred ops (AGFL block frees) require permanent transactions */ 2610 ASSERT(tp->t_flags & XFS_TRANS_PERM_LOG_RES); 2611 2612 if (!pag->pagf_init) { 2613 error = xfs_alloc_read_agf(pag, tp, flags, &agbp); 2614 if (error) { 2615 /* Couldn't lock the AGF so skip this AG. */ 2616 if (error == -EAGAIN) 2617 error = 0; 2618 goto out_no_agbp; 2619 } 2620 } 2621 2622 /* 2623 * If this is a metadata preferred pag and we are user data then try 2624 * somewhere else if we are not being asked to try harder at this 2625 * point 2626 */ 2627 if (pag->pagf_metadata && (args->datatype & XFS_ALLOC_USERDATA) && 2628 (flags & XFS_ALLOC_FLAG_TRYLOCK)) { 2629 ASSERT(!(flags & XFS_ALLOC_FLAG_FREEING)); 2630 goto out_agbp_relse; 2631 } 2632 2633 need = xfs_alloc_min_freelist(mp, pag); 2634 if (!xfs_alloc_space_available(args, need, flags | 2635 XFS_ALLOC_FLAG_CHECK)) 2636 goto out_agbp_relse; 2637 2638 /* 2639 * Get the a.g. freespace buffer. 2640 * Can fail if we're not blocking on locks, and it's held. 2641 */ 2642 if (!agbp) { 2643 error = xfs_alloc_read_agf(pag, tp, flags, &agbp); 2644 if (error) { 2645 /* Couldn't lock the AGF so skip this AG. */ 2646 if (error == -EAGAIN) 2647 error = 0; 2648 goto out_no_agbp; 2649 } 2650 } 2651 2652 /* reset a padding mismatched agfl before final free space check */ 2653 if (pag->pagf_agflreset) 2654 xfs_agfl_reset(tp, agbp, pag); 2655 2656 /* If there isn't enough total space or single-extent, reject it. */ 2657 need = xfs_alloc_min_freelist(mp, pag); 2658 if (!xfs_alloc_space_available(args, need, flags)) 2659 goto out_agbp_relse; 2660 2661 #ifdef DEBUG 2662 if (args->alloc_minlen_only) { 2663 int stat; 2664 2665 error = xfs_exact_minlen_extent_available(args, agbp, &stat); 2666 if (error || !stat) 2667 goto out_agbp_relse; 2668 } 2669 #endif 2670 /* 2671 * Make the freelist shorter if it's too long. 2672 * 2673 * Note that from this point onwards, we will always release the agf and 2674 * agfl buffers on error. This handles the case where we error out and 2675 * the buffers are clean or may not have been joined to the transaction 2676 * and hence need to be released manually. If they have been joined to 2677 * the transaction, then xfs_trans_brelse() will handle them 2678 * appropriately based on the recursion count and dirty state of the 2679 * buffer. 2680 * 2681 * XXX (dgc): When we have lots of free space, does this buy us 2682 * anything other than extra overhead when we need to put more blocks 2683 * back on the free list? Maybe we should only do this when space is 2684 * getting low or the AGFL is more than half full? 2685 * 2686 * The NOSHRINK flag prevents the AGFL from being shrunk if it's too 2687 * big; the NORMAP flag prevents AGFL expand/shrink operations from 2688 * updating the rmapbt. Both flags are used in xfs_repair while we're 2689 * rebuilding the rmapbt, and neither are used by the kernel. They're 2690 * both required to ensure that rmaps are correctly recorded for the 2691 * regenerated AGFL, bnobt, and cntbt. See repair/phase5.c and 2692 * repair/rmap.c in xfsprogs for details. 2693 */ 2694 memset(&targs, 0, sizeof(targs)); 2695 /* struct copy below */ 2696 if (flags & XFS_ALLOC_FLAG_NORMAP) 2697 targs.oinfo = XFS_RMAP_OINFO_SKIP_UPDATE; 2698 else 2699 targs.oinfo = XFS_RMAP_OINFO_AG; 2700 while (!(flags & XFS_ALLOC_FLAG_NOSHRINK) && pag->pagf_flcount > need) { 2701 error = xfs_alloc_get_freelist(pag, tp, agbp, &bno, 0); 2702 if (error) 2703 goto out_agbp_relse; 2704 2705 /* defer agfl frees */ 2706 xfs_defer_agfl_block(tp, args->agno, bno, &targs.oinfo); 2707 } 2708 2709 targs.tp = tp; 2710 targs.mp = mp; 2711 targs.agbp = agbp; 2712 targs.agno = args->agno; 2713 targs.alignment = targs.minlen = targs.prod = 1; 2714 targs.type = XFS_ALLOCTYPE_THIS_AG; 2715 targs.pag = pag; 2716 error = xfs_alloc_read_agfl(pag, tp, &agflbp); 2717 if (error) 2718 goto out_agbp_relse; 2719 2720 /* Make the freelist longer if it's too short. */ 2721 while (pag->pagf_flcount < need) { 2722 targs.agbno = 0; 2723 targs.maxlen = need - pag->pagf_flcount; 2724 targs.resv = XFS_AG_RESV_AGFL; 2725 2726 /* Allocate as many blocks as possible at once. */ 2727 error = xfs_alloc_ag_vextent(&targs); 2728 if (error) 2729 goto out_agflbp_relse; 2730 2731 /* 2732 * Stop if we run out. Won't happen if callers are obeying 2733 * the restrictions correctly. Can happen for free calls 2734 * on a completely full ag. 2735 */ 2736 if (targs.agbno == NULLAGBLOCK) { 2737 if (flags & XFS_ALLOC_FLAG_FREEING) 2738 break; 2739 goto out_agflbp_relse; 2740 } 2741 /* 2742 * Put each allocated block on the list. 2743 */ 2744 for (bno = targs.agbno; bno < targs.agbno + targs.len; bno++) { 2745 error = xfs_alloc_put_freelist(pag, tp, agbp, 2746 agflbp, bno, 0); 2747 if (error) 2748 goto out_agflbp_relse; 2749 } 2750 } 2751 xfs_trans_brelse(tp, agflbp); 2752 args->agbp = agbp; 2753 return 0; 2754 2755 out_agflbp_relse: 2756 xfs_trans_brelse(tp, agflbp); 2757 out_agbp_relse: 2758 if (agbp) 2759 xfs_trans_brelse(tp, agbp); 2760 out_no_agbp: 2761 args->agbp = NULL; 2762 return error; 2763 } 2764 2765 /* 2766 * Get a block from the freelist. 2767 * Returns with the buffer for the block gotten. 2768 */ 2769 int 2770 xfs_alloc_get_freelist( 2771 struct xfs_perag *pag, 2772 struct xfs_trans *tp, 2773 struct xfs_buf *agbp, 2774 xfs_agblock_t *bnop, 2775 int btreeblk) 2776 { 2777 struct xfs_agf *agf = agbp->b_addr; 2778 struct xfs_buf *agflbp; 2779 xfs_agblock_t bno; 2780 __be32 *agfl_bno; 2781 int error; 2782 uint32_t logflags; 2783 struct xfs_mount *mp = tp->t_mountp; 2784 2785 /* 2786 * Freelist is empty, give up. 2787 */ 2788 if (!agf->agf_flcount) { 2789 *bnop = NULLAGBLOCK; 2790 return 0; 2791 } 2792 /* 2793 * Read the array of free blocks. 2794 */ 2795 error = xfs_alloc_read_agfl(pag, tp, &agflbp); 2796 if (error) 2797 return error; 2798 2799 2800 /* 2801 * Get the block number and update the data structures. 2802 */ 2803 agfl_bno = xfs_buf_to_agfl_bno(agflbp); 2804 bno = be32_to_cpu(agfl_bno[be32_to_cpu(agf->agf_flfirst)]); 2805 be32_add_cpu(&agf->agf_flfirst, 1); 2806 xfs_trans_brelse(tp, agflbp); 2807 if (be32_to_cpu(agf->agf_flfirst) == xfs_agfl_size(mp)) 2808 agf->agf_flfirst = 0; 2809 2810 ASSERT(!pag->pagf_agflreset); 2811 be32_add_cpu(&agf->agf_flcount, -1); 2812 pag->pagf_flcount--; 2813 2814 logflags = XFS_AGF_FLFIRST | XFS_AGF_FLCOUNT; 2815 if (btreeblk) { 2816 be32_add_cpu(&agf->agf_btreeblks, 1); 2817 pag->pagf_btreeblks++; 2818 logflags |= XFS_AGF_BTREEBLKS; 2819 } 2820 2821 xfs_alloc_log_agf(tp, agbp, logflags); 2822 *bnop = bno; 2823 2824 return 0; 2825 } 2826 2827 /* 2828 * Log the given fields from the agf structure. 2829 */ 2830 void 2831 xfs_alloc_log_agf( 2832 struct xfs_trans *tp, 2833 struct xfs_buf *bp, 2834 uint32_t fields) 2835 { 2836 int first; /* first byte offset */ 2837 int last; /* last byte offset */ 2838 static const short offsets[] = { 2839 offsetof(xfs_agf_t, agf_magicnum), 2840 offsetof(xfs_agf_t, agf_versionnum), 2841 offsetof(xfs_agf_t, agf_seqno), 2842 offsetof(xfs_agf_t, agf_length), 2843 offsetof(xfs_agf_t, agf_roots[0]), 2844 offsetof(xfs_agf_t, agf_levels[0]), 2845 offsetof(xfs_agf_t, agf_flfirst), 2846 offsetof(xfs_agf_t, agf_fllast), 2847 offsetof(xfs_agf_t, agf_flcount), 2848 offsetof(xfs_agf_t, agf_freeblks), 2849 offsetof(xfs_agf_t, agf_longest), 2850 offsetof(xfs_agf_t, agf_btreeblks), 2851 offsetof(xfs_agf_t, agf_uuid), 2852 offsetof(xfs_agf_t, agf_rmap_blocks), 2853 offsetof(xfs_agf_t, agf_refcount_blocks), 2854 offsetof(xfs_agf_t, agf_refcount_root), 2855 offsetof(xfs_agf_t, agf_refcount_level), 2856 /* needed so that we don't log the whole rest of the structure: */ 2857 offsetof(xfs_agf_t, agf_spare64), 2858 sizeof(xfs_agf_t) 2859 }; 2860 2861 trace_xfs_agf(tp->t_mountp, bp->b_addr, fields, _RET_IP_); 2862 2863 xfs_trans_buf_set_type(tp, bp, XFS_BLFT_AGF_BUF); 2864 2865 xfs_btree_offsets(fields, offsets, XFS_AGF_NUM_BITS, &first, &last); 2866 xfs_trans_log_buf(tp, bp, (uint)first, (uint)last); 2867 } 2868 2869 /* 2870 * Put the block on the freelist for the allocation group. 2871 */ 2872 int 2873 xfs_alloc_put_freelist( 2874 struct xfs_perag *pag, 2875 struct xfs_trans *tp, 2876 struct xfs_buf *agbp, 2877 struct xfs_buf *agflbp, 2878 xfs_agblock_t bno, 2879 int btreeblk) 2880 { 2881 struct xfs_mount *mp = tp->t_mountp; 2882 struct xfs_agf *agf = agbp->b_addr; 2883 __be32 *blockp; 2884 int error; 2885 uint32_t logflags; 2886 __be32 *agfl_bno; 2887 int startoff; 2888 2889 if (!agflbp) { 2890 error = xfs_alloc_read_agfl(pag, tp, &agflbp); 2891 if (error) 2892 return error; 2893 } 2894 2895 be32_add_cpu(&agf->agf_fllast, 1); 2896 if (be32_to_cpu(agf->agf_fllast) == xfs_agfl_size(mp)) 2897 agf->agf_fllast = 0; 2898 2899 ASSERT(!pag->pagf_agflreset); 2900 be32_add_cpu(&agf->agf_flcount, 1); 2901 pag->pagf_flcount++; 2902 2903 logflags = XFS_AGF_FLLAST | XFS_AGF_FLCOUNT; 2904 if (btreeblk) { 2905 be32_add_cpu(&agf->agf_btreeblks, -1); 2906 pag->pagf_btreeblks--; 2907 logflags |= XFS_AGF_BTREEBLKS; 2908 } 2909 2910 xfs_alloc_log_agf(tp, agbp, logflags); 2911 2912 ASSERT(be32_to_cpu(agf->agf_flcount) <= xfs_agfl_size(mp)); 2913 2914 agfl_bno = xfs_buf_to_agfl_bno(agflbp); 2915 blockp = &agfl_bno[be32_to_cpu(agf->agf_fllast)]; 2916 *blockp = cpu_to_be32(bno); 2917 startoff = (char *)blockp - (char *)agflbp->b_addr; 2918 2919 xfs_alloc_log_agf(tp, agbp, logflags); 2920 2921 xfs_trans_buf_set_type(tp, agflbp, XFS_BLFT_AGFL_BUF); 2922 xfs_trans_log_buf(tp, agflbp, startoff, 2923 startoff + sizeof(xfs_agblock_t) - 1); 2924 return 0; 2925 } 2926 2927 static xfs_failaddr_t 2928 xfs_agf_verify( 2929 struct xfs_buf *bp) 2930 { 2931 struct xfs_mount *mp = bp->b_mount; 2932 struct xfs_agf *agf = bp->b_addr; 2933 2934 if (xfs_has_crc(mp)) { 2935 if (!uuid_equal(&agf->agf_uuid, &mp->m_sb.sb_meta_uuid)) 2936 return __this_address; 2937 if (!xfs_log_check_lsn(mp, be64_to_cpu(agf->agf_lsn))) 2938 return __this_address; 2939 } 2940 2941 if (!xfs_verify_magic(bp, agf->agf_magicnum)) 2942 return __this_address; 2943 2944 if (!(XFS_AGF_GOOD_VERSION(be32_to_cpu(agf->agf_versionnum)) && 2945 be32_to_cpu(agf->agf_freeblks) <= be32_to_cpu(agf->agf_length) && 2946 be32_to_cpu(agf->agf_flfirst) < xfs_agfl_size(mp) && 2947 be32_to_cpu(agf->agf_fllast) < xfs_agfl_size(mp) && 2948 be32_to_cpu(agf->agf_flcount) <= xfs_agfl_size(mp))) 2949 return __this_address; 2950 2951 if (be32_to_cpu(agf->agf_length) > mp->m_sb.sb_dblocks) 2952 return __this_address; 2953 2954 if (be32_to_cpu(agf->agf_freeblks) < be32_to_cpu(agf->agf_longest) || 2955 be32_to_cpu(agf->agf_freeblks) > be32_to_cpu(agf->agf_length)) 2956 return __this_address; 2957 2958 if (be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]) < 1 || 2959 be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]) < 1 || 2960 be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]) > 2961 mp->m_alloc_maxlevels || 2962 be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]) > 2963 mp->m_alloc_maxlevels) 2964 return __this_address; 2965 2966 if (xfs_has_rmapbt(mp) && 2967 (be32_to_cpu(agf->agf_levels[XFS_BTNUM_RMAP]) < 1 || 2968 be32_to_cpu(agf->agf_levels[XFS_BTNUM_RMAP]) > 2969 mp->m_rmap_maxlevels)) 2970 return __this_address; 2971 2972 if (xfs_has_rmapbt(mp) && 2973 be32_to_cpu(agf->agf_rmap_blocks) > be32_to_cpu(agf->agf_length)) 2974 return __this_address; 2975 2976 /* 2977 * during growfs operations, the perag is not fully initialised, 2978 * so we can't use it for any useful checking. growfs ensures we can't 2979 * use it by using uncached buffers that don't have the perag attached 2980 * so we can detect and avoid this problem. 2981 */ 2982 if (bp->b_pag && be32_to_cpu(agf->agf_seqno) != bp->b_pag->pag_agno) 2983 return __this_address; 2984 2985 if (xfs_has_lazysbcount(mp) && 2986 be32_to_cpu(agf->agf_btreeblks) > be32_to_cpu(agf->agf_length)) 2987 return __this_address; 2988 2989 if (xfs_has_reflink(mp) && 2990 be32_to_cpu(agf->agf_refcount_blocks) > 2991 be32_to_cpu(agf->agf_length)) 2992 return __this_address; 2993 2994 if (xfs_has_reflink(mp) && 2995 (be32_to_cpu(agf->agf_refcount_level) < 1 || 2996 be32_to_cpu(agf->agf_refcount_level) > mp->m_refc_maxlevels)) 2997 return __this_address; 2998 2999 return NULL; 3000 3001 } 3002 3003 static void 3004 xfs_agf_read_verify( 3005 struct xfs_buf *bp) 3006 { 3007 struct xfs_mount *mp = bp->b_mount; 3008 xfs_failaddr_t fa; 3009 3010 if (xfs_has_crc(mp) && 3011 !xfs_buf_verify_cksum(bp, XFS_AGF_CRC_OFF)) 3012 xfs_verifier_error(bp, -EFSBADCRC, __this_address); 3013 else { 3014 fa = xfs_agf_verify(bp); 3015 if (XFS_TEST_ERROR(fa, mp, XFS_ERRTAG_ALLOC_READ_AGF)) 3016 xfs_verifier_error(bp, -EFSCORRUPTED, fa); 3017 } 3018 } 3019 3020 static void 3021 xfs_agf_write_verify( 3022 struct xfs_buf *bp) 3023 { 3024 struct xfs_mount *mp = bp->b_mount; 3025 struct xfs_buf_log_item *bip = bp->b_log_item; 3026 struct xfs_agf *agf = bp->b_addr; 3027 xfs_failaddr_t fa; 3028 3029 fa = xfs_agf_verify(bp); 3030 if (fa) { 3031 xfs_verifier_error(bp, -EFSCORRUPTED, fa); 3032 return; 3033 } 3034 3035 if (!xfs_has_crc(mp)) 3036 return; 3037 3038 if (bip) 3039 agf->agf_lsn = cpu_to_be64(bip->bli_item.li_lsn); 3040 3041 xfs_buf_update_cksum(bp, XFS_AGF_CRC_OFF); 3042 } 3043 3044 const struct xfs_buf_ops xfs_agf_buf_ops = { 3045 .name = "xfs_agf", 3046 .magic = { cpu_to_be32(XFS_AGF_MAGIC), cpu_to_be32(XFS_AGF_MAGIC) }, 3047 .verify_read = xfs_agf_read_verify, 3048 .verify_write = xfs_agf_write_verify, 3049 .verify_struct = xfs_agf_verify, 3050 }; 3051 3052 /* 3053 * Read in the allocation group header (free/alloc section). 3054 */ 3055 int 3056 xfs_read_agf( 3057 struct xfs_perag *pag, 3058 struct xfs_trans *tp, 3059 int flags, 3060 struct xfs_buf **agfbpp) 3061 { 3062 struct xfs_mount *mp = pag->pag_mount; 3063 int error; 3064 3065 trace_xfs_read_agf(pag->pag_mount, pag->pag_agno); 3066 3067 error = xfs_trans_read_buf(mp, tp, mp->m_ddev_targp, 3068 XFS_AG_DADDR(mp, pag->pag_agno, XFS_AGF_DADDR(mp)), 3069 XFS_FSS_TO_BB(mp, 1), flags, agfbpp, &xfs_agf_buf_ops); 3070 if (error) 3071 return error; 3072 3073 xfs_buf_set_ref(*agfbpp, XFS_AGF_REF); 3074 return 0; 3075 } 3076 3077 /* 3078 * Read in the allocation group header (free/alloc section) and initialise the 3079 * perag structure if necessary. If the caller provides @agfbpp, then return the 3080 * locked buffer to the caller, otherwise free it. 3081 */ 3082 int 3083 xfs_alloc_read_agf( 3084 struct xfs_perag *pag, 3085 struct xfs_trans *tp, 3086 int flags, 3087 struct xfs_buf **agfbpp) 3088 { 3089 struct xfs_buf *agfbp; 3090 struct xfs_agf *agf; 3091 int error; 3092 int allocbt_blks; 3093 3094 trace_xfs_alloc_read_agf(pag->pag_mount, pag->pag_agno); 3095 3096 /* We don't support trylock when freeing. */ 3097 ASSERT((flags & (XFS_ALLOC_FLAG_FREEING | XFS_ALLOC_FLAG_TRYLOCK)) != 3098 (XFS_ALLOC_FLAG_FREEING | XFS_ALLOC_FLAG_TRYLOCK)); 3099 error = xfs_read_agf(pag, tp, 3100 (flags & XFS_ALLOC_FLAG_TRYLOCK) ? XBF_TRYLOCK : 0, 3101 &agfbp); 3102 if (error) 3103 return error; 3104 3105 agf = agfbp->b_addr; 3106 if (!pag->pagf_init) { 3107 pag->pagf_freeblks = be32_to_cpu(agf->agf_freeblks); 3108 pag->pagf_btreeblks = be32_to_cpu(agf->agf_btreeblks); 3109 pag->pagf_flcount = be32_to_cpu(agf->agf_flcount); 3110 pag->pagf_longest = be32_to_cpu(agf->agf_longest); 3111 pag->pagf_levels[XFS_BTNUM_BNOi] = 3112 be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNOi]); 3113 pag->pagf_levels[XFS_BTNUM_CNTi] = 3114 be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNTi]); 3115 pag->pagf_levels[XFS_BTNUM_RMAPi] = 3116 be32_to_cpu(agf->agf_levels[XFS_BTNUM_RMAPi]); 3117 pag->pagf_refcount_level = be32_to_cpu(agf->agf_refcount_level); 3118 pag->pagf_init = 1; 3119 pag->pagf_agflreset = xfs_agfl_needs_reset(pag->pag_mount, agf); 3120 3121 /* 3122 * Update the in-core allocbt counter. Filter out the rmapbt 3123 * subset of the btreeblks counter because the rmapbt is managed 3124 * by perag reservation. Subtract one for the rmapbt root block 3125 * because the rmap counter includes it while the btreeblks 3126 * counter only tracks non-root blocks. 3127 */ 3128 allocbt_blks = pag->pagf_btreeblks; 3129 if (xfs_has_rmapbt(pag->pag_mount)) 3130 allocbt_blks -= be32_to_cpu(agf->agf_rmap_blocks) - 1; 3131 if (allocbt_blks > 0) 3132 atomic64_add(allocbt_blks, 3133 &pag->pag_mount->m_allocbt_blks); 3134 } 3135 #ifdef DEBUG 3136 else if (!xfs_is_shutdown(pag->pag_mount)) { 3137 ASSERT(pag->pagf_freeblks == be32_to_cpu(agf->agf_freeblks)); 3138 ASSERT(pag->pagf_btreeblks == be32_to_cpu(agf->agf_btreeblks)); 3139 ASSERT(pag->pagf_flcount == be32_to_cpu(agf->agf_flcount)); 3140 ASSERT(pag->pagf_longest == be32_to_cpu(agf->agf_longest)); 3141 ASSERT(pag->pagf_levels[XFS_BTNUM_BNOi] == 3142 be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNOi])); 3143 ASSERT(pag->pagf_levels[XFS_BTNUM_CNTi] == 3144 be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNTi])); 3145 } 3146 #endif 3147 if (agfbpp) 3148 *agfbpp = agfbp; 3149 else 3150 xfs_trans_brelse(tp, agfbp); 3151 return 0; 3152 } 3153 3154 /* 3155 * Allocate an extent (variable-size). 3156 * Depending on the allocation type, we either look in a single allocation 3157 * group or loop over the allocation groups to find the result. 3158 */ 3159 int /* error */ 3160 xfs_alloc_vextent( 3161 struct xfs_alloc_arg *args) /* allocation argument structure */ 3162 { 3163 xfs_agblock_t agsize; /* allocation group size */ 3164 int error; 3165 int flags; /* XFS_ALLOC_FLAG_... locking flags */ 3166 struct xfs_mount *mp; /* mount structure pointer */ 3167 xfs_agnumber_t sagno; /* starting allocation group number */ 3168 xfs_alloctype_t type; /* input allocation type */ 3169 int bump_rotor = 0; 3170 xfs_agnumber_t rotorstep = xfs_rotorstep; /* inode32 agf stepper */ 3171 3172 mp = args->mp; 3173 type = args->otype = args->type; 3174 args->agbno = NULLAGBLOCK; 3175 /* 3176 * Just fix this up, for the case where the last a.g. is shorter 3177 * (or there's only one a.g.) and the caller couldn't easily figure 3178 * that out (xfs_bmap_alloc). 3179 */ 3180 agsize = mp->m_sb.sb_agblocks; 3181 if (args->maxlen > agsize) 3182 args->maxlen = agsize; 3183 if (args->alignment == 0) 3184 args->alignment = 1; 3185 ASSERT(XFS_FSB_TO_AGNO(mp, args->fsbno) < mp->m_sb.sb_agcount); 3186 ASSERT(XFS_FSB_TO_AGBNO(mp, args->fsbno) < agsize); 3187 ASSERT(args->minlen <= args->maxlen); 3188 ASSERT(args->minlen <= agsize); 3189 ASSERT(args->mod < args->prod); 3190 if (XFS_FSB_TO_AGNO(mp, args->fsbno) >= mp->m_sb.sb_agcount || 3191 XFS_FSB_TO_AGBNO(mp, args->fsbno) >= agsize || 3192 args->minlen > args->maxlen || args->minlen > agsize || 3193 args->mod >= args->prod) { 3194 args->fsbno = NULLFSBLOCK; 3195 trace_xfs_alloc_vextent_badargs(args); 3196 return 0; 3197 } 3198 3199 switch (type) { 3200 case XFS_ALLOCTYPE_THIS_AG: 3201 case XFS_ALLOCTYPE_NEAR_BNO: 3202 case XFS_ALLOCTYPE_THIS_BNO: 3203 /* 3204 * These three force us into a single a.g. 3205 */ 3206 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); 3207 args->pag = xfs_perag_get(mp, args->agno); 3208 error = xfs_alloc_fix_freelist(args, 0); 3209 if (error) { 3210 trace_xfs_alloc_vextent_nofix(args); 3211 goto error0; 3212 } 3213 if (!args->agbp) { 3214 trace_xfs_alloc_vextent_noagbp(args); 3215 break; 3216 } 3217 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); 3218 if ((error = xfs_alloc_ag_vextent(args))) 3219 goto error0; 3220 break; 3221 case XFS_ALLOCTYPE_START_BNO: 3222 /* 3223 * Try near allocation first, then anywhere-in-ag after 3224 * the first a.g. fails. 3225 */ 3226 if ((args->datatype & XFS_ALLOC_INITIAL_USER_DATA) && 3227 xfs_is_inode32(mp)) { 3228 args->fsbno = XFS_AGB_TO_FSB(mp, 3229 ((mp->m_agfrotor / rotorstep) % 3230 mp->m_sb.sb_agcount), 0); 3231 bump_rotor = 1; 3232 } 3233 args->agbno = XFS_FSB_TO_AGBNO(mp, args->fsbno); 3234 args->type = XFS_ALLOCTYPE_NEAR_BNO; 3235 fallthrough; 3236 case XFS_ALLOCTYPE_FIRST_AG: 3237 /* 3238 * Rotate through the allocation groups looking for a winner. 3239 */ 3240 if (type == XFS_ALLOCTYPE_FIRST_AG) { 3241 /* 3242 * Start with allocation group given by bno. 3243 */ 3244 args->agno = XFS_FSB_TO_AGNO(mp, args->fsbno); 3245 args->type = XFS_ALLOCTYPE_THIS_AG; 3246 sagno = 0; 3247 flags = 0; 3248 } else { 3249 /* 3250 * Start with the given allocation group. 3251 */ 3252 args->agno = sagno = XFS_FSB_TO_AGNO(mp, args->fsbno); 3253 flags = XFS_ALLOC_FLAG_TRYLOCK; 3254 } 3255 /* 3256 * Loop over allocation groups twice; first time with 3257 * trylock set, second time without. 3258 */ 3259 for (;;) { 3260 args->pag = xfs_perag_get(mp, args->agno); 3261 error = xfs_alloc_fix_freelist(args, flags); 3262 if (error) { 3263 trace_xfs_alloc_vextent_nofix(args); 3264 goto error0; 3265 } 3266 /* 3267 * If we get a buffer back then the allocation will fly. 3268 */ 3269 if (args->agbp) { 3270 if ((error = xfs_alloc_ag_vextent(args))) 3271 goto error0; 3272 break; 3273 } 3274 3275 trace_xfs_alloc_vextent_loopfailed(args); 3276 3277 /* 3278 * Didn't work, figure out the next iteration. 3279 */ 3280 if (args->agno == sagno && 3281 type == XFS_ALLOCTYPE_START_BNO) 3282 args->type = XFS_ALLOCTYPE_THIS_AG; 3283 /* 3284 * For the first allocation, we can try any AG to get 3285 * space. However, if we already have allocated a 3286 * block, we don't want to try AGs whose number is below 3287 * sagno. Otherwise, we may end up with out-of-order 3288 * locking of AGF, which might cause deadlock. 3289 */ 3290 if (++(args->agno) == mp->m_sb.sb_agcount) { 3291 if (args->tp->t_firstblock != NULLFSBLOCK) 3292 args->agno = sagno; 3293 else 3294 args->agno = 0; 3295 } 3296 /* 3297 * Reached the starting a.g., must either be done 3298 * or switch to non-trylock mode. 3299 */ 3300 if (args->agno == sagno) { 3301 if (flags == 0) { 3302 args->agbno = NULLAGBLOCK; 3303 trace_xfs_alloc_vextent_allfailed(args); 3304 break; 3305 } 3306 3307 flags = 0; 3308 if (type == XFS_ALLOCTYPE_START_BNO) { 3309 args->agbno = XFS_FSB_TO_AGBNO(mp, 3310 args->fsbno); 3311 args->type = XFS_ALLOCTYPE_NEAR_BNO; 3312 } 3313 } 3314 xfs_perag_put(args->pag); 3315 } 3316 if (bump_rotor) { 3317 if (args->agno == sagno) 3318 mp->m_agfrotor = (mp->m_agfrotor + 1) % 3319 (mp->m_sb.sb_agcount * rotorstep); 3320 else 3321 mp->m_agfrotor = (args->agno * rotorstep + 1) % 3322 (mp->m_sb.sb_agcount * rotorstep); 3323 } 3324 break; 3325 default: 3326 ASSERT(0); 3327 /* NOTREACHED */ 3328 } 3329 if (args->agbno == NULLAGBLOCK) 3330 args->fsbno = NULLFSBLOCK; 3331 else { 3332 args->fsbno = XFS_AGB_TO_FSB(mp, args->agno, args->agbno); 3333 #ifdef DEBUG 3334 ASSERT(args->len >= args->minlen); 3335 ASSERT(args->len <= args->maxlen); 3336 ASSERT(args->agbno % args->alignment == 0); 3337 XFS_AG_CHECK_DADDR(mp, XFS_FSB_TO_DADDR(mp, args->fsbno), 3338 args->len); 3339 #endif 3340 3341 } 3342 xfs_perag_put(args->pag); 3343 return 0; 3344 error0: 3345 xfs_perag_put(args->pag); 3346 return error; 3347 } 3348 3349 /* Ensure that the freelist is at full capacity. */ 3350 int 3351 xfs_free_extent_fix_freelist( 3352 struct xfs_trans *tp, 3353 struct xfs_perag *pag, 3354 struct xfs_buf **agbp) 3355 { 3356 struct xfs_alloc_arg args; 3357 int error; 3358 3359 memset(&args, 0, sizeof(struct xfs_alloc_arg)); 3360 args.tp = tp; 3361 args.mp = tp->t_mountp; 3362 args.agno = pag->pag_agno; 3363 args.pag = pag; 3364 3365 /* 3366 * validate that the block number is legal - the enables us to detect 3367 * and handle a silent filesystem corruption rather than crashing. 3368 */ 3369 if (args.agno >= args.mp->m_sb.sb_agcount) 3370 return -EFSCORRUPTED; 3371 3372 error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING); 3373 if (error) 3374 return error; 3375 3376 *agbp = args.agbp; 3377 return 0; 3378 } 3379 3380 /* 3381 * Free an extent. 3382 * Just break up the extent address and hand off to xfs_free_ag_extent 3383 * after fixing up the freelist. 3384 */ 3385 int 3386 __xfs_free_extent( 3387 struct xfs_trans *tp, 3388 xfs_fsblock_t bno, 3389 xfs_extlen_t len, 3390 const struct xfs_owner_info *oinfo, 3391 enum xfs_ag_resv_type type, 3392 bool skip_discard) 3393 { 3394 struct xfs_mount *mp = tp->t_mountp; 3395 struct xfs_buf *agbp; 3396 xfs_agnumber_t agno = XFS_FSB_TO_AGNO(mp, bno); 3397 xfs_agblock_t agbno = XFS_FSB_TO_AGBNO(mp, bno); 3398 struct xfs_agf *agf; 3399 int error; 3400 unsigned int busy_flags = 0; 3401 struct xfs_perag *pag; 3402 3403 ASSERT(len != 0); 3404 ASSERT(type != XFS_AG_RESV_AGFL); 3405 3406 if (XFS_TEST_ERROR(false, mp, 3407 XFS_ERRTAG_FREE_EXTENT)) 3408 return -EIO; 3409 3410 pag = xfs_perag_get(mp, agno); 3411 error = xfs_free_extent_fix_freelist(tp, pag, &agbp); 3412 if (error) 3413 goto err; 3414 agf = agbp->b_addr; 3415 3416 if (XFS_IS_CORRUPT(mp, agbno >= mp->m_sb.sb_agblocks)) { 3417 error = -EFSCORRUPTED; 3418 goto err_release; 3419 } 3420 3421 /* validate the extent size is legal now we have the agf locked */ 3422 if (XFS_IS_CORRUPT(mp, agbno + len > be32_to_cpu(agf->agf_length))) { 3423 error = -EFSCORRUPTED; 3424 goto err_release; 3425 } 3426 3427 error = xfs_free_ag_extent(tp, agbp, agno, agbno, len, oinfo, type); 3428 if (error) 3429 goto err_release; 3430 3431 if (skip_discard) 3432 busy_flags |= XFS_EXTENT_BUSY_SKIP_DISCARD; 3433 xfs_extent_busy_insert(tp, pag, agbno, len, busy_flags); 3434 xfs_perag_put(pag); 3435 return 0; 3436 3437 err_release: 3438 xfs_trans_brelse(tp, agbp); 3439 err: 3440 xfs_perag_put(pag); 3441 return error; 3442 } 3443 3444 struct xfs_alloc_query_range_info { 3445 xfs_alloc_query_range_fn fn; 3446 void *priv; 3447 }; 3448 3449 /* Format btree record and pass to our callback. */ 3450 STATIC int 3451 xfs_alloc_query_range_helper( 3452 struct xfs_btree_cur *cur, 3453 const union xfs_btree_rec *rec, 3454 void *priv) 3455 { 3456 struct xfs_alloc_query_range_info *query = priv; 3457 struct xfs_alloc_rec_incore irec; 3458 3459 irec.ar_startblock = be32_to_cpu(rec->alloc.ar_startblock); 3460 irec.ar_blockcount = be32_to_cpu(rec->alloc.ar_blockcount); 3461 return query->fn(cur, &irec, query->priv); 3462 } 3463 3464 /* Find all free space within a given range of blocks. */ 3465 int 3466 xfs_alloc_query_range( 3467 struct xfs_btree_cur *cur, 3468 const struct xfs_alloc_rec_incore *low_rec, 3469 const struct xfs_alloc_rec_incore *high_rec, 3470 xfs_alloc_query_range_fn fn, 3471 void *priv) 3472 { 3473 union xfs_btree_irec low_brec; 3474 union xfs_btree_irec high_brec; 3475 struct xfs_alloc_query_range_info query; 3476 3477 ASSERT(cur->bc_btnum == XFS_BTNUM_BNO); 3478 low_brec.a = *low_rec; 3479 high_brec.a = *high_rec; 3480 query.priv = priv; 3481 query.fn = fn; 3482 return xfs_btree_query_range(cur, &low_brec, &high_brec, 3483 xfs_alloc_query_range_helper, &query); 3484 } 3485 3486 /* Find all free space records. */ 3487 int 3488 xfs_alloc_query_all( 3489 struct xfs_btree_cur *cur, 3490 xfs_alloc_query_range_fn fn, 3491 void *priv) 3492 { 3493 struct xfs_alloc_query_range_info query; 3494 3495 ASSERT(cur->bc_btnum == XFS_BTNUM_BNO); 3496 query.priv = priv; 3497 query.fn = fn; 3498 return xfs_btree_query_all(cur, xfs_alloc_query_range_helper, &query); 3499 } 3500 3501 /* Is there a record covering a given extent? */ 3502 int 3503 xfs_alloc_has_record( 3504 struct xfs_btree_cur *cur, 3505 xfs_agblock_t bno, 3506 xfs_extlen_t len, 3507 bool *exists) 3508 { 3509 union xfs_btree_irec low; 3510 union xfs_btree_irec high; 3511 3512 memset(&low, 0, sizeof(low)); 3513 low.a.ar_startblock = bno; 3514 memset(&high, 0xFF, sizeof(high)); 3515 high.a.ar_startblock = bno + len - 1; 3516 3517 return xfs_btree_has_record(cur, &low, &high, exists); 3518 } 3519 3520 /* 3521 * Walk all the blocks in the AGFL. The @walk_fn can return any negative 3522 * error code or XFS_ITER_*. 3523 */ 3524 int 3525 xfs_agfl_walk( 3526 struct xfs_mount *mp, 3527 struct xfs_agf *agf, 3528 struct xfs_buf *agflbp, 3529 xfs_agfl_walk_fn walk_fn, 3530 void *priv) 3531 { 3532 __be32 *agfl_bno; 3533 unsigned int i; 3534 int error; 3535 3536 agfl_bno = xfs_buf_to_agfl_bno(agflbp); 3537 i = be32_to_cpu(agf->agf_flfirst); 3538 3539 /* Nothing to walk in an empty AGFL. */ 3540 if (agf->agf_flcount == cpu_to_be32(0)) 3541 return 0; 3542 3543 /* Otherwise, walk from first to last, wrapping as needed. */ 3544 for (;;) { 3545 error = walk_fn(mp, be32_to_cpu(agfl_bno[i]), priv); 3546 if (error) 3547 return error; 3548 if (i == be32_to_cpu(agf->agf_fllast)) 3549 break; 3550 if (++i == xfs_agfl_size(mp)) 3551 i = 0; 3552 } 3553 3554 return 0; 3555 } 3556 3557 int __init 3558 xfs_extfree_intent_init_cache(void) 3559 { 3560 xfs_extfree_item_cache = kmem_cache_create("xfs_extfree_intent", 3561 sizeof(struct xfs_extent_free_item), 3562 0, 0, NULL); 3563 3564 return xfs_extfree_item_cache != NULL ? 0 : -ENOMEM; 3565 } 3566 3567 void 3568 xfs_extfree_intent_destroy_cache(void) 3569 { 3570 kmem_cache_destroy(xfs_extfree_item_cache); 3571 xfs_extfree_item_cache = NULL; 3572 } 3573