1 /* 2 * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc. 3 * All Rights Reserved. 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it would be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write the Free Software Foundation, 16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18 #include "xfs.h" 19 #include "xfs_fs.h" 20 #include "xfs_types.h" 21 #include "xfs_bit.h" 22 #include "xfs_log.h" 23 #include "xfs_inum.h" 24 #include "xfs_trans.h" 25 #include "xfs_sb.h" 26 #include "xfs_ag.h" 27 #include "xfs_dir2.h" 28 #include "xfs_dmapi.h" 29 #include "xfs_mount.h" 30 #include "xfs_bmap_btree.h" 31 #include "xfs_alloc_btree.h" 32 #include "xfs_ialloc_btree.h" 33 #include "xfs_dir2_sf.h" 34 #include "xfs_attr_sf.h" 35 #include "xfs_dinode.h" 36 #include "xfs_inode.h" 37 #include "xfs_buf_item.h" 38 #include "xfs_trans_priv.h" 39 #include "xfs_error.h" 40 #include "xfs_rw.h" 41 #include "xfs_trace.h" 42 43 44 STATIC xfs_buf_t *xfs_trans_buf_item_match(xfs_trans_t *, xfs_buftarg_t *, 45 xfs_daddr_t, int); 46 STATIC xfs_buf_t *xfs_trans_buf_item_match_all(xfs_trans_t *, xfs_buftarg_t *, 47 xfs_daddr_t, int); 48 49 50 /* 51 * Get and lock the buffer for the caller if it is not already 52 * locked within the given transaction. If it is already locked 53 * within the transaction, just increment its lock recursion count 54 * and return a pointer to it. 55 * 56 * Use the fast path function xfs_trans_buf_item_match() or the buffer 57 * cache routine incore_match() to find the buffer 58 * if it is already owned by this transaction. 59 * 60 * If we don't already own the buffer, use get_buf() to get it. 61 * If it doesn't yet have an associated xfs_buf_log_item structure, 62 * then allocate one and add the item to this transaction. 63 * 64 * If the transaction pointer is NULL, make this just a normal 65 * get_buf() call. 66 */ 67 xfs_buf_t * 68 xfs_trans_get_buf(xfs_trans_t *tp, 69 xfs_buftarg_t *target_dev, 70 xfs_daddr_t blkno, 71 int len, 72 uint flags) 73 { 74 xfs_buf_t *bp; 75 xfs_buf_log_item_t *bip; 76 77 if (flags == 0) 78 flags = XFS_BUF_LOCK | XFS_BUF_MAPPED; 79 80 /* 81 * Default to a normal get_buf() call if the tp is NULL. 82 */ 83 if (tp == NULL) 84 return xfs_buf_get(target_dev, blkno, len, flags | BUF_BUSY); 85 86 /* 87 * If we find the buffer in the cache with this transaction 88 * pointer in its b_fsprivate2 field, then we know we already 89 * have it locked. In this case we just increment the lock 90 * recursion count and return the buffer to the caller. 91 */ 92 if (tp->t_items.lic_next == NULL) { 93 bp = xfs_trans_buf_item_match(tp, target_dev, blkno, len); 94 } else { 95 bp = xfs_trans_buf_item_match_all(tp, target_dev, blkno, len); 96 } 97 if (bp != NULL) { 98 ASSERT(XFS_BUF_VALUSEMA(bp) <= 0); 99 if (XFS_FORCED_SHUTDOWN(tp->t_mountp)) 100 XFS_BUF_SUPER_STALE(bp); 101 102 /* 103 * If the buffer is stale then it was binval'ed 104 * since last read. This doesn't matter since the 105 * caller isn't allowed to use the data anyway. 106 */ 107 else if (XFS_BUF_ISSTALE(bp)) 108 ASSERT(!XFS_BUF_ISDELAYWRITE(bp)); 109 110 ASSERT(XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp); 111 bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *); 112 ASSERT(bip != NULL); 113 ASSERT(atomic_read(&bip->bli_refcount) > 0); 114 bip->bli_recur++; 115 trace_xfs_trans_get_buf_recur(bip); 116 return (bp); 117 } 118 119 /* 120 * We always specify the BUF_BUSY flag within a transaction so 121 * that get_buf does not try to push out a delayed write buffer 122 * which might cause another transaction to take place (if the 123 * buffer was delayed alloc). Such recursive transactions can 124 * easily deadlock with our current transaction as well as cause 125 * us to run out of stack space. 126 */ 127 bp = xfs_buf_get(target_dev, blkno, len, flags | BUF_BUSY); 128 if (bp == NULL) { 129 return NULL; 130 } 131 132 ASSERT(!XFS_BUF_GETERROR(bp)); 133 134 /* 135 * The xfs_buf_log_item pointer is stored in b_fsprivate. If 136 * it doesn't have one yet, then allocate one and initialize it. 137 * The checks to see if one is there are in xfs_buf_item_init(). 138 */ 139 xfs_buf_item_init(bp, tp->t_mountp); 140 141 /* 142 * Set the recursion count for the buffer within this transaction 143 * to 0. 144 */ 145 bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t*); 146 ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); 147 ASSERT(!(bip->bli_format.blf_flags & XFS_BLI_CANCEL)); 148 ASSERT(!(bip->bli_flags & XFS_BLI_LOGGED)); 149 bip->bli_recur = 0; 150 151 /* 152 * Take a reference for this transaction on the buf item. 153 */ 154 atomic_inc(&bip->bli_refcount); 155 156 /* 157 * Get a log_item_desc to point at the new item. 158 */ 159 (void) xfs_trans_add_item(tp, (xfs_log_item_t*)bip); 160 161 /* 162 * Initialize b_fsprivate2 so we can find it with incore_match() 163 * above. 164 */ 165 XFS_BUF_SET_FSPRIVATE2(bp, tp); 166 167 trace_xfs_trans_get_buf(bip); 168 return (bp); 169 } 170 171 /* 172 * Get and lock the superblock buffer of this file system for the 173 * given transaction. 174 * 175 * We don't need to use incore_match() here, because the superblock 176 * buffer is a private buffer which we keep a pointer to in the 177 * mount structure. 178 */ 179 xfs_buf_t * 180 xfs_trans_getsb(xfs_trans_t *tp, 181 struct xfs_mount *mp, 182 int flags) 183 { 184 xfs_buf_t *bp; 185 xfs_buf_log_item_t *bip; 186 187 /* 188 * Default to just trying to lock the superblock buffer 189 * if tp is NULL. 190 */ 191 if (tp == NULL) { 192 return (xfs_getsb(mp, flags)); 193 } 194 195 /* 196 * If the superblock buffer already has this transaction 197 * pointer in its b_fsprivate2 field, then we know we already 198 * have it locked. In this case we just increment the lock 199 * recursion count and return the buffer to the caller. 200 */ 201 bp = mp->m_sb_bp; 202 if (XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp) { 203 bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t*); 204 ASSERT(bip != NULL); 205 ASSERT(atomic_read(&bip->bli_refcount) > 0); 206 bip->bli_recur++; 207 trace_xfs_trans_getsb_recur(bip); 208 return (bp); 209 } 210 211 bp = xfs_getsb(mp, flags); 212 if (bp == NULL) { 213 return NULL; 214 } 215 216 /* 217 * The xfs_buf_log_item pointer is stored in b_fsprivate. If 218 * it doesn't have one yet, then allocate one and initialize it. 219 * The checks to see if one is there are in xfs_buf_item_init(). 220 */ 221 xfs_buf_item_init(bp, mp); 222 223 /* 224 * Set the recursion count for the buffer within this transaction 225 * to 0. 226 */ 227 bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t*); 228 ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); 229 ASSERT(!(bip->bli_format.blf_flags & XFS_BLI_CANCEL)); 230 ASSERT(!(bip->bli_flags & XFS_BLI_LOGGED)); 231 bip->bli_recur = 0; 232 233 /* 234 * Take a reference for this transaction on the buf item. 235 */ 236 atomic_inc(&bip->bli_refcount); 237 238 /* 239 * Get a log_item_desc to point at the new item. 240 */ 241 (void) xfs_trans_add_item(tp, (xfs_log_item_t*)bip); 242 243 /* 244 * Initialize b_fsprivate2 so we can find it with incore_match() 245 * above. 246 */ 247 XFS_BUF_SET_FSPRIVATE2(bp, tp); 248 249 trace_xfs_trans_getsb(bip); 250 return (bp); 251 } 252 253 #ifdef DEBUG 254 xfs_buftarg_t *xfs_error_target; 255 int xfs_do_error; 256 int xfs_req_num; 257 int xfs_error_mod = 33; 258 #endif 259 260 /* 261 * Get and lock the buffer for the caller if it is not already 262 * locked within the given transaction. If it has not yet been 263 * read in, read it from disk. If it is already locked 264 * within the transaction and already read in, just increment its 265 * lock recursion count and return a pointer to it. 266 * 267 * Use the fast path function xfs_trans_buf_item_match() or the buffer 268 * cache routine incore_match() to find the buffer 269 * if it is already owned by this transaction. 270 * 271 * If we don't already own the buffer, use read_buf() to get it. 272 * If it doesn't yet have an associated xfs_buf_log_item structure, 273 * then allocate one and add the item to this transaction. 274 * 275 * If the transaction pointer is NULL, make this just a normal 276 * read_buf() call. 277 */ 278 int 279 xfs_trans_read_buf( 280 xfs_mount_t *mp, 281 xfs_trans_t *tp, 282 xfs_buftarg_t *target, 283 xfs_daddr_t blkno, 284 int len, 285 uint flags, 286 xfs_buf_t **bpp) 287 { 288 xfs_buf_t *bp; 289 xfs_buf_log_item_t *bip; 290 int error; 291 292 if (flags == 0) 293 flags = XFS_BUF_LOCK | XFS_BUF_MAPPED; 294 295 /* 296 * Default to a normal get_buf() call if the tp is NULL. 297 */ 298 if (tp == NULL) { 299 bp = xfs_buf_read(target, blkno, len, flags | BUF_BUSY); 300 if (!bp) 301 return (flags & XFS_BUF_TRYLOCK) ? 302 EAGAIN : XFS_ERROR(ENOMEM); 303 304 if (XFS_BUF_GETERROR(bp) != 0) { 305 xfs_ioerror_alert("xfs_trans_read_buf", mp, 306 bp, blkno); 307 error = XFS_BUF_GETERROR(bp); 308 xfs_buf_relse(bp); 309 return error; 310 } 311 #ifdef DEBUG 312 if (xfs_do_error) { 313 if (xfs_error_target == target) { 314 if (((xfs_req_num++) % xfs_error_mod) == 0) { 315 xfs_buf_relse(bp); 316 cmn_err(CE_DEBUG, "Returning error!\n"); 317 return XFS_ERROR(EIO); 318 } 319 } 320 } 321 #endif 322 if (XFS_FORCED_SHUTDOWN(mp)) 323 goto shutdown_abort; 324 *bpp = bp; 325 return 0; 326 } 327 328 /* 329 * If we find the buffer in the cache with this transaction 330 * pointer in its b_fsprivate2 field, then we know we already 331 * have it locked. If it is already read in we just increment 332 * the lock recursion count and return the buffer to the caller. 333 * If the buffer is not yet read in, then we read it in, increment 334 * the lock recursion count, and return it to the caller. 335 */ 336 if (tp->t_items.lic_next == NULL) { 337 bp = xfs_trans_buf_item_match(tp, target, blkno, len); 338 } else { 339 bp = xfs_trans_buf_item_match_all(tp, target, blkno, len); 340 } 341 if (bp != NULL) { 342 ASSERT(XFS_BUF_VALUSEMA(bp) <= 0); 343 ASSERT(XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp); 344 ASSERT(XFS_BUF_FSPRIVATE(bp, void *) != NULL); 345 ASSERT((XFS_BUF_ISERROR(bp)) == 0); 346 if (!(XFS_BUF_ISDONE(bp))) { 347 trace_xfs_trans_read_buf_io(bp, _RET_IP_); 348 ASSERT(!XFS_BUF_ISASYNC(bp)); 349 XFS_BUF_READ(bp); 350 xfsbdstrat(tp->t_mountp, bp); 351 error = xfs_iowait(bp); 352 if (error) { 353 xfs_ioerror_alert("xfs_trans_read_buf", mp, 354 bp, blkno); 355 xfs_buf_relse(bp); 356 /* 357 * We can gracefully recover from most read 358 * errors. Ones we can't are those that happen 359 * after the transaction's already dirty. 360 */ 361 if (tp->t_flags & XFS_TRANS_DIRTY) 362 xfs_force_shutdown(tp->t_mountp, 363 SHUTDOWN_META_IO_ERROR); 364 return error; 365 } 366 } 367 /* 368 * We never locked this buf ourselves, so we shouldn't 369 * brelse it either. Just get out. 370 */ 371 if (XFS_FORCED_SHUTDOWN(mp)) { 372 trace_xfs_trans_read_buf_shut(bp, _RET_IP_); 373 *bpp = NULL; 374 return XFS_ERROR(EIO); 375 } 376 377 378 bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t*); 379 bip->bli_recur++; 380 381 ASSERT(atomic_read(&bip->bli_refcount) > 0); 382 trace_xfs_trans_read_buf_recur(bip); 383 *bpp = bp; 384 return 0; 385 } 386 387 /* 388 * We always specify the BUF_BUSY flag within a transaction so 389 * that get_buf does not try to push out a delayed write buffer 390 * which might cause another transaction to take place (if the 391 * buffer was delayed alloc). Such recursive transactions can 392 * easily deadlock with our current transaction as well as cause 393 * us to run out of stack space. 394 */ 395 bp = xfs_buf_read(target, blkno, len, flags | BUF_BUSY); 396 if (bp == NULL) { 397 *bpp = NULL; 398 return 0; 399 } 400 if (XFS_BUF_GETERROR(bp) != 0) { 401 XFS_BUF_SUPER_STALE(bp); 402 error = XFS_BUF_GETERROR(bp); 403 404 xfs_ioerror_alert("xfs_trans_read_buf", mp, 405 bp, blkno); 406 if (tp->t_flags & XFS_TRANS_DIRTY) 407 xfs_force_shutdown(tp->t_mountp, SHUTDOWN_META_IO_ERROR); 408 xfs_buf_relse(bp); 409 return error; 410 } 411 #ifdef DEBUG 412 if (xfs_do_error && !(tp->t_flags & XFS_TRANS_DIRTY)) { 413 if (xfs_error_target == target) { 414 if (((xfs_req_num++) % xfs_error_mod) == 0) { 415 xfs_force_shutdown(tp->t_mountp, 416 SHUTDOWN_META_IO_ERROR); 417 xfs_buf_relse(bp); 418 cmn_err(CE_DEBUG, "Returning trans error!\n"); 419 return XFS_ERROR(EIO); 420 } 421 } 422 } 423 #endif 424 if (XFS_FORCED_SHUTDOWN(mp)) 425 goto shutdown_abort; 426 427 /* 428 * The xfs_buf_log_item pointer is stored in b_fsprivate. If 429 * it doesn't have one yet, then allocate one and initialize it. 430 * The checks to see if one is there are in xfs_buf_item_init(). 431 */ 432 xfs_buf_item_init(bp, tp->t_mountp); 433 434 /* 435 * Set the recursion count for the buffer within this transaction 436 * to 0. 437 */ 438 bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t*); 439 ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); 440 ASSERT(!(bip->bli_format.blf_flags & XFS_BLI_CANCEL)); 441 ASSERT(!(bip->bli_flags & XFS_BLI_LOGGED)); 442 bip->bli_recur = 0; 443 444 /* 445 * Take a reference for this transaction on the buf item. 446 */ 447 atomic_inc(&bip->bli_refcount); 448 449 /* 450 * Get a log_item_desc to point at the new item. 451 */ 452 (void) xfs_trans_add_item(tp, (xfs_log_item_t*)bip); 453 454 /* 455 * Initialize b_fsprivate2 so we can find it with incore_match() 456 * above. 457 */ 458 XFS_BUF_SET_FSPRIVATE2(bp, tp); 459 460 trace_xfs_trans_read_buf(bip); 461 *bpp = bp; 462 return 0; 463 464 shutdown_abort: 465 /* 466 * the theory here is that buffer is good but we're 467 * bailing out because the filesystem is being forcibly 468 * shut down. So we should leave the b_flags alone since 469 * the buffer's not staled and just get out. 470 */ 471 #if defined(DEBUG) 472 if (XFS_BUF_ISSTALE(bp) && XFS_BUF_ISDELAYWRITE(bp)) 473 cmn_err(CE_NOTE, "about to pop assert, bp == 0x%p", bp); 474 #endif 475 ASSERT((XFS_BUF_BFLAGS(bp) & (XFS_B_STALE|XFS_B_DELWRI)) != 476 (XFS_B_STALE|XFS_B_DELWRI)); 477 478 trace_xfs_trans_read_buf_shut(bp, _RET_IP_); 479 xfs_buf_relse(bp); 480 *bpp = NULL; 481 return XFS_ERROR(EIO); 482 } 483 484 485 /* 486 * Release the buffer bp which was previously acquired with one of the 487 * xfs_trans_... buffer allocation routines if the buffer has not 488 * been modified within this transaction. If the buffer is modified 489 * within this transaction, do decrement the recursion count but do 490 * not release the buffer even if the count goes to 0. If the buffer is not 491 * modified within the transaction, decrement the recursion count and 492 * release the buffer if the recursion count goes to 0. 493 * 494 * If the buffer is to be released and it was not modified before 495 * this transaction began, then free the buf_log_item associated with it. 496 * 497 * If the transaction pointer is NULL, make this just a normal 498 * brelse() call. 499 */ 500 void 501 xfs_trans_brelse(xfs_trans_t *tp, 502 xfs_buf_t *bp) 503 { 504 xfs_buf_log_item_t *bip; 505 xfs_log_item_t *lip; 506 xfs_log_item_desc_t *lidp; 507 508 /* 509 * Default to a normal brelse() call if the tp is NULL. 510 */ 511 if (tp == NULL) { 512 ASSERT(XFS_BUF_FSPRIVATE2(bp, void *) == NULL); 513 /* 514 * If there's a buf log item attached to the buffer, 515 * then let the AIL know that the buffer is being 516 * unlocked. 517 */ 518 if (XFS_BUF_FSPRIVATE(bp, void *) != NULL) { 519 lip = XFS_BUF_FSPRIVATE(bp, xfs_log_item_t *); 520 if (lip->li_type == XFS_LI_BUF) { 521 bip = XFS_BUF_FSPRIVATE(bp,xfs_buf_log_item_t*); 522 xfs_trans_unlocked_item(bip->bli_item.li_ailp, 523 lip); 524 } 525 } 526 xfs_buf_relse(bp); 527 return; 528 } 529 530 ASSERT(XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp); 531 bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *); 532 ASSERT(bip->bli_item.li_type == XFS_LI_BUF); 533 ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); 534 ASSERT(!(bip->bli_format.blf_flags & XFS_BLI_CANCEL)); 535 ASSERT(atomic_read(&bip->bli_refcount) > 0); 536 537 /* 538 * Find the item descriptor pointing to this buffer's 539 * log item. It must be there. 540 */ 541 lidp = xfs_trans_find_item(tp, (xfs_log_item_t*)bip); 542 ASSERT(lidp != NULL); 543 544 trace_xfs_trans_brelse(bip); 545 546 /* 547 * If the release is just for a recursive lock, 548 * then decrement the count and return. 549 */ 550 if (bip->bli_recur > 0) { 551 bip->bli_recur--; 552 return; 553 } 554 555 /* 556 * If the buffer is dirty within this transaction, we can't 557 * release it until we commit. 558 */ 559 if (lidp->lid_flags & XFS_LID_DIRTY) 560 return; 561 562 /* 563 * If the buffer has been invalidated, then we can't release 564 * it until the transaction commits to disk unless it is re-dirtied 565 * as part of this transaction. This prevents us from pulling 566 * the item from the AIL before we should. 567 */ 568 if (bip->bli_flags & XFS_BLI_STALE) 569 return; 570 571 ASSERT(!(bip->bli_flags & XFS_BLI_LOGGED)); 572 573 /* 574 * Free up the log item descriptor tracking the released item. 575 */ 576 xfs_trans_free_item(tp, lidp); 577 578 /* 579 * Clear the hold flag in the buf log item if it is set. 580 * We wouldn't want the next user of the buffer to 581 * get confused. 582 */ 583 if (bip->bli_flags & XFS_BLI_HOLD) { 584 bip->bli_flags &= ~XFS_BLI_HOLD; 585 } 586 587 /* 588 * Drop our reference to the buf log item. 589 */ 590 atomic_dec(&bip->bli_refcount); 591 592 /* 593 * If the buf item is not tracking data in the log, then 594 * we must free it before releasing the buffer back to the 595 * free pool. Before releasing the buffer to the free pool, 596 * clear the transaction pointer in b_fsprivate2 to dissolve 597 * its relation to this transaction. 598 */ 599 if (!xfs_buf_item_dirty(bip)) { 600 /*** 601 ASSERT(bp->b_pincount == 0); 602 ***/ 603 ASSERT(atomic_read(&bip->bli_refcount) == 0); 604 ASSERT(!(bip->bli_item.li_flags & XFS_LI_IN_AIL)); 605 ASSERT(!(bip->bli_flags & XFS_BLI_INODE_ALLOC_BUF)); 606 xfs_buf_item_relse(bp); 607 bip = NULL; 608 } 609 XFS_BUF_SET_FSPRIVATE2(bp, NULL); 610 611 /* 612 * If we've still got a buf log item on the buffer, then 613 * tell the AIL that the buffer is being unlocked. 614 */ 615 if (bip != NULL) { 616 xfs_trans_unlocked_item(bip->bli_item.li_ailp, 617 (xfs_log_item_t*)bip); 618 } 619 620 xfs_buf_relse(bp); 621 return; 622 } 623 624 /* 625 * Add the locked buffer to the transaction. 626 * The buffer must be locked, and it cannot be associated with any 627 * transaction. 628 * 629 * If the buffer does not yet have a buf log item associated with it, 630 * then allocate one for it. Then add the buf item to the transaction. 631 */ 632 void 633 xfs_trans_bjoin(xfs_trans_t *tp, 634 xfs_buf_t *bp) 635 { 636 xfs_buf_log_item_t *bip; 637 638 ASSERT(XFS_BUF_ISBUSY(bp)); 639 ASSERT(XFS_BUF_FSPRIVATE2(bp, void *) == NULL); 640 641 /* 642 * The xfs_buf_log_item pointer is stored in b_fsprivate. If 643 * it doesn't have one yet, then allocate one and initialize it. 644 * The checks to see if one is there are in xfs_buf_item_init(). 645 */ 646 xfs_buf_item_init(bp, tp->t_mountp); 647 bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *); 648 ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); 649 ASSERT(!(bip->bli_format.blf_flags & XFS_BLI_CANCEL)); 650 ASSERT(!(bip->bli_flags & XFS_BLI_LOGGED)); 651 652 /* 653 * Take a reference for this transaction on the buf item. 654 */ 655 atomic_inc(&bip->bli_refcount); 656 657 /* 658 * Get a log_item_desc to point at the new item. 659 */ 660 (void) xfs_trans_add_item(tp, (xfs_log_item_t *)bip); 661 662 /* 663 * Initialize b_fsprivate2 so we can find it with incore_match() 664 * in xfs_trans_get_buf() and friends above. 665 */ 666 XFS_BUF_SET_FSPRIVATE2(bp, tp); 667 668 trace_xfs_trans_bjoin(bip); 669 } 670 671 /* 672 * Mark the buffer as not needing to be unlocked when the buf item's 673 * IOP_UNLOCK() routine is called. The buffer must already be locked 674 * and associated with the given transaction. 675 */ 676 /* ARGSUSED */ 677 void 678 xfs_trans_bhold(xfs_trans_t *tp, 679 xfs_buf_t *bp) 680 { 681 xfs_buf_log_item_t *bip; 682 683 ASSERT(XFS_BUF_ISBUSY(bp)); 684 ASSERT(XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp); 685 ASSERT(XFS_BUF_FSPRIVATE(bp, void *) != NULL); 686 687 bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *); 688 ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); 689 ASSERT(!(bip->bli_format.blf_flags & XFS_BLI_CANCEL)); 690 ASSERT(atomic_read(&bip->bli_refcount) > 0); 691 bip->bli_flags |= XFS_BLI_HOLD; 692 trace_xfs_trans_bhold(bip); 693 } 694 695 /* 696 * Cancel the previous buffer hold request made on this buffer 697 * for this transaction. 698 */ 699 void 700 xfs_trans_bhold_release(xfs_trans_t *tp, 701 xfs_buf_t *bp) 702 { 703 xfs_buf_log_item_t *bip; 704 705 ASSERT(XFS_BUF_ISBUSY(bp)); 706 ASSERT(XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp); 707 ASSERT(XFS_BUF_FSPRIVATE(bp, void *) != NULL); 708 709 bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *); 710 ASSERT(!(bip->bli_flags & XFS_BLI_STALE)); 711 ASSERT(!(bip->bli_format.blf_flags & XFS_BLI_CANCEL)); 712 ASSERT(atomic_read(&bip->bli_refcount) > 0); 713 ASSERT(bip->bli_flags & XFS_BLI_HOLD); 714 bip->bli_flags &= ~XFS_BLI_HOLD; 715 716 trace_xfs_trans_bhold_release(bip); 717 } 718 719 /* 720 * This is called to mark bytes first through last inclusive of the given 721 * buffer as needing to be logged when the transaction is committed. 722 * The buffer must already be associated with the given transaction. 723 * 724 * First and last are numbers relative to the beginning of this buffer, 725 * so the first byte in the buffer is numbered 0 regardless of the 726 * value of b_blkno. 727 */ 728 void 729 xfs_trans_log_buf(xfs_trans_t *tp, 730 xfs_buf_t *bp, 731 uint first, 732 uint last) 733 { 734 xfs_buf_log_item_t *bip; 735 xfs_log_item_desc_t *lidp; 736 737 ASSERT(XFS_BUF_ISBUSY(bp)); 738 ASSERT(XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp); 739 ASSERT(XFS_BUF_FSPRIVATE(bp, void *) != NULL); 740 ASSERT((first <= last) && (last < XFS_BUF_COUNT(bp))); 741 ASSERT((XFS_BUF_IODONE_FUNC(bp) == NULL) || 742 (XFS_BUF_IODONE_FUNC(bp) == xfs_buf_iodone_callbacks)); 743 744 /* 745 * Mark the buffer as needing to be written out eventually, 746 * and set its iodone function to remove the buffer's buf log 747 * item from the AIL and free it when the buffer is flushed 748 * to disk. See xfs_buf_attach_iodone() for more details 749 * on li_cb and xfs_buf_iodone_callbacks(). 750 * If we end up aborting this transaction, we trap this buffer 751 * inside the b_bdstrat callback so that this won't get written to 752 * disk. 753 */ 754 XFS_BUF_DELAYWRITE(bp); 755 XFS_BUF_DONE(bp); 756 757 bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *); 758 ASSERT(atomic_read(&bip->bli_refcount) > 0); 759 XFS_BUF_SET_IODONE_FUNC(bp, xfs_buf_iodone_callbacks); 760 bip->bli_item.li_cb = (void(*)(xfs_buf_t*,xfs_log_item_t*))xfs_buf_iodone; 761 762 trace_xfs_trans_log_buf(bip); 763 764 /* 765 * If we invalidated the buffer within this transaction, then 766 * cancel the invalidation now that we're dirtying the buffer 767 * again. There are no races with the code in xfs_buf_item_unpin(), 768 * because we have a reference to the buffer this entire time. 769 */ 770 if (bip->bli_flags & XFS_BLI_STALE) { 771 bip->bli_flags &= ~XFS_BLI_STALE; 772 ASSERT(XFS_BUF_ISSTALE(bp)); 773 XFS_BUF_UNSTALE(bp); 774 bip->bli_format.blf_flags &= ~XFS_BLI_CANCEL; 775 } 776 777 lidp = xfs_trans_find_item(tp, (xfs_log_item_t*)bip); 778 ASSERT(lidp != NULL); 779 780 tp->t_flags |= XFS_TRANS_DIRTY; 781 lidp->lid_flags |= XFS_LID_DIRTY; 782 lidp->lid_flags &= ~XFS_LID_BUF_STALE; 783 bip->bli_flags |= XFS_BLI_LOGGED; 784 xfs_buf_item_log(bip, first, last); 785 } 786 787 788 /* 789 * This called to invalidate a buffer that is being used within 790 * a transaction. Typically this is because the blocks in the 791 * buffer are being freed, so we need to prevent it from being 792 * written out when we're done. Allowing it to be written again 793 * might overwrite data in the free blocks if they are reallocated 794 * to a file. 795 * 796 * We prevent the buffer from being written out by clearing the 797 * B_DELWRI flag. We can't always 798 * get rid of the buf log item at this point, though, because 799 * the buffer may still be pinned by another transaction. If that 800 * is the case, then we'll wait until the buffer is committed to 801 * disk for the last time (we can tell by the ref count) and 802 * free it in xfs_buf_item_unpin(). Until it is cleaned up we 803 * will keep the buffer locked so that the buffer and buf log item 804 * are not reused. 805 */ 806 void 807 xfs_trans_binval( 808 xfs_trans_t *tp, 809 xfs_buf_t *bp) 810 { 811 xfs_log_item_desc_t *lidp; 812 xfs_buf_log_item_t *bip; 813 814 ASSERT(XFS_BUF_ISBUSY(bp)); 815 ASSERT(XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp); 816 ASSERT(XFS_BUF_FSPRIVATE(bp, void *) != NULL); 817 818 bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *); 819 lidp = xfs_trans_find_item(tp, (xfs_log_item_t*)bip); 820 ASSERT(lidp != NULL); 821 ASSERT(atomic_read(&bip->bli_refcount) > 0); 822 823 trace_xfs_trans_binval(bip); 824 825 if (bip->bli_flags & XFS_BLI_STALE) { 826 /* 827 * If the buffer is already invalidated, then 828 * just return. 829 */ 830 ASSERT(!(XFS_BUF_ISDELAYWRITE(bp))); 831 ASSERT(XFS_BUF_ISSTALE(bp)); 832 ASSERT(!(bip->bli_flags & (XFS_BLI_LOGGED | XFS_BLI_DIRTY))); 833 ASSERT(!(bip->bli_format.blf_flags & XFS_BLI_INODE_BUF)); 834 ASSERT(bip->bli_format.blf_flags & XFS_BLI_CANCEL); 835 ASSERT(lidp->lid_flags & XFS_LID_DIRTY); 836 ASSERT(tp->t_flags & XFS_TRANS_DIRTY); 837 return; 838 } 839 840 /* 841 * Clear the dirty bit in the buffer and set the STALE flag 842 * in the buf log item. The STALE flag will be used in 843 * xfs_buf_item_unpin() to determine if it should clean up 844 * when the last reference to the buf item is given up. 845 * We set the XFS_BLI_CANCEL flag in the buf log format structure 846 * and log the buf item. This will be used at recovery time 847 * to determine that copies of the buffer in the log before 848 * this should not be replayed. 849 * We mark the item descriptor and the transaction dirty so 850 * that we'll hold the buffer until after the commit. 851 * 852 * Since we're invalidating the buffer, we also clear the state 853 * about which parts of the buffer have been logged. We also 854 * clear the flag indicating that this is an inode buffer since 855 * the data in the buffer will no longer be valid. 856 * 857 * We set the stale bit in the buffer as well since we're getting 858 * rid of it. 859 */ 860 XFS_BUF_UNDELAYWRITE(bp); 861 XFS_BUF_STALE(bp); 862 bip->bli_flags |= XFS_BLI_STALE; 863 bip->bli_flags &= ~(XFS_BLI_LOGGED | XFS_BLI_DIRTY); 864 bip->bli_format.blf_flags &= ~XFS_BLI_INODE_BUF; 865 bip->bli_format.blf_flags |= XFS_BLI_CANCEL; 866 memset((char *)(bip->bli_format.blf_data_map), 0, 867 (bip->bli_format.blf_map_size * sizeof(uint))); 868 lidp->lid_flags |= XFS_LID_DIRTY|XFS_LID_BUF_STALE; 869 tp->t_flags |= XFS_TRANS_DIRTY; 870 } 871 872 /* 873 * This call is used to indicate that the buffer contains on-disk 874 * inodes which must be handled specially during recovery. They 875 * require special handling because only the di_next_unlinked from 876 * the inodes in the buffer should be recovered. The rest of the 877 * data in the buffer is logged via the inodes themselves. 878 * 879 * All we do is set the XFS_BLI_INODE_BUF flag in the buffer's log 880 * format structure so that we'll know what to do at recovery time. 881 */ 882 /* ARGSUSED */ 883 void 884 xfs_trans_inode_buf( 885 xfs_trans_t *tp, 886 xfs_buf_t *bp) 887 { 888 xfs_buf_log_item_t *bip; 889 890 ASSERT(XFS_BUF_ISBUSY(bp)); 891 ASSERT(XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp); 892 ASSERT(XFS_BUF_FSPRIVATE(bp, void *) != NULL); 893 894 bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *); 895 ASSERT(atomic_read(&bip->bli_refcount) > 0); 896 897 bip->bli_format.blf_flags |= XFS_BLI_INODE_BUF; 898 } 899 900 /* 901 * This call is used to indicate that the buffer is going to 902 * be staled and was an inode buffer. This means it gets 903 * special processing during unpin - where any inodes 904 * associated with the buffer should be removed from ail. 905 * There is also special processing during recovery, 906 * any replay of the inodes in the buffer needs to be 907 * prevented as the buffer may have been reused. 908 */ 909 void 910 xfs_trans_stale_inode_buf( 911 xfs_trans_t *tp, 912 xfs_buf_t *bp) 913 { 914 xfs_buf_log_item_t *bip; 915 916 ASSERT(XFS_BUF_ISBUSY(bp)); 917 ASSERT(XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp); 918 ASSERT(XFS_BUF_FSPRIVATE(bp, void *) != NULL); 919 920 bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *); 921 ASSERT(atomic_read(&bip->bli_refcount) > 0); 922 923 bip->bli_flags |= XFS_BLI_STALE_INODE; 924 bip->bli_item.li_cb = (void(*)(xfs_buf_t*,xfs_log_item_t*)) 925 xfs_buf_iodone; 926 } 927 928 929 930 /* 931 * Mark the buffer as being one which contains newly allocated 932 * inodes. We need to make sure that even if this buffer is 933 * relogged as an 'inode buf' we still recover all of the inode 934 * images in the face of a crash. This works in coordination with 935 * xfs_buf_item_committed() to ensure that the buffer remains in the 936 * AIL at its original location even after it has been relogged. 937 */ 938 /* ARGSUSED */ 939 void 940 xfs_trans_inode_alloc_buf( 941 xfs_trans_t *tp, 942 xfs_buf_t *bp) 943 { 944 xfs_buf_log_item_t *bip; 945 946 ASSERT(XFS_BUF_ISBUSY(bp)); 947 ASSERT(XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp); 948 ASSERT(XFS_BUF_FSPRIVATE(bp, void *) != NULL); 949 950 bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *); 951 ASSERT(atomic_read(&bip->bli_refcount) > 0); 952 953 bip->bli_flags |= XFS_BLI_INODE_ALLOC_BUF; 954 } 955 956 957 /* 958 * Similar to xfs_trans_inode_buf(), this marks the buffer as a cluster of 959 * dquots. However, unlike in inode buffer recovery, dquot buffers get 960 * recovered in their entirety. (Hence, no XFS_BLI_DQUOT_ALLOC_BUF flag). 961 * The only thing that makes dquot buffers different from regular 962 * buffers is that we must not replay dquot bufs when recovering 963 * if a _corresponding_ quotaoff has happened. We also have to distinguish 964 * between usr dquot bufs and grp dquot bufs, because usr and grp quotas 965 * can be turned off independently. 966 */ 967 /* ARGSUSED */ 968 void 969 xfs_trans_dquot_buf( 970 xfs_trans_t *tp, 971 xfs_buf_t *bp, 972 uint type) 973 { 974 xfs_buf_log_item_t *bip; 975 976 ASSERT(XFS_BUF_ISBUSY(bp)); 977 ASSERT(XFS_BUF_FSPRIVATE2(bp, xfs_trans_t *) == tp); 978 ASSERT(XFS_BUF_FSPRIVATE(bp, void *) != NULL); 979 ASSERT(type == XFS_BLI_UDQUOT_BUF || 980 type == XFS_BLI_PDQUOT_BUF || 981 type == XFS_BLI_GDQUOT_BUF); 982 983 bip = XFS_BUF_FSPRIVATE(bp, xfs_buf_log_item_t *); 984 ASSERT(atomic_read(&bip->bli_refcount) > 0); 985 986 bip->bli_format.blf_flags |= type; 987 } 988 989 /* 990 * Check to see if a buffer matching the given parameters is already 991 * a part of the given transaction. Only check the first, embedded 992 * chunk, since we don't want to spend all day scanning large transactions. 993 */ 994 STATIC xfs_buf_t * 995 xfs_trans_buf_item_match( 996 xfs_trans_t *tp, 997 xfs_buftarg_t *target, 998 xfs_daddr_t blkno, 999 int len) 1000 { 1001 xfs_log_item_chunk_t *licp; 1002 xfs_log_item_desc_t *lidp; 1003 xfs_buf_log_item_t *blip; 1004 xfs_buf_t *bp; 1005 int i; 1006 1007 bp = NULL; 1008 len = BBTOB(len); 1009 licp = &tp->t_items; 1010 if (!xfs_lic_are_all_free(licp)) { 1011 for (i = 0; i < licp->lic_unused; i++) { 1012 /* 1013 * Skip unoccupied slots. 1014 */ 1015 if (xfs_lic_isfree(licp, i)) { 1016 continue; 1017 } 1018 1019 lidp = xfs_lic_slot(licp, i); 1020 blip = (xfs_buf_log_item_t *)lidp->lid_item; 1021 if (blip->bli_item.li_type != XFS_LI_BUF) { 1022 continue; 1023 } 1024 1025 bp = blip->bli_buf; 1026 if ((XFS_BUF_TARGET(bp) == target) && 1027 (XFS_BUF_ADDR(bp) == blkno) && 1028 (XFS_BUF_COUNT(bp) == len)) { 1029 /* 1030 * We found it. Break out and 1031 * return the pointer to the buffer. 1032 */ 1033 break; 1034 } else { 1035 bp = NULL; 1036 } 1037 } 1038 } 1039 return bp; 1040 } 1041 1042 /* 1043 * Check to see if a buffer matching the given parameters is already 1044 * a part of the given transaction. Check all the chunks, we 1045 * want to be thorough. 1046 */ 1047 STATIC xfs_buf_t * 1048 xfs_trans_buf_item_match_all( 1049 xfs_trans_t *tp, 1050 xfs_buftarg_t *target, 1051 xfs_daddr_t blkno, 1052 int len) 1053 { 1054 xfs_log_item_chunk_t *licp; 1055 xfs_log_item_desc_t *lidp; 1056 xfs_buf_log_item_t *blip; 1057 xfs_buf_t *bp; 1058 int i; 1059 1060 bp = NULL; 1061 len = BBTOB(len); 1062 for (licp = &tp->t_items; licp != NULL; licp = licp->lic_next) { 1063 if (xfs_lic_are_all_free(licp)) { 1064 ASSERT(licp == &tp->t_items); 1065 ASSERT(licp->lic_next == NULL); 1066 return NULL; 1067 } 1068 for (i = 0; i < licp->lic_unused; i++) { 1069 /* 1070 * Skip unoccupied slots. 1071 */ 1072 if (xfs_lic_isfree(licp, i)) { 1073 continue; 1074 } 1075 1076 lidp = xfs_lic_slot(licp, i); 1077 blip = (xfs_buf_log_item_t *)lidp->lid_item; 1078 if (blip->bli_item.li_type != XFS_LI_BUF) { 1079 continue; 1080 } 1081 1082 bp = blip->bli_buf; 1083 if ((XFS_BUF_TARGET(bp) == target) && 1084 (XFS_BUF_ADDR(bp) == blkno) && 1085 (XFS_BUF_COUNT(bp) == len)) { 1086 /* 1087 * We found it. Break out and 1088 * return the pointer to the buffer. 1089 */ 1090 return bp; 1091 } 1092 } 1093 } 1094 return NULL; 1095 } 1096