linux/fs/xfs/xfs_log_recover.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Copyright (c) 2000-2006 Silicon Graphics, Inc.
   4 * All Rights Reserved.
   5 */
   6#include "xfs.h"
   7#include "xfs_fs.h"
   8#include "xfs_shared.h"
   9#include "xfs_format.h"
  10#include "xfs_log_format.h"
  11#include "xfs_trans_resv.h"
  12#include "xfs_bit.h"
  13#include "xfs_sb.h"
  14#include "xfs_mount.h"
  15#include "xfs_defer.h"
  16#include "xfs_da_format.h"
  17#include "xfs_da_btree.h"
  18#include "xfs_inode.h"
  19#include "xfs_trans.h"
  20#include "xfs_log.h"
  21#include "xfs_log_priv.h"
  22#include "xfs_log_recover.h"
  23#include "xfs_inode_item.h"
  24#include "xfs_extfree_item.h"
  25#include "xfs_trans_priv.h"
  26#include "xfs_alloc.h"
  27#include "xfs_ialloc.h"
  28#include "xfs_quota.h"
  29#include "xfs_cksum.h"
  30#include "xfs_trace.h"
  31#include "xfs_icache.h"
  32#include "xfs_bmap_btree.h"
  33#include "xfs_error.h"
  34#include "xfs_dir2.h"
  35#include "xfs_rmap_item.h"
  36#include "xfs_buf_item.h"
  37#include "xfs_refcount_item.h"
  38#include "xfs_bmap_item.h"
  39
  40#define BLK_AVG(blk1, blk2)     ((blk1+blk2) >> 1)
  41
  42STATIC int
  43xlog_find_zeroed(
  44        struct xlog     *,
  45        xfs_daddr_t     *);
  46STATIC int
  47xlog_clear_stale_blocks(
  48        struct xlog     *,
  49        xfs_lsn_t);
  50#if defined(DEBUG)
  51STATIC void
  52xlog_recover_check_summary(
  53        struct xlog *);
  54#else
  55#define xlog_recover_check_summary(log)
  56#endif
  57STATIC int
  58xlog_do_recovery_pass(
  59        struct xlog *, xfs_daddr_t, xfs_daddr_t, int, xfs_daddr_t *);
  60
  61/*
  62 * This structure is used during recovery to record the buf log items which
  63 * have been canceled and should not be replayed.
  64 */
  65struct xfs_buf_cancel {
  66        xfs_daddr_t             bc_blkno;
  67        uint                    bc_len;
  68        int                     bc_refcount;
  69        struct list_head        bc_list;
  70};
  71
  72/*
  73 * Sector aligned buffer routines for buffer create/read/write/access
  74 */
  75
  76/*
  77 * Verify the log-relative block number and length in basic blocks are valid for
  78 * an operation involving the given XFS log buffer. Returns true if the fields
  79 * are valid, false otherwise.
  80 */
  81static inline bool
  82xlog_verify_bp(
  83        struct xlog     *log,
  84        xfs_daddr_t     blk_no,
  85        int             bbcount)
  86{
  87        if (blk_no < 0 || blk_no >= log->l_logBBsize)
  88                return false;
  89        if (bbcount <= 0 || (blk_no + bbcount) > log->l_logBBsize)
  90                return false;
  91        return true;
  92}
  93
  94/*
  95 * Allocate a buffer to hold log data.  The buffer needs to be able
  96 * to map to a range of nbblks basic blocks at any valid (basic
  97 * block) offset within the log.
  98 */
  99STATIC xfs_buf_t *
 100xlog_get_bp(
 101        struct xlog     *log,
 102        int             nbblks)
 103{
 104        struct xfs_buf  *bp;
 105
 106        /*
 107         * Pass log block 0 since we don't have an addr yet, buffer will be
 108         * verified on read.
 109         */
 110        if (!xlog_verify_bp(log, 0, nbblks)) {
 111                xfs_warn(log->l_mp, "Invalid block length (0x%x) for buffer",
 112                        nbblks);
 113                XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_HIGH, log->l_mp);
 114                return NULL;
 115        }
 116
 117        /*
 118         * We do log I/O in units of log sectors (a power-of-2
 119         * multiple of the basic block size), so we round up the
 120         * requested size to accommodate the basic blocks required
 121         * for complete log sectors.
 122         *
 123         * In addition, the buffer may be used for a non-sector-
 124         * aligned block offset, in which case an I/O of the
 125         * requested size could extend beyond the end of the
 126         * buffer.  If the requested size is only 1 basic block it
 127         * will never straddle a sector boundary, so this won't be
 128         * an issue.  Nor will this be a problem if the log I/O is
 129         * done in basic blocks (sector size 1).  But otherwise we
 130         * extend the buffer by one extra log sector to ensure
 131         * there's space to accommodate this possibility.
 132         */
 133        if (nbblks > 1 && log->l_sectBBsize > 1)
 134                nbblks += log->l_sectBBsize;
 135        nbblks = round_up(nbblks, log->l_sectBBsize);
 136
 137        bp = xfs_buf_get_uncached(log->l_mp->m_logdev_targp, nbblks, 0);
 138        if (bp)
 139                xfs_buf_unlock(bp);
 140        return bp;
 141}
 142
 143STATIC void
 144xlog_put_bp(
 145        xfs_buf_t       *bp)
 146{
 147        xfs_buf_free(bp);
 148}
 149
 150/*
 151 * Return the address of the start of the given block number's data
 152 * in a log buffer.  The buffer covers a log sector-aligned region.
 153 */
 154STATIC char *
 155xlog_align(
 156        struct xlog     *log,
 157        xfs_daddr_t     blk_no,
 158        int             nbblks,
 159        struct xfs_buf  *bp)
 160{
 161        xfs_daddr_t     offset = blk_no & ((xfs_daddr_t)log->l_sectBBsize - 1);
 162
 163        ASSERT(offset + nbblks <= bp->b_length);
 164        return bp->b_addr + BBTOB(offset);
 165}
 166
 167
 168/*
 169 * nbblks should be uint, but oh well.  Just want to catch that 32-bit length.
 170 */
 171STATIC int
 172xlog_bread_noalign(
 173        struct xlog     *log,
 174        xfs_daddr_t     blk_no,
 175        int             nbblks,
 176        struct xfs_buf  *bp)
 177{
 178        int             error;
 179
 180        if (!xlog_verify_bp(log, blk_no, nbblks)) {
 181                xfs_warn(log->l_mp,
 182                         "Invalid log block/length (0x%llx, 0x%x) for buffer",
 183                         blk_no, nbblks);
 184                XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_HIGH, log->l_mp);
 185                return -EFSCORRUPTED;
 186        }
 187
 188        blk_no = round_down(blk_no, log->l_sectBBsize);
 189        nbblks = round_up(nbblks, log->l_sectBBsize);
 190
 191        ASSERT(nbblks > 0);
 192        ASSERT(nbblks <= bp->b_length);
 193
 194        XFS_BUF_SET_ADDR(bp, log->l_logBBstart + blk_no);
 195        bp->b_flags |= XBF_READ;
 196        bp->b_io_length = nbblks;
 197        bp->b_error = 0;
 198
 199        error = xfs_buf_submit_wait(bp);
 200        if (error && !XFS_FORCED_SHUTDOWN(log->l_mp))
 201                xfs_buf_ioerror_alert(bp, __func__);
 202        return error;
 203}
 204
 205STATIC int
 206xlog_bread(
 207        struct xlog     *log,
 208        xfs_daddr_t     blk_no,
 209        int             nbblks,
 210        struct xfs_buf  *bp,
 211        char            **offset)
 212{
 213        int             error;
 214
 215        error = xlog_bread_noalign(log, blk_no, nbblks, bp);
 216        if (error)
 217                return error;
 218
 219        *offset = xlog_align(log, blk_no, nbblks, bp);
 220        return 0;
 221}
 222
 223/*
 224 * Read at an offset into the buffer. Returns with the buffer in it's original
 225 * state regardless of the result of the read.
 226 */
 227STATIC int
 228xlog_bread_offset(
 229        struct xlog     *log,
 230        xfs_daddr_t     blk_no,         /* block to read from */
 231        int             nbblks,         /* blocks to read */
 232        struct xfs_buf  *bp,
 233        char            *offset)
 234{
 235        char            *orig_offset = bp->b_addr;
 236        int             orig_len = BBTOB(bp->b_length);
 237        int             error, error2;
 238
 239        error = xfs_buf_associate_memory(bp, offset, BBTOB(nbblks));
 240        if (error)
 241                return error;
 242
 243        error = xlog_bread_noalign(log, blk_no, nbblks, bp);
 244
 245        /* must reset buffer pointer even on error */
 246        error2 = xfs_buf_associate_memory(bp, orig_offset, orig_len);
 247        if (error)
 248                return error;
 249        return error2;
 250}
 251
 252/*
 253 * Write out the buffer at the given block for the given number of blocks.
 254 * The buffer is kept locked across the write and is returned locked.
 255 * This can only be used for synchronous log writes.
 256 */
 257STATIC int
 258xlog_bwrite(
 259        struct xlog     *log,
 260        xfs_daddr_t     blk_no,
 261        int             nbblks,
 262        struct xfs_buf  *bp)
 263{
 264        int             error;
 265
 266        if (!xlog_verify_bp(log, blk_no, nbblks)) {
 267                xfs_warn(log->l_mp,
 268                         "Invalid log block/length (0x%llx, 0x%x) for buffer",
 269                         blk_no, nbblks);
 270                XFS_ERROR_REPORT(__func__, XFS_ERRLEVEL_HIGH, log->l_mp);
 271                return -EFSCORRUPTED;
 272        }
 273
 274        blk_no = round_down(blk_no, log->l_sectBBsize);
 275        nbblks = round_up(nbblks, log->l_sectBBsize);
 276
 277        ASSERT(nbblks > 0);
 278        ASSERT(nbblks <= bp->b_length);
 279
 280        XFS_BUF_SET_ADDR(bp, log->l_logBBstart + blk_no);
 281        xfs_buf_hold(bp);
 282        xfs_buf_lock(bp);
 283        bp->b_io_length = nbblks;
 284        bp->b_error = 0;
 285
 286        error = xfs_bwrite(bp);
 287        if (error)
 288                xfs_buf_ioerror_alert(bp, __func__);
 289        xfs_buf_relse(bp);
 290        return error;
 291}
 292
 293#ifdef DEBUG
 294/*
 295 * dump debug superblock and log record information
 296 */
 297STATIC void
 298xlog_header_check_dump(
 299        xfs_mount_t             *mp,
 300        xlog_rec_header_t       *head)
 301{
 302        xfs_debug(mp, "%s:  SB : uuid = %pU, fmt = %d",
 303                __func__, &mp->m_sb.sb_uuid, XLOG_FMT);
 304        xfs_debug(mp, "    log : uuid = %pU, fmt = %d",
 305                &head->h_fs_uuid, be32_to_cpu(head->h_fmt));
 306}
 307#else
 308#define xlog_header_check_dump(mp, head)
 309#endif
 310
 311/*
 312 * check log record header for recovery
 313 */
 314STATIC int
 315xlog_header_check_recover(
 316        xfs_mount_t             *mp,
 317        xlog_rec_header_t       *head)
 318{
 319        ASSERT(head->h_magicno == cpu_to_be32(XLOG_HEADER_MAGIC_NUM));
 320
 321        /*
 322         * IRIX doesn't write the h_fmt field and leaves it zeroed
 323         * (XLOG_FMT_UNKNOWN). This stops us from trying to recover
 324         * a dirty log created in IRIX.
 325         */
 326        if (unlikely(head->h_fmt != cpu_to_be32(XLOG_FMT))) {
 327                xfs_warn(mp,
 328        "dirty log written in incompatible format - can't recover");
 329                xlog_header_check_dump(mp, head);
 330                XFS_ERROR_REPORT("xlog_header_check_recover(1)",
 331                                 XFS_ERRLEVEL_HIGH, mp);
 332                return -EFSCORRUPTED;
 333        } else if (unlikely(!uuid_equal(&mp->m_sb.sb_uuid, &head->h_fs_uuid))) {
 334                xfs_warn(mp,
 335        "dirty log entry has mismatched uuid - can't recover");
 336                xlog_header_check_dump(mp, head);
 337                XFS_ERROR_REPORT("xlog_header_check_recover(2)",
 338                                 XFS_ERRLEVEL_HIGH, mp);
 339                return -EFSCORRUPTED;
 340        }
 341        return 0;
 342}
 343
 344/*
 345 * read the head block of the log and check the header
 346 */
 347STATIC int
 348xlog_header_check_mount(
 349        xfs_mount_t             *mp,
 350        xlog_rec_header_t       *head)
 351{
 352        ASSERT(head->h_magicno == cpu_to_be32(XLOG_HEADER_MAGIC_NUM));
 353
 354        if (uuid_is_null(&head->h_fs_uuid)) {
 355                /*
 356                 * IRIX doesn't write the h_fs_uuid or h_fmt fields. If
 357                 * h_fs_uuid is null, we assume this log was last mounted
 358                 * by IRIX and continue.
 359                 */
 360                xfs_warn(mp, "null uuid in log - IRIX style log");
 361        } else if (unlikely(!uuid_equal(&mp->m_sb.sb_uuid, &head->h_fs_uuid))) {
 362                xfs_warn(mp, "log has mismatched uuid - can't recover");
 363                xlog_header_check_dump(mp, head);
 364                XFS_ERROR_REPORT("xlog_header_check_mount",
 365                                 XFS_ERRLEVEL_HIGH, mp);
 366                return -EFSCORRUPTED;
 367        }
 368        return 0;
 369}
 370
 371STATIC void
 372xlog_recover_iodone(
 373        struct xfs_buf  *bp)
 374{
 375        if (bp->b_error) {
 376                /*
 377                 * We're not going to bother about retrying
 378                 * this during recovery. One strike!
 379                 */
 380                if (!XFS_FORCED_SHUTDOWN(bp->b_target->bt_mount)) {
 381                        xfs_buf_ioerror_alert(bp, __func__);
 382                        xfs_force_shutdown(bp->b_target->bt_mount,
 383                                                SHUTDOWN_META_IO_ERROR);
 384                }
 385        }
 386
 387        /*
 388         * On v5 supers, a bli could be attached to update the metadata LSN.
 389         * Clean it up.
 390         */
 391        if (bp->b_log_item)
 392                xfs_buf_item_relse(bp);
 393        ASSERT(bp->b_log_item == NULL);
 394
 395        bp->b_iodone = NULL;
 396        xfs_buf_ioend(bp);
 397}
 398
 399/*
 400 * This routine finds (to an approximation) the first block in the physical
 401 * log which contains the given cycle.  It uses a binary search algorithm.
 402 * Note that the algorithm can not be perfect because the disk will not
 403 * necessarily be perfect.
 404 */
 405STATIC int
 406xlog_find_cycle_start(
 407        struct xlog     *log,
 408        struct xfs_buf  *bp,
 409        xfs_daddr_t     first_blk,
 410        xfs_daddr_t     *last_blk,
 411        uint            cycle)
 412{
 413        char            *offset;
 414        xfs_daddr_t     mid_blk;
 415        xfs_daddr_t     end_blk;
 416        uint            mid_cycle;
 417        int             error;
 418
 419        end_blk = *last_blk;
 420        mid_blk = BLK_AVG(first_blk, end_blk);
 421        while (mid_blk != first_blk && mid_blk != end_blk) {
 422                error = xlog_bread(log, mid_blk, 1, bp, &offset);
 423                if (error)
 424                        return error;
 425                mid_cycle = xlog_get_cycle(offset);
 426                if (mid_cycle == cycle)
 427                        end_blk = mid_blk;   /* last_half_cycle == mid_cycle */
 428                else
 429                        first_blk = mid_blk; /* first_half_cycle == mid_cycle */
 430                mid_blk = BLK_AVG(first_blk, end_blk);
 431        }
 432        ASSERT((mid_blk == first_blk && mid_blk+1 == end_blk) ||
 433               (mid_blk == end_blk && mid_blk-1 == first_blk));
 434
 435        *last_blk = end_blk;
 436
 437        return 0;
 438}
 439
 440/*
 441 * Check that a range of blocks does not contain stop_on_cycle_no.
 442 * Fill in *new_blk with the block offset where such a block is
 443 * found, or with -1 (an invalid block number) if there is no such
 444 * block in the range.  The scan needs to occur from front to back
 445 * and the pointer into the region must be updated since a later
 446 * routine will need to perform another test.
 447 */
 448STATIC int
 449xlog_find_verify_cycle(
 450        struct xlog     *log,
 451        xfs_daddr_t     start_blk,
 452        int             nbblks,
 453        uint            stop_on_cycle_no,
 454        xfs_daddr_t     *new_blk)
 455{
 456        xfs_daddr_t     i, j;
 457        uint            cycle;
 458        xfs_buf_t       *bp;
 459        xfs_daddr_t     bufblks;
 460        char            *buf = NULL;
 461        int             error = 0;
 462
 463        /*
 464         * Greedily allocate a buffer big enough to handle the full
 465         * range of basic blocks we'll be examining.  If that fails,
 466         * try a smaller size.  We need to be able to read at least
 467         * a log sector, or we're out of luck.
 468         */
 469        bufblks = 1 << ffs(nbblks);
 470        while (bufblks > log->l_logBBsize)
 471                bufblks >>= 1;
 472        while (!(bp = xlog_get_bp(log, bufblks))) {
 473                bufblks >>= 1;
 474                if (bufblks < log->l_sectBBsize)
 475                        return -ENOMEM;
 476        }
 477
 478        for (i = start_blk; i < start_blk + nbblks; i += bufblks) {
 479                int     bcount;
 480
 481                bcount = min(bufblks, (start_blk + nbblks - i));
 482
 483                error = xlog_bread(log, i, bcount, bp, &buf);
 484                if (error)
 485                        goto out;
 486
 487                for (j = 0; j < bcount; j++) {
 488                        cycle = xlog_get_cycle(buf);
 489                        if (cycle == stop_on_cycle_no) {
 490                                *new_blk = i+j;
 491                                goto out;
 492                        }
 493
 494                        buf += BBSIZE;
 495                }
 496        }
 497
 498        *new_blk = -1;
 499
 500out:
 501        xlog_put_bp(bp);
 502        return error;
 503}
 504
 505/*
 506 * Potentially backup over partial log record write.
 507 *
 508 * In the typical case, last_blk is the number of the block directly after
 509 * a good log record.  Therefore, we subtract one to get the block number
 510 * of the last block in the given buffer.  extra_bblks contains the number
 511 * of blocks we would have read on a previous read.  This happens when the
 512 * last log record is split over the end of the physical log.
 513 *
 514 * extra_bblks is the number of blocks potentially verified on a previous
 515 * call to this routine.
 516 */
 517STATIC int
 518xlog_find_verify_log_record(
 519        struct xlog             *log,
 520        xfs_daddr_t             start_blk,
 521        xfs_daddr_t             *last_blk,
 522        int                     extra_bblks)
 523{
 524        xfs_daddr_t             i;
 525        xfs_buf_t               *bp;
 526        char                    *offset = NULL;
 527        xlog_rec_header_t       *head = NULL;
 528        int                     error = 0;
 529        int                     smallmem = 0;
 530        int                     num_blks = *last_blk - start_blk;
 531        int                     xhdrs;
 532
 533        ASSERT(start_blk != 0 || *last_blk != start_blk);
 534
 535        if (!(bp = xlog_get_bp(log, num_blks))) {
 536                if (!(bp = xlog_get_bp(log, 1)))
 537                        return -ENOMEM;
 538                smallmem = 1;
 539        } else {
 540                error = xlog_bread(log, start_blk, num_blks, bp, &offset);
 541                if (error)
 542                        goto out;
 543                offset += ((num_blks - 1) << BBSHIFT);
 544        }
 545
 546        for (i = (*last_blk) - 1; i >= 0; i--) {
 547                if (i < start_blk) {
 548                        /* valid log record not found */
 549                        xfs_warn(log->l_mp,
 550                "Log inconsistent (didn't find previous header)");
 551                        ASSERT(0);
 552                        error = -EIO;
 553                        goto out;
 554                }
 555
 556                if (smallmem) {
 557                        error = xlog_bread(log, i, 1, bp, &offset);
 558                        if (error)
 559                                goto out;
 560                }
 561
 562                head = (xlog_rec_header_t *)offset;
 563
 564                if (head->h_magicno == cpu_to_be32(XLOG_HEADER_MAGIC_NUM))
 565                        break;
 566
 567                if (!smallmem)
 568                        offset -= BBSIZE;
 569        }
 570
 571        /*
 572         * We hit the beginning of the physical log & still no header.  Return
 573         * to caller.  If caller can handle a return of -1, then this routine
 574         * will be called again for the end of the physical log.
 575         */
 576        if (i == -1) {
 577                error = 1;
 578                goto out;
 579        }
 580
 581        /*
 582         * We have the final block of the good log (the first block
 583         * of the log record _before_ the head. So we check the uuid.
 584         */
 585        if ((error = xlog_header_check_mount(log->l_mp, head)))
 586                goto out;
 587
 588        /*
 589         * We may have found a log record header before we expected one.
 590         * last_blk will be the 1st block # with a given cycle #.  We may end
 591         * up reading an entire log record.  In this case, we don't want to
 592         * reset last_blk.  Only when last_blk points in the middle of a log
 593         * record do we update last_blk.
 594         */
 595        if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) {
 596                uint    h_size = be32_to_cpu(head->h_size);
 597
 598                xhdrs = h_size / XLOG_HEADER_CYCLE_SIZE;
 599                if (h_size % XLOG_HEADER_CYCLE_SIZE)
 600                        xhdrs++;
 601        } else {
 602                xhdrs = 1;
 603        }
 604
 605        if (*last_blk - i + extra_bblks !=
 606            BTOBB(be32_to_cpu(head->h_len)) + xhdrs)
 607                *last_blk = i;
 608
 609out:
 610        xlog_put_bp(bp);
 611        return error;
 612}
 613
 614/*
 615 * Head is defined to be the point of the log where the next log write
 616 * could go.  This means that incomplete LR writes at the end are
 617 * eliminated when calculating the head.  We aren't guaranteed that previous
 618 * LR have complete transactions.  We only know that a cycle number of
 619 * current cycle number -1 won't be present in the log if we start writing
 620 * from our current block number.
 621 *
 622 * last_blk contains the block number of the first block with a given
 623 * cycle number.
 624 *
 625 * Return: zero if normal, non-zero if error.
 626 */
 627STATIC int
 628xlog_find_head(
 629        struct xlog     *log,
 630        xfs_daddr_t     *return_head_blk)
 631{
 632        xfs_buf_t       *bp;
 633        char            *offset;
 634        xfs_daddr_t     new_blk, first_blk, start_blk, last_blk, head_blk;
 635        int             num_scan_bblks;
 636        uint            first_half_cycle, last_half_cycle;
 637        uint            stop_on_cycle;
 638        int             error, log_bbnum = log->l_logBBsize;
 639
 640        /* Is the end of the log device zeroed? */
 641        error = xlog_find_zeroed(log, &first_blk);
 642        if (error < 0) {
 643                xfs_warn(log->l_mp, "empty log check failed");
 644                return error;
 645        }
 646        if (error == 1) {
 647                *return_head_blk = first_blk;
 648
 649                /* Is the whole lot zeroed? */
 650                if (!first_blk) {
 651                        /* Linux XFS shouldn't generate totally zeroed logs -
 652                         * mkfs etc write a dummy unmount record to a fresh
 653                         * log so we can store the uuid in there
 654                         */
 655                        xfs_warn(log->l_mp, "totally zeroed log");
 656                }
 657
 658                return 0;
 659        }
 660
 661        first_blk = 0;                  /* get cycle # of 1st block */
 662        bp = xlog_get_bp(log, 1);
 663        if (!bp)
 664                return -ENOMEM;
 665
 666        error = xlog_bread(log, 0, 1, bp, &offset);
 667        if (error)
 668                goto bp_err;
 669
 670        first_half_cycle = xlog_get_cycle(offset);
 671
 672        last_blk = head_blk = log_bbnum - 1;    /* get cycle # of last block */
 673        error = xlog_bread(log, last_blk, 1, bp, &offset);
 674        if (error)
 675                goto bp_err;
 676
 677        last_half_cycle = xlog_get_cycle(offset);
 678        ASSERT(last_half_cycle != 0);
 679
 680        /*
 681         * If the 1st half cycle number is equal to the last half cycle number,
 682         * then the entire log is stamped with the same cycle number.  In this
 683         * case, head_blk can't be set to zero (which makes sense).  The below
 684         * math doesn't work out properly with head_blk equal to zero.  Instead,
 685         * we set it to log_bbnum which is an invalid block number, but this
 686         * value makes the math correct.  If head_blk doesn't changed through
 687         * all the tests below, *head_blk is set to zero at the very end rather
 688         * than log_bbnum.  In a sense, log_bbnum and zero are the same block
 689         * in a circular file.
 690         */
 691        if (first_half_cycle == last_half_cycle) {
 692                /*
 693                 * In this case we believe that the entire log should have
 694                 * cycle number last_half_cycle.  We need to scan backwards
 695                 * from the end verifying that there are no holes still
 696                 * containing last_half_cycle - 1.  If we find such a hole,
 697                 * then the start of that hole will be the new head.  The
 698                 * simple case looks like
 699                 *        x | x ... | x - 1 | x
 700                 * Another case that fits this picture would be
 701                 *        x | x + 1 | x ... | x
 702                 * In this case the head really is somewhere at the end of the
 703                 * log, as one of the latest writes at the beginning was
 704                 * incomplete.
 705                 * One more case is
 706                 *        x | x + 1 | x ... | x - 1 | x
 707                 * This is really the combination of the above two cases, and
 708                 * the head has to end up at the start of the x-1 hole at the
 709                 * end of the log.
 710                 *
 711                 * In the 256k log case, we will read from the beginning to the
 712                 * end of the log and search for cycle numbers equal to x-1.
 713                 * We don't worry about the x+1 blocks that we encounter,
 714                 * because we know that they cannot be the head since the log
 715                 * started with x.
 716                 */
 717                head_blk = log_bbnum;
 718                stop_on_cycle = last_half_cycle - 1;
 719        } else {
 720                /*
 721                 * In this case we want to find the first block with cycle
 722                 * number matching last_half_cycle.  We expect the log to be
 723                 * some variation on
 724                 *        x + 1 ... | x ... | x
 725                 * The first block with cycle number x (last_half_cycle) will
 726                 * be where the new head belongs.  First we do a binary search
 727                 * for the first occurrence of last_half_cycle.  The binary
 728                 * search may not be totally accurate, so then we scan back
 729                 * from there looking for occurrences of last_half_cycle before
 730                 * us.  If that backwards scan wraps around the beginning of
 731                 * the log, then we look for occurrences of last_half_cycle - 1
 732                 * at the end of the log.  The cases we're looking for look
 733                 * like
 734                 *                               v binary search stopped here
 735                 *        x + 1 ... | x | x + 1 | x ... | x
 736                 *                   ^ but we want to locate this spot
 737                 * or
 738                 *        <---------> less than scan distance
 739                 *        x + 1 ... | x ... | x - 1 | x
 740                 *                           ^ we want to locate this spot
 741                 */
 742                stop_on_cycle = last_half_cycle;
 743                if ((error = xlog_find_cycle_start(log, bp, first_blk,
 744                                                &head_blk, last_half_cycle)))
 745                        goto bp_err;
 746        }
 747
 748        /*
 749         * Now validate the answer.  Scan back some number of maximum possible
 750         * blocks and make sure each one has the expected cycle number.  The
 751         * maximum is determined by the total possible amount of buffering
 752         * in the in-core log.  The following number can be made tighter if
 753         * we actually look at the block size of the filesystem.
 754         */
 755        num_scan_bblks = min_t(int, log_bbnum, XLOG_TOTAL_REC_SHIFT(log));
 756        if (head_blk >= num_scan_bblks) {
 757                /*
 758                 * We are guaranteed that the entire check can be performed
 759                 * in one buffer.
 760                 */
 761                start_blk = head_blk - num_scan_bblks;
 762                if ((error = xlog_find_verify_cycle(log,
 763                                                start_blk, num_scan_bblks,
 764                                                stop_on_cycle, &new_blk)))
 765                        goto bp_err;
 766                if (new_blk != -1)
 767                        head_blk = new_blk;
 768        } else {                /* need to read 2 parts of log */
 769                /*
 770                 * We are going to scan backwards in the log in two parts.
 771                 * First we scan the physical end of the log.  In this part
 772                 * of the log, we are looking for blocks with cycle number
 773                 * last_half_cycle - 1.
 774                 * If we find one, then we know that the log starts there, as
 775                 * we've found a hole that didn't get written in going around
 776                 * the end of the physical log.  The simple case for this is
 777                 *        x + 1 ... | x ... | x - 1 | x
 778                 *        <---------> less than scan distance
 779                 * If all of the blocks at the end of the log have cycle number
 780                 * last_half_cycle, then we check the blocks at the start of
 781                 * the log looking for occurrences of last_half_cycle.  If we
 782                 * find one, then our current estimate for the location of the
 783                 * first occurrence of last_half_cycle is wrong and we move
 784                 * back to the hole we've found.  This case looks like
 785                 *        x + 1 ... | x | x + 1 | x ...
 786                 *                               ^ binary search stopped here
 787                 * Another case we need to handle that only occurs in 256k
 788                 * logs is
 789                 *        x + 1 ... | x ... | x+1 | x ...
 790                 *                   ^ binary search stops here
 791                 * In a 256k log, the scan at the end of the log will see the
 792                 * x + 1 blocks.  We need to skip past those since that is
 793                 * certainly not the head of the log.  By searching for
 794                 * last_half_cycle-1 we accomplish that.
 795                 */
 796                ASSERT(head_blk <= INT_MAX &&
 797                        (xfs_daddr_t) num_scan_bblks >= head_blk);
 798                start_blk = log_bbnum - (num_scan_bblks - head_blk);
 799                if ((error = xlog_find_verify_cycle(log, start_blk,
 800                                        num_scan_bblks - (int)head_blk,
 801                                        (stop_on_cycle - 1), &new_blk)))
 802                        goto bp_err;
 803                if (new_blk != -1) {
 804                        head_blk = new_blk;
 805                        goto validate_head;
 806                }
 807
 808                /*
 809                 * Scan beginning of log now.  The last part of the physical
 810                 * log is good.  This scan needs to verify that it doesn't find
 811                 * the last_half_cycle.
 812                 */
 813                start_blk = 0;
 814                ASSERT(head_blk <= INT_MAX);
 815                if ((error = xlog_find_verify_cycle(log,
 816                                        start_blk, (int)head_blk,
 817                                        stop_on_cycle, &new_blk)))
 818                        goto bp_err;
 819                if (new_blk != -1)
 820                        head_blk = new_blk;
 821        }
 822
 823validate_head:
 824        /*
 825         * Now we need to make sure head_blk is not pointing to a block in
 826         * the middle of a log record.
 827         */
 828        num_scan_bblks = XLOG_REC_SHIFT(log);
 829        if (head_blk >= num_scan_bblks) {
 830                start_blk = head_blk - num_scan_bblks; /* don't read head_blk */
 831
 832                /* start ptr at last block ptr before head_blk */
 833                error = xlog_find_verify_log_record(log, start_blk, &head_blk, 0);
 834                if (error == 1)
 835                        error = -EIO;
 836                if (error)
 837                        goto bp_err;
 838        } else {
 839                start_blk = 0;
 840                ASSERT(head_blk <= INT_MAX);
 841                error = xlog_find_verify_log_record(log, start_blk, &head_blk, 0);
 842                if (error < 0)
 843                        goto bp_err;
 844                if (error == 1) {
 845                        /* We hit the beginning of the log during our search */
 846                        start_blk = log_bbnum - (num_scan_bblks - head_blk);
 847                        new_blk = log_bbnum;
 848                        ASSERT(start_blk <= INT_MAX &&
 849                                (xfs_daddr_t) log_bbnum-start_blk >= 0);
 850                        ASSERT(head_blk <= INT_MAX);
 851                        error = xlog_find_verify_log_record(log, start_blk,
 852                                                        &new_blk, (int)head_blk);
 853                        if (error == 1)
 854                                error = -EIO;
 855                        if (error)
 856                                goto bp_err;
 857                        if (new_blk != log_bbnum)
 858                                head_blk = new_blk;
 859                } else if (error)
 860                        goto bp_err;
 861        }
 862
 863        xlog_put_bp(bp);
 864        if (head_blk == log_bbnum)
 865                *return_head_blk = 0;
 866        else
 867                *return_head_blk = head_blk;
 868        /*
 869         * When returning here, we have a good block number.  Bad block
 870         * means that during a previous crash, we didn't have a clean break
 871         * from cycle number N to cycle number N-1.  In this case, we need
 872         * to find the first block with cycle number N-1.
 873         */
 874        return 0;
 875
 876 bp_err:
 877        xlog_put_bp(bp);
 878
 879        if (error)
 880                xfs_warn(log->l_mp, "failed to find log head");
 881        return error;
 882}
 883
 884/*
 885 * Seek backwards in the log for log record headers.
 886 *
 887 * Given a starting log block, walk backwards until we find the provided number
 888 * of records or hit the provided tail block. The return value is the number of
 889 * records encountered or a negative error code. The log block and buffer
 890 * pointer of the last record seen are returned in rblk and rhead respectively.
 891 */
 892STATIC int
 893xlog_rseek_logrec_hdr(
 894        struct xlog             *log,
 895        xfs_daddr_t             head_blk,
 896        xfs_daddr_t             tail_blk,
 897        int                     count,
 898        struct xfs_buf          *bp,
 899        xfs_daddr_t             *rblk,
 900        struct xlog_rec_header  **rhead,
 901        bool                    *wrapped)
 902{
 903        int                     i;
 904        int                     error;
 905        int                     found = 0;
 906        char                    *offset = NULL;
 907        xfs_daddr_t             end_blk;
 908
 909        *wrapped = false;
 910
 911        /*
 912         * Walk backwards from the head block until we hit the tail or the first
 913         * block in the log.
 914         */
 915        end_blk = head_blk > tail_blk ? tail_blk : 0;
 916        for (i = (int) head_blk - 1; i >= end_blk; i--) {
 917                error = xlog_bread(log, i, 1, bp, &offset);
 918                if (error)
 919                        goto out_error;
 920
 921                if (*(__be32 *) offset == cpu_to_be32(XLOG_HEADER_MAGIC_NUM)) {
 922                        *rblk = i;
 923                        *rhead = (struct xlog_rec_header *) offset;
 924                        if (++found == count)
 925                                break;
 926                }
 927        }
 928
 929        /*
 930         * If we haven't hit the tail block or the log record header count,
 931         * start looking again from the end of the physical log. Note that
 932         * callers can pass head == tail if the tail is not yet known.
 933         */
 934        if (tail_blk >= head_blk && found != count) {
 935                for (i = log->l_logBBsize - 1; i >= (int) tail_blk; i--) {
 936                        error = xlog_bread(log, i, 1, bp, &offset);
 937                        if (error)
 938                                goto out_error;
 939
 940                        if (*(__be32 *)offset ==
 941                            cpu_to_be32(XLOG_HEADER_MAGIC_NUM)) {
 942                                *wrapped = true;
 943                                *rblk = i;
 944                                *rhead = (struct xlog_rec_header *) offset;
 945                                if (++found == count)
 946                                        break;
 947                        }
 948                }
 949        }
 950
 951        return found;
 952
 953out_error:
 954        return error;
 955}
 956
 957/*
 958 * Seek forward in the log for log record headers.
 959 *
 960 * Given head and tail blocks, walk forward from the tail block until we find
 961 * the provided number of records or hit the head block. The return value is the
 962 * number of records encountered or a negative error code. The log block and
 963 * buffer pointer of the last record seen are returned in rblk and rhead
 964 * respectively.
 965 */
 966STATIC int
 967xlog_seek_logrec_hdr(
 968        struct xlog             *log,
 969        xfs_daddr_t             head_blk,
 970        xfs_daddr_t             tail_blk,
 971        int                     count,
 972        struct xfs_buf          *bp,
 973        xfs_daddr_t             *rblk,
 974        struct xlog_rec_header  **rhead,
 975        bool                    *wrapped)
 976{
 977        int                     i;
 978        int                     error;
 979        int                     found = 0;
 980        char                    *offset = NULL;
 981        xfs_daddr_t             end_blk;
 982
 983        *wrapped = false;
 984
 985        /*
 986         * Walk forward from the tail block until we hit the head or the last
 987         * block in the log.
 988         */
 989        end_blk = head_blk > tail_blk ? head_blk : log->l_logBBsize - 1;
 990        for (i = (int) tail_blk; i <= end_blk; i++) {
 991                error = xlog_bread(log, i, 1, bp, &offset);
 992                if (error)
 993                        goto out_error;
 994
 995                if (*(__be32 *) offset == cpu_to_be32(XLOG_HEADER_MAGIC_NUM)) {
 996                        *rblk = i;
 997                        *rhead = (struct xlog_rec_header *) offset;
 998                        if (++found == count)
 999                                break;
1000                }
1001        }
1002
1003        /*
1004         * If we haven't hit the head block or the log record header count,
1005         * start looking again from the start of the physical log.
1006         */
1007        if (tail_blk > head_blk && found != count) {
1008                for (i = 0; i < (int) head_blk; i++) {
1009                        error = xlog_bread(log, i, 1, bp, &offset);
1010                        if (error)
1011                                goto out_error;
1012
1013                        if (*(__be32 *)offset ==
1014                            cpu_to_be32(XLOG_HEADER_MAGIC_NUM)) {
1015                                *wrapped = true;
1016                                *rblk = i;
1017                                *rhead = (struct xlog_rec_header *) offset;
1018                                if (++found == count)
1019                                        break;
1020                        }
1021                }
1022        }
1023
1024        return found;
1025
1026out_error:
1027        return error;
1028}
1029
1030/*
1031 * Calculate distance from head to tail (i.e., unused space in the log).
1032 */
1033static inline int
1034xlog_tail_distance(
1035        struct xlog     *log,
1036        xfs_daddr_t     head_blk,
1037        xfs_daddr_t     tail_blk)
1038{
1039        if (head_blk < tail_blk)
1040                return tail_blk - head_blk;
1041
1042        return tail_blk + (log->l_logBBsize - head_blk);
1043}
1044
1045/*
1046 * Verify the log tail. This is particularly important when torn or incomplete
1047 * writes have been detected near the front of the log and the head has been
1048 * walked back accordingly.
1049 *
1050 * We also have to handle the case where the tail was pinned and the head
1051 * blocked behind the tail right before a crash. If the tail had been pushed
1052 * immediately prior to the crash and the subsequent checkpoint was only
1053 * partially written, it's possible it overwrote the last referenced tail in the
1054 * log with garbage. This is not a coherency problem because the tail must have
1055 * been pushed before it can be overwritten, but appears as log corruption to
1056 * recovery because we have no way to know the tail was updated if the
1057 * subsequent checkpoint didn't write successfully.
1058 *
1059 * Therefore, CRC check the log from tail to head. If a failure occurs and the
1060 * offending record is within max iclog bufs from the head, walk the tail
1061 * forward and retry until a valid tail is found or corruption is detected out
1062 * of the range of a possible overwrite.
1063 */
1064STATIC int
1065xlog_verify_tail(
1066        struct xlog             *log,
1067        xfs_daddr_t             head_blk,
1068        xfs_daddr_t             *tail_blk,
1069        int                     hsize)
1070{
1071        struct xlog_rec_header  *thead;
1072        struct xfs_buf          *bp;
1073        xfs_daddr_t             first_bad;
1074        int                     error = 0;
1075        bool                    wrapped;
1076        xfs_daddr_t             tmp_tail;
1077        xfs_daddr_t             orig_tail = *tail_blk;
1078
1079        bp = xlog_get_bp(log, 1);
1080        if (!bp)
1081                return -ENOMEM;
1082
1083        /*
1084         * Make sure the tail points to a record (returns positive count on
1085         * success).
1086         */
1087        error = xlog_seek_logrec_hdr(log, head_blk, *tail_blk, 1, bp,
1088                        &tmp_tail, &thead, &wrapped);
1089        if (error < 0)
1090                goto out;
1091        if (*tail_blk != tmp_tail)
1092                *tail_blk = tmp_tail;
1093
1094        /*
1095         * Run a CRC check from the tail to the head. We can't just check
1096         * MAX_ICLOGS records past the tail because the tail may point to stale
1097         * blocks cleared during the search for the head/tail. These blocks are
1098         * overwritten with zero-length records and thus record count is not a
1099         * reliable indicator of the iclog state before a crash.
1100         */
1101        first_bad = 0;
1102        error = xlog_do_recovery_pass(log, head_blk, *tail_blk,
1103                                      XLOG_RECOVER_CRCPASS, &first_bad);
1104        while ((error == -EFSBADCRC || error == -EFSCORRUPTED) && first_bad) {
1105                int     tail_distance;
1106
1107                /*
1108                 * Is corruption within range of the head? If so, retry from
1109                 * the next record. Otherwise return an error.
1110                 */
1111                tail_distance = xlog_tail_distance(log, head_blk, first_bad);
1112                if (tail_distance > BTOBB(XLOG_MAX_ICLOGS * hsize))
1113                        break;
1114
1115                /* skip to the next record; returns positive count on success */
1116                error = xlog_seek_logrec_hdr(log, head_blk, first_bad, 2, bp,
1117                                &tmp_tail, &thead, &wrapped);
1118                if (error < 0)
1119                        goto out;
1120
1121                *tail_blk = tmp_tail;
1122                first_bad = 0;
1123                error = xlog_do_recovery_pass(log, head_blk, *tail_blk,
1124                                              XLOG_RECOVER_CRCPASS, &first_bad);
1125        }
1126
1127        if (!error && *tail_blk != orig_tail)
1128                xfs_warn(log->l_mp,
1129                "Tail block (0x%llx) overwrite detected. Updated to 0x%llx",
1130                         orig_tail, *tail_blk);
1131out:
1132        xlog_put_bp(bp);
1133        return error;
1134}
1135
1136/*
1137 * Detect and trim torn writes from the head of the log.
1138 *
1139 * Storage without sector atomicity guarantees can result in torn writes in the
1140 * log in the event of a crash. Our only means to detect this scenario is via
1141 * CRC verification. While we can't always be certain that CRC verification
1142 * failure is due to a torn write vs. an unrelated corruption, we do know that
1143 * only a certain number (XLOG_MAX_ICLOGS) of log records can be written out at
1144 * one time. Therefore, CRC verify up to XLOG_MAX_ICLOGS records at the head of
1145 * the log and treat failures in this range as torn writes as a matter of
1146 * policy. In the event of CRC failure, the head is walked back to the last good
1147 * record in the log and the tail is updated from that record and verified.
1148 */
1149STATIC int
1150xlog_verify_head(
1151        struct xlog             *log,
1152        xfs_daddr_t             *head_blk,      /* in/out: unverified head */
1153        xfs_daddr_t             *tail_blk,      /* out: tail block */
1154        struct xfs_buf          *bp,
1155        xfs_daddr_t             *rhead_blk,     /* start blk of last record */
1156        struct xlog_rec_header  **rhead,        /* ptr to last record */
1157        bool                    *wrapped)       /* last rec. wraps phys. log */
1158{
1159        struct xlog_rec_header  *tmp_rhead;
1160        struct xfs_buf          *tmp_bp;
1161        xfs_daddr_t             first_bad;
1162        xfs_daddr_t             tmp_rhead_blk;
1163        int                     found;
1164        int                     error;
1165        bool                    tmp_wrapped;
1166
1167        /*
1168         * Check the head of the log for torn writes. Search backwards from the
1169         * head until we hit the tail or the maximum number of log record I/Os
1170         * that could have been in flight at one time. Use a temporary buffer so
1171         * we don't trash the rhead/bp pointers from the caller.
1172         */
1173        tmp_bp = xlog_get_bp(log, 1);
1174        if (!tmp_bp)
1175                return -ENOMEM;
1176        error = xlog_rseek_logrec_hdr(log, *head_blk, *tail_blk,
1177                                      XLOG_MAX_ICLOGS, tmp_bp, &tmp_rhead_blk,
1178                                      &tmp_rhead, &tmp_wrapped);
1179        xlog_put_bp(tmp_bp);
1180        if (error < 0)
1181                return error;
1182
1183        /*
1184         * Now run a CRC verification pass over the records starting at the
1185         * block found above to the current head. If a CRC failure occurs, the
1186         * log block of the first bad record is saved in first_bad.
1187         */
1188        error = xlog_do_recovery_pass(log, *head_blk, tmp_rhead_blk,
1189                                      XLOG_RECOVER_CRCPASS, &first_bad);
1190        if ((error == -EFSBADCRC || error == -EFSCORRUPTED) && first_bad) {
1191                /*
1192                 * We've hit a potential torn write. Reset the error and warn
1193                 * about it.
1194                 */
1195                error = 0;
1196                xfs_warn(log->l_mp,
1197"Torn write (CRC failure) detected at log block 0x%llx. Truncating head block from 0x%llx.",
1198                         first_bad, *head_blk);
1199
1200                /*
1201                 * Get the header block and buffer pointer for the last good
1202                 * record before the bad record.
1203                 *
1204                 * Note that xlog_find_tail() clears the blocks at the new head
1205                 * (i.e., the records with invalid CRC) if the cycle number
1206                 * matches the the current cycle.
1207                 */
1208                found = xlog_rseek_logrec_hdr(log, first_bad, *tail_blk, 1, bp,
1209                                              rhead_blk, rhead, wrapped);
1210                if (found < 0)
1211                        return found;
1212                if (found == 0)         /* XXX: right thing to do here? */
1213                        return -EIO;
1214
1215                /*
1216                 * Reset the head block to the starting block of the first bad
1217                 * log record and set the tail block based on the last good
1218                 * record.
1219                 *
1220                 * Bail out if the updated head/tail match as this indicates
1221                 * possible corruption outside of the acceptable
1222                 * (XLOG_MAX_ICLOGS) range. This is a job for xfs_repair...
1223                 */
1224                *head_blk = first_bad;
1225                *tail_blk = BLOCK_LSN(be64_to_cpu((*rhead)->h_tail_lsn));
1226                if (*head_blk == *tail_blk) {
1227                        ASSERT(0);
1228                        return 0;
1229                }
1230        }
1231        if (error)
1232                return error;
1233
1234        return xlog_verify_tail(log, *head_blk, tail_blk,
1235                                be32_to_cpu((*rhead)->h_size));
1236}
1237
1238/*
1239 * We need to make sure we handle log wrapping properly, so we can't use the
1240 * calculated logbno directly. Make sure it wraps to the correct bno inside the
1241 * log.
1242 *
1243 * The log is limited to 32 bit sizes, so we use the appropriate modulus
1244 * operation here and cast it back to a 64 bit daddr on return.
1245 */
1246static inline xfs_daddr_t
1247xlog_wrap_logbno(
1248        struct xlog             *log,
1249        xfs_daddr_t             bno)
1250{
1251        int                     mod;
1252
1253        div_s64_rem(bno, log->l_logBBsize, &mod);
1254        return mod;
1255}
1256
1257/*
1258 * Check whether the head of the log points to an unmount record. In other
1259 * words, determine whether the log is clean. If so, update the in-core state
1260 * appropriately.
1261 */
1262static int
1263xlog_check_unmount_rec(
1264        struct xlog             *log,
1265        xfs_daddr_t             *head_blk,
1266        xfs_daddr_t             *tail_blk,
1267        struct xlog_rec_header  *rhead,
1268        xfs_daddr_t             rhead_blk,
1269        struct xfs_buf          *bp,
1270        bool                    *clean)
1271{
1272        struct xlog_op_header   *op_head;
1273        xfs_daddr_t             umount_data_blk;
1274        xfs_daddr_t             after_umount_blk;
1275        int                     hblks;
1276        int                     error;
1277        char                    *offset;
1278
1279        *clean = false;
1280
1281        /*
1282         * Look for unmount record. If we find it, then we know there was a
1283         * clean unmount. Since 'i' could be the last block in the physical
1284         * log, we convert to a log block before comparing to the head_blk.
1285         *
1286         * Save the current tail lsn to use to pass to xlog_clear_stale_blocks()
1287         * below. We won't want to clear the unmount record if there is one, so
1288         * we pass the lsn of the unmount record rather than the block after it.
1289         */
1290        if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) {
1291                int     h_size = be32_to_cpu(rhead->h_size);
1292                int     h_version = be32_to_cpu(rhead->h_version);
1293
1294                if ((h_version & XLOG_VERSION_2) &&
1295                    (h_size > XLOG_HEADER_CYCLE_SIZE)) {
1296                        hblks = h_size / XLOG_HEADER_CYCLE_SIZE;
1297                        if (h_size % XLOG_HEADER_CYCLE_SIZE)
1298                                hblks++;
1299                } else {
1300                        hblks = 1;
1301                }
1302        } else {
1303                hblks = 1;
1304        }
1305
1306        after_umount_blk = xlog_wrap_logbno(log,
1307                        rhead_blk + hblks + BTOBB(be32_to_cpu(rhead->h_len)));
1308
1309        if (*head_blk == after_umount_blk &&
1310            be32_to_cpu(rhead->h_num_logops) == 1) {
1311                umount_data_blk = xlog_wrap_logbno(log, rhead_blk + hblks);
1312                error = xlog_bread(log, umount_data_blk, 1, bp, &offset);
1313                if (error)
1314                        return error;
1315
1316                op_head = (struct xlog_op_header *)offset;
1317                if (op_head->oh_flags & XLOG_UNMOUNT_TRANS) {
1318                        /*
1319                         * Set tail and last sync so that newly written log
1320                         * records will point recovery to after the current
1321                         * unmount record.
1322                         */
1323                        xlog_assign_atomic_lsn(&log->l_tail_lsn,
1324                                        log->l_curr_cycle, after_umount_blk);
1325                        xlog_assign_atomic_lsn(&log->l_last_sync_lsn,
1326                                        log->l_curr_cycle, after_umount_blk);
1327                        *tail_blk = after_umount_blk;
1328
1329                        *clean = true;
1330                }
1331        }
1332
1333        return 0;
1334}
1335
1336static void
1337xlog_set_state(
1338        struct xlog             *log,
1339        xfs_daddr_t             head_blk,
1340        struct xlog_rec_header  *rhead,
1341        xfs_daddr_t             rhead_blk,
1342        bool                    bump_cycle)
1343{
1344        /*
1345         * Reset log values according to the state of the log when we
1346         * crashed.  In the case where head_blk == 0, we bump curr_cycle
1347         * one because the next write starts a new cycle rather than
1348         * continuing the cycle of the last good log record.  At this
1349         * point we have guaranteed that all partial log records have been
1350         * accounted for.  Therefore, we know that the last good log record
1351         * written was complete and ended exactly on the end boundary
1352         * of the physical log.
1353         */
1354        log->l_prev_block = rhead_blk;
1355        log->l_curr_block = (int)head_blk;
1356        log->l_curr_cycle = be32_to_cpu(rhead->h_cycle);
1357        if (bump_cycle)
1358                log->l_curr_cycle++;
1359        atomic64_set(&log->l_tail_lsn, be64_to_cpu(rhead->h_tail_lsn));
1360        atomic64_set(&log->l_last_sync_lsn, be64_to_cpu(rhead->h_lsn));
1361        xlog_assign_grant_head(&log->l_reserve_head.grant, log->l_curr_cycle,
1362                                        BBTOB(log->l_curr_block));
1363        xlog_assign_grant_head(&log->l_write_head.grant, log->l_curr_cycle,
1364                                        BBTOB(log->l_curr_block));
1365}
1366
1367/*
1368 * Find the sync block number or the tail of the log.
1369 *
1370 * This will be the block number of the last record to have its
1371 * associated buffers synced to disk.  Every log record header has
1372 * a sync lsn embedded in it.  LSNs hold block numbers, so it is easy
1373 * to get a sync block number.  The only concern is to figure out which
1374 * log record header to believe.
1375 *
1376 * The following algorithm uses the log record header with the largest
1377 * lsn.  The entire log record does not need to be valid.  We only care
1378 * that the header is valid.
1379 *
1380 * We could speed up search by using current head_blk buffer, but it is not
1381 * available.
1382 */
1383STATIC int
1384xlog_find_tail(
1385        struct xlog             *log,
1386        xfs_daddr_t             *head_blk,
1387        xfs_daddr_t             *tail_blk)
1388{
1389        xlog_rec_header_t       *rhead;
1390        char                    *offset = NULL;
1391        xfs_buf_t               *bp;
1392        int                     error;
1393        xfs_daddr_t             rhead_blk;
1394        xfs_lsn_t               tail_lsn;
1395        bool                    wrapped = false;
1396        bool                    clean = false;
1397
1398        /*
1399         * Find previous log record
1400         */
1401        if ((error = xlog_find_head(log, head_blk)))
1402                return error;
1403        ASSERT(*head_blk < INT_MAX);
1404
1405        bp = xlog_get_bp(log, 1);
1406        if (!bp)
1407                return -ENOMEM;
1408        if (*head_blk == 0) {                           /* special case */
1409                error = xlog_bread(log, 0, 1, bp, &offset);
1410                if (error)
1411                        goto done;
1412
1413                if (xlog_get_cycle(offset) == 0) {
1414                        *tail_blk = 0;
1415                        /* leave all other log inited values alone */
1416                        goto done;
1417                }
1418        }
1419
1420        /*
1421         * Search backwards through the log looking for the log record header
1422         * block. This wraps all the way back around to the head so something is
1423         * seriously wrong if we can't find it.
1424         */
1425        error = xlog_rseek_logrec_hdr(log, *head_blk, *head_blk, 1, bp,
1426                                      &rhead_blk, &rhead, &wrapped);
1427        if (error < 0)
1428                return error;
1429        if (!error) {
1430                xfs_warn(log->l_mp, "%s: couldn't find sync record", __func__);
1431                return -EIO;
1432        }
1433        *tail_blk = BLOCK_LSN(be64_to_cpu(rhead->h_tail_lsn));
1434
1435        /*
1436         * Set the log state based on the current head record.
1437         */
1438        xlog_set_state(log, *head_blk, rhead, rhead_blk, wrapped);
1439        tail_lsn = atomic64_read(&log->l_tail_lsn);
1440
1441        /*
1442         * Look for an unmount record at the head of the log. This sets the log
1443         * state to determine whether recovery is necessary.
1444         */
1445        error = xlog_check_unmount_rec(log, head_blk, tail_blk, rhead,
1446                                       rhead_blk, bp, &clean);
1447        if (error)
1448                goto done;
1449
1450        /*
1451         * Verify the log head if the log is not clean (e.g., we have anything
1452         * but an unmount record at the head). This uses CRC verification to
1453         * detect and trim torn writes. If discovered, CRC failures are
1454         * considered torn writes and the log head is trimmed accordingly.
1455         *
1456         * Note that we can only run CRC verification when the log is dirty
1457         * because there's no guarantee that the log data behind an unmount
1458         * record is compatible with the current architecture.
1459         */
1460        if (!clean) {
1461                xfs_daddr_t     orig_head = *head_blk;
1462
1463                error = xlog_verify_head(log, head_blk, tail_blk, bp,
1464                                         &rhead_blk, &rhead, &wrapped);
1465                if (error)
1466                        goto done;
1467
1468                /* update in-core state again if the head changed */
1469                if (*head_blk != orig_head) {
1470                        xlog_set_state(log, *head_blk, rhead, rhead_blk,
1471                                       wrapped);
1472                        tail_lsn = atomic64_read(&log->l_tail_lsn);
1473                        error = xlog_check_unmount_rec(log, head_blk, tail_blk,
1474                                                       rhead, rhead_blk, bp,
1475                                                       &clean);
1476                        if (error)
1477                                goto done;
1478                }
1479        }
1480
1481        /*
1482         * Note that the unmount was clean. If the unmount was not clean, we
1483         * need to know this to rebuild the superblock counters from the perag
1484         * headers if we have a filesystem using non-persistent counters.
1485         */
1486        if (clean)
1487                log->l_mp->m_flags |= XFS_MOUNT_WAS_CLEAN;
1488
1489        /*
1490         * Make sure that there are no blocks in front of the head
1491         * with the same cycle number as the head.  This can happen
1492         * because we allow multiple outstanding log writes concurrently,
1493         * and the later writes might make it out before earlier ones.
1494         *
1495         * We use the lsn from before modifying it so that we'll never
1496         * overwrite the unmount record after a clean unmount.
1497         *
1498         * Do this only if we are going to recover the filesystem
1499         *
1500         * NOTE: This used to say "if (!readonly)"
1501         * However on Linux, we can & do recover a read-only filesystem.
1502         * We only skip recovery if NORECOVERY is specified on mount,
1503         * in which case we would not be here.
1504         *
1505         * But... if the -device- itself is readonly, just skip this.
1506         * We can't recover this device anyway, so it won't matter.
1507         */
1508        if (!xfs_readonly_buftarg(log->l_mp->m_logdev_targp))
1509                error = xlog_clear_stale_blocks(log, tail_lsn);
1510
1511done:
1512        xlog_put_bp(bp);
1513
1514        if (error)
1515                xfs_warn(log->l_mp, "failed to locate log tail");
1516        return error;
1517}
1518
1519/*
1520 * Is the log zeroed at all?
1521 *
1522 * The last binary search should be changed to perform an X block read
1523 * once X becomes small enough.  You can then search linearly through
1524 * the X blocks.  This will cut down on the number of reads we need to do.
1525 *
1526 * If the log is partially zeroed, this routine will pass back the blkno
1527 * of the first block with cycle number 0.  It won't have a complete LR
1528 * preceding it.
1529 *
1530 * Return:
1531 *      0  => the log is completely written to
1532 *      1 => use *blk_no as the first block of the log
1533 *      <0 => error has occurred
1534 */
1535STATIC int
1536xlog_find_zeroed(
1537        struct xlog     *log,
1538        xfs_daddr_t     *blk_no)
1539{
1540        xfs_buf_t       *bp;
1541        char            *offset;
1542        uint            first_cycle, last_cycle;
1543        xfs_daddr_t     new_blk, last_blk, start_blk;
1544        xfs_daddr_t     num_scan_bblks;
1545        int             error, log_bbnum = log->l_logBBsize;
1546
1547        *blk_no = 0;
1548
1549        /* check totally zeroed log */
1550        bp = xlog_get_bp(log, 1);
1551        if (!bp)
1552                return -ENOMEM;
1553        error = xlog_bread(log, 0, 1, bp, &offset);
1554        if (error)
1555                goto bp_err;
1556
1557        first_cycle = xlog_get_cycle(offset);
1558        if (first_cycle == 0) {         /* completely zeroed log */
1559                *blk_no = 0;
1560                xlog_put_bp(bp);
1561                return 1;
1562        }
1563
1564        /* check partially zeroed log */
1565        error = xlog_bread(log, log_bbnum-1, 1, bp, &offset);
1566        if (error)
1567                goto bp_err;
1568
1569        last_cycle = xlog_get_cycle(offset);
1570        if (last_cycle != 0) {          /* log completely written to */
1571                xlog_put_bp(bp);
1572                return 0;
1573        } else if (first_cycle != 1) {
1574                /*
1575                 * If the cycle of the last block is zero, the cycle of
1576                 * the first block must be 1. If it's not, maybe we're
1577                 * not looking at a log... Bail out.
1578                 */
1579                xfs_warn(log->l_mp,
1580                        "Log inconsistent or not a log (last==0, first!=1)");
1581                error = -EINVAL;
1582                goto bp_err;
1583        }
1584
1585        /* we have a partially zeroed log */
1586        last_blk = log_bbnum-1;
1587        if ((error = xlog_find_cycle_start(log, bp, 0, &last_blk, 0)))
1588                goto bp_err;
1589
1590        /*
1591         * Validate the answer.  Because there is no way to guarantee that
1592         * the entire log is made up of log records which are the same size,
1593         * we scan over the defined maximum blocks.  At this point, the maximum
1594         * is not chosen to mean anything special.   XXXmiken
1595         */
1596        num_scan_bblks = XLOG_TOTAL_REC_SHIFT(log);
1597        ASSERT(num_scan_bblks <= INT_MAX);
1598
1599        if (last_blk < num_scan_bblks)
1600                num_scan_bblks = last_blk;
1601        start_blk = last_blk - num_scan_bblks;
1602
1603        /*
1604         * We search for any instances of cycle number 0 that occur before
1605         * our current estimate of the head.  What we're trying to detect is
1606         *        1 ... | 0 | 1 | 0...
1607         *                       ^ binary search ends here
1608         */
1609        if ((error = xlog_find_verify_cycle(log, start_blk,
1610                                         (int)num_scan_bblks, 0, &new_blk)))
1611                goto bp_err;
1612        if (new_blk != -1)
1613                last_blk = new_blk;
1614
1615        /*
1616         * Potentially backup over partial log record write.  We don't need
1617         * to search the end of the log because we know it is zero.
1618         */
1619        error = xlog_find_verify_log_record(log, start_blk, &last_blk, 0);
1620        if (error == 1)
1621                error = -EIO;
1622        if (error)
1623                goto bp_err;
1624
1625        *blk_no = last_blk;
1626bp_err:
1627        xlog_put_bp(bp);
1628        if (error)
1629                return error;
1630        return 1;
1631}
1632
1633/*
1634 * These are simple subroutines used by xlog_clear_stale_blocks() below
1635 * to initialize a buffer full of empty log record headers and write
1636 * them into the log.
1637 */
1638STATIC void
1639xlog_add_record(
1640        struct xlog             *log,
1641        char                    *buf,
1642        int                     cycle,
1643        int                     block,
1644        int                     tail_cycle,
1645        int                     tail_block)
1646{
1647        xlog_rec_header_t       *recp = (xlog_rec_header_t *)buf;
1648
1649        memset(buf, 0, BBSIZE);
1650        recp->h_magicno = cpu_to_be32(XLOG_HEADER_MAGIC_NUM);
1651        recp->h_cycle = cpu_to_be32(cycle);
1652        recp->h_version = cpu_to_be32(
1653                        xfs_sb_version_haslogv2(&log->l_mp->m_sb) ? 2 : 1);
1654        recp->h_lsn = cpu_to_be64(xlog_assign_lsn(cycle, block));
1655        recp->h_tail_lsn = cpu_to_be64(xlog_assign_lsn(tail_cycle, tail_block));
1656        recp->h_fmt = cpu_to_be32(XLOG_FMT);
1657        memcpy(&recp->h_fs_uuid, &log->l_mp->m_sb.sb_uuid, sizeof(uuid_t));
1658}
1659
1660STATIC int
1661xlog_write_log_records(
1662        struct xlog     *log,
1663        int             cycle,
1664        int             start_block,
1665        int             blocks,
1666        int             tail_cycle,
1667        int             tail_block)
1668{
1669        char            *offset;
1670        xfs_buf_t       *bp;
1671        int             balign, ealign;
1672        int             sectbb = log->l_sectBBsize;
1673        int             end_block = start_block + blocks;
1674        int             bufblks;
1675        int             error = 0;
1676        int             i, j = 0;
1677
1678        /*
1679         * Greedily allocate a buffer big enough to handle the full
1680         * range of basic blocks to be written.  If that fails, try
1681         * a smaller size.  We need to be able to write at least a
1682         * log sector, or we're out of luck.
1683         */
1684        bufblks = 1 << ffs(blocks);
1685        while (bufblks > log->l_logBBsize)
1686                bufblks >>= 1;
1687        while (!(bp = xlog_get_bp(log, bufblks))) {
1688                bufblks >>= 1;
1689                if (bufblks < sectbb)
1690                        return -ENOMEM;
1691        }
1692
1693        /* We may need to do a read at the start to fill in part of
1694         * the buffer in the starting sector not covered by the first
1695         * write below.
1696         */
1697        balign = round_down(start_block, sectbb);
1698        if (balign != start_block) {
1699                error = xlog_bread_noalign(log, start_block, 1, bp);
1700                if (error)
1701                        goto out_put_bp;
1702
1703                j = start_block - balign;
1704        }
1705
1706        for (i = start_block; i < end_block; i += bufblks) {
1707                int             bcount, endcount;
1708
1709                bcount = min(bufblks, end_block - start_block);
1710                endcount = bcount - j;
1711
1712                /* We may need to do a read at the end to fill in part of
1713                 * the buffer in the final sector not covered by the write.
1714                 * If this is the same sector as the above read, skip it.
1715                 */
1716                ealign = round_down(end_block, sectbb);
1717                if (j == 0 && (start_block + endcount > ealign)) {
1718                        offset = bp->b_addr + BBTOB(ealign - start_block);
1719                        error = xlog_bread_offset(log, ealign, sectbb,
1720                                                        bp, offset);
1721                        if (error)
1722                                break;
1723
1724                }
1725
1726                offset = xlog_align(log, start_block, endcount, bp);
1727                for (; j < endcount; j++) {
1728                        xlog_add_record(log, offset, cycle, i+j,
1729                                        tail_cycle, tail_block);
1730                        offset += BBSIZE;
1731                }
1732                error = xlog_bwrite(log, start_block, endcount, bp);
1733                if (error)
1734                        break;
1735                start_block += endcount;
1736                j = 0;
1737        }
1738
1739 out_put_bp:
1740        xlog_put_bp(bp);
1741        return error;
1742}
1743
1744/*
1745 * This routine is called to blow away any incomplete log writes out
1746 * in front of the log head.  We do this so that we won't become confused
1747 * if we come up, write only a little bit more, and then crash again.
1748 * If we leave the partial log records out there, this situation could
1749 * cause us to think those partial writes are valid blocks since they
1750 * have the current cycle number.  We get rid of them by overwriting them
1751 * with empty log records with the old cycle number rather than the
1752 * current one.
1753 *
1754 * The tail lsn is passed in rather than taken from
1755 * the log so that we will not write over the unmount record after a
1756 * clean unmount in a 512 block log.  Doing so would leave the log without
1757 * any valid log records in it until a new one was written.  If we crashed
1758 * during that time we would not be able to recover.
1759 */
1760STATIC int
1761xlog_clear_stale_blocks(
1762        struct xlog     *log,
1763        xfs_lsn_t       tail_lsn)
1764{
1765        int             tail_cycle, head_cycle;
1766        int             tail_block, head_block;
1767        int             tail_distance, max_distance;
1768        int             distance;
1769        int             error;
1770
1771        tail_cycle = CYCLE_LSN(tail_lsn);
1772        tail_block = BLOCK_LSN(tail_lsn);
1773        head_cycle = log->l_curr_cycle;
1774        head_block = log->l_curr_block;
1775
1776        /*
1777         * Figure out the distance between the new head of the log
1778         * and the tail.  We want to write over any blocks beyond the
1779         * head that we may have written just before the crash, but
1780         * we don't want to overwrite the tail of the log.
1781         */
1782        if (head_cycle == tail_cycle) {
1783                /*
1784                 * The tail is behind the head in the physical log,
1785                 * so the distance from the head to the tail is the
1786                 * distance from the head to the end of the log plus
1787                 * the distance from the beginning of the log to the
1788                 * tail.
1789                 */
1790                if (unlikely(head_block < tail_block || head_block >= log->l_logBBsize)) {
1791                        XFS_ERROR_REPORT("xlog_clear_stale_blocks(1)",
1792                                         XFS_ERRLEVEL_LOW, log->l_mp);
1793                        return -EFSCORRUPTED;
1794                }
1795                tail_distance = tail_block + (log->l_logBBsize - head_block);
1796        } else {
1797                /*
1798                 * The head is behind the tail in the physical log,
1799                 * so the distance from the head to the tail is just
1800                 * the tail block minus the head block.
1801                 */
1802                if (unlikely(head_block >= tail_block || head_cycle != (tail_cycle + 1))){
1803                        XFS_ERROR_REPORT("xlog_clear_stale_blocks(2)",
1804                                         XFS_ERRLEVEL_LOW, log->l_mp);
1805                        return -EFSCORRUPTED;
1806                }
1807                tail_distance = tail_block - head_block;
1808        }
1809
1810        /*
1811         * If the head is right up against the tail, we can't clear
1812         * anything.
1813         */
1814        if (tail_distance <= 0) {
1815                ASSERT(tail_distance == 0);
1816                return 0;
1817        }
1818
1819        max_distance = XLOG_TOTAL_REC_SHIFT(log);
1820        /*
1821         * Take the smaller of the maximum amount of outstanding I/O
1822         * we could have and the distance to the tail to clear out.
1823         * We take the smaller so that we don't overwrite the tail and
1824         * we don't waste all day writing from the head to the tail
1825         * for no reason.
1826         */
1827        max_distance = min(max_distance, tail_distance);
1828
1829        if ((head_block + max_distance) <= log->l_logBBsize) {
1830                /*
1831                 * We can stomp all the blocks we need to without
1832                 * wrapping around the end of the log.  Just do it
1833                 * in a single write.  Use the cycle number of the
1834                 * current cycle minus one so that the log will look like:
1835                 *     n ... | n - 1 ...
1836                 */
1837                error = xlog_write_log_records(log, (head_cycle - 1),
1838                                head_block, max_distance, tail_cycle,
1839                                tail_block);
1840                if (error)
1841                        return error;
1842        } else {
1843                /*
1844                 * We need to wrap around the end of the physical log in
1845                 * order to clear all the blocks.  Do it in two separate
1846                 * I/Os.  The first write should be from the head to the
1847                 * end of the physical log, and it should use the current
1848                 * cycle number minus one just like above.
1849                 */
1850                distance = log->l_logBBsize - head_block;
1851                error = xlog_write_log_records(log, (head_cycle - 1),
1852                                head_block, distance, tail_cycle,
1853                                tail_block);
1854
1855                if (error)
1856                        return error;
1857
1858                /*
1859                 * Now write the blocks at the start of the physical log.
1860                 * This writes the remainder of the blocks we want to clear.
1861                 * It uses the current cycle number since we're now on the
1862                 * same cycle as the head so that we get:
1863                 *    n ... n ... | n - 1 ...
1864                 *    ^^^^^ blocks we're writing
1865                 */
1866                distance = max_distance - (log->l_logBBsize - head_block);
1867                error = xlog_write_log_records(log, head_cycle, 0, distance,
1868                                tail_cycle, tail_block);
1869                if (error)
1870                        return error;
1871        }
1872
1873        return 0;
1874}
1875
1876/******************************************************************************
1877 *
1878 *              Log recover routines
1879 *
1880 ******************************************************************************
1881 */
1882
1883/*
1884 * Sort the log items in the transaction.
1885 *
1886 * The ordering constraints are defined by the inode allocation and unlink
1887 * behaviour. The rules are:
1888 *
1889 *      1. Every item is only logged once in a given transaction. Hence it
1890 *         represents the last logged state of the item. Hence ordering is
1891 *         dependent on the order in which operations need to be performed so
1892 *         required initial conditions are always met.
1893 *
1894 *      2. Cancelled buffers are recorded in pass 1 in a separate table and
1895 *         there's nothing to replay from them so we can simply cull them
1896 *         from the transaction. However, we can't do that until after we've
1897 *         replayed all the other items because they may be dependent on the
1898 *         cancelled buffer and replaying the cancelled buffer can remove it
1899 *         form the cancelled buffer table. Hence they have tobe done last.
1900 *
1901 *      3. Inode allocation buffers must be replayed before inode items that
1902 *         read the buffer and replay changes into it. For filesystems using the
1903 *         ICREATE transactions, this means XFS_LI_ICREATE objects need to get
1904 *         treated the same as inode allocation buffers as they create and
1905 *         initialise the buffers directly.
1906 *
1907 *      4. Inode unlink buffers must be replayed after inode items are replayed.
1908 *         This ensures that inodes are completely flushed to the inode buffer
1909 *         in a "free" state before we remove the unlinked inode list pointer.
1910 *
1911 * Hence the ordering needs to be inode allocation buffers first, inode items
1912 * second, inode unlink buffers third and cancelled buffers last.
1913 *
1914 * But there's a problem with that - we can't tell an inode allocation buffer
1915 * apart from a regular buffer, so we can't separate them. We can, however,
1916 * tell an inode unlink buffer from the others, and so we can separate them out
1917 * from all the other buffers and move them to last.
1918 *
1919 * Hence, 4 lists, in order from head to tail:
1920 *      - buffer_list for all buffers except cancelled/inode unlink buffers
1921 *      - item_list for all non-buffer items
1922 *      - inode_buffer_list for inode unlink buffers
1923 *      - cancel_list for the cancelled buffers
1924 *
1925 * Note that we add objects to the tail of the lists so that first-to-last
1926 * ordering is preserved within the lists. Adding objects to the head of the
1927 * list means when we traverse from the head we walk them in last-to-first
1928 * order. For cancelled buffers and inode unlink buffers this doesn't matter,
1929 * but for all other items there may be specific ordering that we need to
1930 * preserve.
1931 */
1932STATIC int
1933xlog_recover_reorder_trans(
1934        struct xlog             *log,
1935        struct xlog_recover     *trans,
1936        int                     pass)
1937{
1938        xlog_recover_item_t     *item, *n;
1939        int                     error = 0;
1940        LIST_HEAD(sort_list);
1941        LIST_HEAD(cancel_list);
1942        LIST_HEAD(buffer_list);
1943        LIST_HEAD(inode_buffer_list);
1944        LIST_HEAD(inode_list);
1945
1946        list_splice_init(&trans->r_itemq, &sort_list);
1947        list_for_each_entry_safe(item, n, &sort_list, ri_list) {
1948                xfs_buf_log_format_t    *buf_f = item->ri_buf[0].i_addr;
1949
1950                switch (ITEM_TYPE(item)) {
1951                case XFS_LI_ICREATE:
1952                        list_move_tail(&item->ri_list, &buffer_list);
1953                        break;
1954                case XFS_LI_BUF:
1955                        if (buf_f->blf_flags & XFS_BLF_CANCEL) {
1956                                trace_xfs_log_recover_item_reorder_head(log,
1957                                                        trans, item, pass);
1958                                list_move(&item->ri_list, &cancel_list);
1959                                break;
1960                        }
1961                        if (buf_f->blf_flags & XFS_BLF_INODE_BUF) {
1962                                list_move(&item->ri_list, &inode_buffer_list);
1963                                break;
1964                        }
1965                        list_move_tail(&item->ri_list, &buffer_list);
1966                        break;
1967                case XFS_LI_INODE:
1968                case XFS_LI_DQUOT:
1969                case XFS_LI_QUOTAOFF:
1970                case XFS_LI_EFD:
1971                case XFS_LI_EFI:
1972                case XFS_LI_RUI:
1973                case XFS_LI_RUD:
1974                case XFS_LI_CUI:
1975                case XFS_LI_CUD:
1976                case XFS_LI_BUI:
1977                case XFS_LI_BUD:
1978                        trace_xfs_log_recover_item_reorder_tail(log,
1979                                                        trans, item, pass);
1980                        list_move_tail(&item->ri_list, &inode_list);
1981                        break;
1982                default:
1983                        xfs_warn(log->l_mp,
1984                                "%s: unrecognized type of log operation",
1985                                __func__);
1986                        ASSERT(0);
1987                        /*
1988                         * return the remaining items back to the transaction
1989                         * item list so they can be freed in caller.
1990                         */
1991                        if (!list_empty(&sort_list))
1992                                list_splice_init(&sort_list, &trans->r_itemq);
1993                        error = -EIO;
1994                        goto out;
1995                }
1996        }
1997out:
1998        ASSERT(list_empty(&sort_list));
1999        if (!list_empty(&buffer_list))
2000                list_splice(&buffer_list, &trans->r_itemq);
2001        if (!list_empty(&inode_list))
2002                list_splice_tail(&inode_list, &trans->r_itemq);
2003        if (!list_empty(&inode_buffer_list))
2004                list_splice_tail(&inode_buffer_list, &trans->r_itemq);
2005        if (!list_empty(&cancel_list))
2006                list_splice_tail(&cancel_list, &trans->r_itemq);
2007        return error;
2008}
2009
2010/*
2011 * Build up the table of buf cancel records so that we don't replay
2012 * cancelled data in the second pass.  For buffer records that are
2013 * not cancel records, there is nothing to do here so we just return.
2014 *
2015 * If we get a cancel record which is already in the table, this indicates
2016 * that the buffer was cancelled multiple times.  In order to ensure
2017 * that during pass 2 we keep the record in the table until we reach its
2018 * last occurrence in the log, we keep a reference count in the cancel
2019 * record in the table to tell us how many times we expect to see this
2020 * record during the second pass.
2021 */
2022STATIC int
2023xlog_recover_buffer_pass1(
2024        struct xlog                     *log,
2025        struct xlog_recover_item        *item)
2026{
2027        xfs_buf_log_format_t    *buf_f = item->ri_buf[0].i_addr;
2028        struct list_head        *bucket;
2029        struct xfs_buf_cancel   *bcp;
2030
2031        /*
2032         * If this isn't a cancel buffer item, then just return.
2033         */
2034        if (!(buf_f->blf_flags & XFS_BLF_CANCEL)) {
2035                trace_xfs_log_recover_buf_not_cancel(log, buf_f);
2036                return 0;
2037        }
2038
2039        /*
2040         * Insert an xfs_buf_cancel record into the hash table of them.
2041         * If there is already an identical record, bump its reference count.
2042         */
2043        bucket = XLOG_BUF_CANCEL_BUCKET(log, buf_f->blf_blkno);
2044        list_for_each_entry(bcp, bucket, bc_list) {
2045                if (bcp->bc_blkno == buf_f->blf_blkno &&
2046                    bcp->bc_len == buf_f->blf_len) {
2047                        bcp->bc_refcount++;
2048                        trace_xfs_log_recover_buf_cancel_ref_inc(log, buf_f);
2049                        return 0;
2050                }
2051        }
2052
2053        bcp = kmem_alloc(sizeof(struct xfs_buf_cancel), KM_SLEEP);
2054        bcp->bc_blkno = buf_f->blf_blkno;
2055        bcp->bc_len = buf_f->blf_len;
2056        bcp->bc_refcount = 1;
2057        list_add_tail(&bcp->bc_list, bucket);
2058
2059        trace_xfs_log_recover_buf_cancel_add(log, buf_f);
2060        return 0;
2061}
2062
2063/*
2064 * Check to see whether the buffer being recovered has a corresponding
2065 * entry in the buffer cancel record table. If it is, return the cancel
2066 * buffer structure to the caller.
2067 */
2068STATIC struct xfs_buf_cancel *
2069xlog_peek_buffer_cancelled(
2070        struct xlog             *log,
2071        xfs_daddr_t             blkno,
2072        uint                    len,
2073        unsigned short                  flags)
2074{
2075        struct list_head        *bucket;
2076        struct xfs_buf_cancel   *bcp;
2077
2078        if (!log->l_buf_cancel_table) {
2079                /* empty table means no cancelled buffers in the log */
2080                ASSERT(!(flags & XFS_BLF_CANCEL));
2081                return NULL;
2082        }
2083
2084        bucket = XLOG_BUF_CANCEL_BUCKET(log, blkno);
2085        list_for_each_entry(bcp, bucket, bc_list) {
2086                if (bcp->bc_blkno == blkno && bcp->bc_len == len)
2087                        return bcp;
2088        }
2089
2090        /*
2091         * We didn't find a corresponding entry in the table, so return 0 so
2092         * that the buffer is NOT cancelled.
2093         */
2094        ASSERT(!(flags & XFS_BLF_CANCEL));
2095        return NULL;
2096}
2097
2098/*
2099 * If the buffer is being cancelled then return 1 so that it will be cancelled,
2100 * otherwise return 0.  If the buffer is actually a buffer cancel item
2101 * (XFS_BLF_CANCEL is set), then decrement the refcount on the entry in the
2102 * table and remove it from the table if this is the last reference.
2103 *
2104 * We remove the cancel record from the table when we encounter its last
2105 * occurrence in the log so that if the same buffer is re-used again after its
2106 * last cancellation we actually replay the changes made at that point.
2107 */
2108STATIC int
2109xlog_check_buffer_cancelled(
2110        struct xlog             *log,
2111        xfs_daddr_t             blkno,
2112        uint                    len,
2113        unsigned short                  flags)
2114{
2115        struct xfs_buf_cancel   *bcp;
2116
2117        bcp = xlog_peek_buffer_cancelled(log, blkno, len, flags);
2118        if (!bcp)
2119                return 0;
2120
2121        /*
2122         * We've go a match, so return 1 so that the recovery of this buffer
2123         * is cancelled.  If this buffer is actually a buffer cancel log
2124         * item, then decrement the refcount on the one in the table and
2125         * remove it if this is the last reference.
2126         */
2127        if (flags & XFS_BLF_CANCEL) {
2128                if (--bcp->bc_refcount == 0) {
2129                        list_del(&bcp->bc_list);
2130                        kmem_free(bcp);
2131                }
2132        }
2133        return 1;
2134}
2135
2136/*
2137 * Perform recovery for a buffer full of inodes.  In these buffers, the only
2138 * data which should be recovered is that which corresponds to the
2139 * di_next_unlinked pointers in the on disk inode structures.  The rest of the
2140 * data for the inodes is always logged through the inodes themselves rather
2141 * than the inode buffer and is recovered in xlog_recover_inode_pass2().
2142 *
2143 * The only time when buffers full of inodes are fully recovered is when the
2144 * buffer is full of newly allocated inodes.  In this case the buffer will
2145 * not be marked as an inode buffer and so will be sent to
2146 * xlog_recover_do_reg_buffer() below during recovery.
2147 */
2148STATIC int
2149xlog_recover_do_inode_buffer(
2150        struct xfs_mount        *mp,
2151        xlog_recover_item_t     *item,
2152        struct xfs_buf          *bp,
2153        xfs_buf_log_format_t    *buf_f)
2154{
2155        int                     i;
2156        int                     item_index = 0;
2157        int                     bit = 0;
2158        int                     nbits = 0;
2159        int                     reg_buf_offset = 0;
2160        int                     reg_buf_bytes = 0;
2161        int                     next_unlinked_offset;
2162        int                     inodes_per_buf;
2163        xfs_agino_t             *logged_nextp;
2164        xfs_agino_t             *buffer_nextp;
2165
2166        trace_xfs_log_recover_buf_inode_buf(mp->m_log, buf_f);
2167
2168        /*
2169         * Post recovery validation only works properly on CRC enabled
2170         * filesystems.
2171         */
2172        if (xfs_sb_version_hascrc(&mp->m_sb))
2173                bp->b_ops = &xfs_inode_buf_ops;
2174
2175        inodes_per_buf = BBTOB(bp->b_io_length) >> mp->m_sb.sb_inodelog;
2176        for (i = 0; i < inodes_per_buf; i++) {
2177                next_unlinked_offset = (i * mp->m_sb.sb_inodesize) +
2178                        offsetof(xfs_dinode_t, di_next_unlinked);
2179
2180                while (next_unlinked_offset >=
2181                       (reg_buf_offset + reg_buf_bytes)) {
2182                        /*
2183                         * The next di_next_unlinked field is beyond
2184                         * the current logged region.  Find the next
2185                         * logged region that contains or is beyond
2186                         * the current di_next_unlinked field.
2187                         */
2188                        bit += nbits;
2189                        bit = xfs_next_bit(buf_f->blf_data_map,
2190                                           buf_f->blf_map_size, bit);
2191
2192                        /*
2193                         * If there are no more logged regions in the
2194                         * buffer, then we're done.
2195                         */
2196                        if (bit == -1)
2197                                return 0;
2198
2199                        nbits = xfs_contig_bits(buf_f->blf_data_map,
2200                                                buf_f->blf_map_size, bit);
2201                        ASSERT(nbits > 0);
2202                        reg_buf_offset = bit << XFS_BLF_SHIFT;
2203                        reg_buf_bytes = nbits << XFS_BLF_SHIFT;
2204                        item_index++;
2205                }
2206
2207                /*
2208                 * If the current logged region starts after the current
2209                 * di_next_unlinked field, then move on to the next
2210                 * di_next_unlinked field.
2211                 */
2212                if (next_unlinked_offset < reg_buf_offset)
2213                        continue;
2214
2215                ASSERT(item->ri_buf[item_index].i_addr != NULL);
2216                ASSERT((item->ri_buf[item_index].i_len % XFS_BLF_CHUNK) == 0);
2217                ASSERT((reg_buf_offset + reg_buf_bytes) <=
2218                                                        BBTOB(bp->b_io_length));
2219
2220                /*
2221                 * The current logged region contains a copy of the
2222                 * current di_next_unlinked field.  Extract its value
2223                 * and copy it to the buffer copy.
2224                 */
2225                logged_nextp = item->ri_buf[item_index].i_addr +
2226                                next_unlinked_offset - reg_buf_offset;
2227                if (unlikely(*logged_nextp == 0)) {
2228                        xfs_alert(mp,
2229                "Bad inode buffer log record (ptr = "PTR_FMT", bp = "PTR_FMT"). "
2230                "Trying to replay bad (0) inode di_next_unlinked field.",
2231                                item, bp);
2232                        XFS_ERROR_REPORT("xlog_recover_do_inode_buf",
2233                                         XFS_ERRLEVEL_LOW, mp);
2234                        return -EFSCORRUPTED;
2235                }
2236
2237                buffer_nextp = xfs_buf_offset(bp, next_unlinked_offset);
2238                *buffer_nextp = *logged_nextp;
2239
2240                /*
2241                 * If necessary, recalculate the CRC in the on-disk inode. We
2242                 * have to leave the inode in a consistent state for whoever
2243                 * reads it next....
2244                 */
2245                xfs_dinode_calc_crc(mp,
2246                                xfs_buf_offset(bp, i * mp->m_sb.sb_inodesize));
2247
2248        }
2249
2250        return 0;
2251}
2252
2253/*
2254 * V5 filesystems know the age of the buffer on disk being recovered. We can
2255 * have newer objects on disk than we are replaying, and so for these cases we
2256 * don't want to replay the current change as that will make the buffer contents
2257 * temporarily invalid on disk.
2258 *
2259 * The magic number might not match the buffer type we are going to recover
2260 * (e.g. reallocated blocks), so we ignore the xfs_buf_log_format flags.  Hence
2261 * extract the LSN of the existing object in the buffer based on it's current
2262 * magic number.  If we don't recognise the magic number in the buffer, then
2263 * return a LSN of -1 so that the caller knows it was an unrecognised block and
2264 * so can recover the buffer.
2265 *
2266 * Note: we cannot rely solely on magic number matches to determine that the
2267 * buffer has a valid LSN - we also need to verify that it belongs to this
2268 * filesystem, so we need to extract the object's LSN and compare it to that
2269 * which we read from the superblock. If the UUIDs don't match, then we've got a
2270 * stale metadata block from an old filesystem instance that we need to recover
2271 * over the top of.
2272 */
2273static xfs_lsn_t
2274xlog_recover_get_buf_lsn(
2275        struct xfs_mount        *mp,
2276        struct xfs_buf          *bp)
2277{
2278        uint32_t                magic32;
2279        uint16_t                magic16;
2280        uint16_t                magicda;
2281        void                    *blk = bp->b_addr;
2282        uuid_t                  *uuid;
2283        xfs_lsn_t               lsn = -1;
2284
2285        /* v4 filesystems always recover immediately */
2286        if (!xfs_sb_version_hascrc(&mp->m_sb))
2287                goto recover_immediately;
2288
2289        magic32 = be32_to_cpu(*(__be32 *)blk);
2290        switch (magic32) {
2291        case XFS_ABTB_CRC_MAGIC:
2292        case XFS_ABTC_CRC_MAGIC:
2293        case XFS_ABTB_MAGIC:
2294        case XFS_ABTC_MAGIC:
2295        case XFS_RMAP_CRC_MAGIC:
2296        case XFS_REFC_CRC_MAGIC:
2297        case XFS_IBT_CRC_MAGIC:
2298        case XFS_IBT_MAGIC: {
2299                struct xfs_btree_block *btb = blk;
2300
2301                lsn = be64_to_cpu(btb->bb_u.s.bb_lsn);
2302                uuid = &btb->bb_u.s.bb_uuid;
2303                break;
2304        }
2305        case XFS_BMAP_CRC_MAGIC:
2306        case XFS_BMAP_MAGIC: {
2307                struct xfs_btree_block *btb = blk;
2308
2309                lsn = be64_to_cpu(btb->bb_u.l.bb_lsn);
2310                uuid = &btb->bb_u.l.bb_uuid;
2311                break;
2312        }
2313        case XFS_AGF_MAGIC:
2314                lsn = be64_to_cpu(((struct xfs_agf *)blk)->agf_lsn);
2315                uuid = &((struct xfs_agf *)blk)->agf_uuid;
2316                break;
2317        case XFS_AGFL_MAGIC:
2318                lsn = be64_to_cpu(((struct xfs_agfl *)blk)->agfl_lsn);
2319                uuid = &((struct xfs_agfl *)blk)->agfl_uuid;
2320                break;
2321        case XFS_AGI_MAGIC:
2322                lsn = be64_to_cpu(((struct xfs_agi *)blk)->agi_lsn);
2323                uuid = &((struct xfs_agi *)blk)->agi_uuid;
2324                break;
2325        case XFS_SYMLINK_MAGIC:
2326                lsn = be64_to_cpu(((struct xfs_dsymlink_hdr *)blk)->sl_lsn);
2327                uuid = &((struct xfs_dsymlink_hdr *)blk)->sl_uuid;
2328                break;
2329        case XFS_DIR3_BLOCK_MAGIC:
2330        case XFS_DIR3_DATA_MAGIC:
2331        case XFS_DIR3_FREE_MAGIC:
2332                lsn = be64_to_cpu(((struct xfs_dir3_blk_hdr *)blk)->lsn);
2333                uuid = &((struct xfs_dir3_blk_hdr *)blk)->uuid;
2334                break;
2335        case XFS_ATTR3_RMT_MAGIC:
2336                /*
2337                 * Remote attr blocks are written synchronously, rather than
2338                 * being logged. That means they do not contain a valid LSN
2339                 * (i.e. transactionally ordered) in them, and hence any time we
2340                 * see a buffer to replay over the top of a remote attribute
2341                 * block we should simply do so.
2342                 */
2343                goto recover_immediately;
2344        case XFS_SB_MAGIC:
2345                /*
2346                 * superblock uuids are magic. We may or may not have a
2347                 * sb_meta_uuid on disk, but it will be set in the in-core
2348                 * superblock. We set the uuid pointer for verification
2349                 * according to the superblock feature mask to ensure we check
2350                 * the relevant UUID in the superblock.
2351                 */
2352                lsn = be64_to_cpu(((struct xfs_dsb *)blk)->sb_lsn);
2353                if (xfs_sb_version_hasmetauuid(&mp->m_sb))
2354                        uuid = &((struct xfs_dsb *)blk)->sb_meta_uuid;
2355                else
2356                        uuid = &((struct xfs_dsb *)blk)->sb_uuid;
2357                break;
2358        default:
2359                break;
2360        }
2361
2362        if (lsn != (xfs_lsn_t)-1) {
2363                if (!uuid_equal(&mp->m_sb.sb_meta_uuid, uuid))
2364                        goto recover_immediately;
2365                return lsn;
2366        }
2367
2368        magicda = be16_to_cpu(((struct xfs_da_blkinfo *)blk)->magic);
2369        switch (magicda) {
2370        case XFS_DIR3_LEAF1_MAGIC:
2371        case XFS_DIR3_LEAFN_MAGIC:
2372        case XFS_DA3_NODE_MAGIC:
2373                lsn = be64_to_cpu(((struct xfs_da3_blkinfo *)blk)->lsn);
2374                uuid = &((struct xfs_da3_blkinfo *)blk)->uuid;
2375                break;
2376        default:
2377                break;
2378        }
2379
2380        if (lsn != (xfs_lsn_t)-1) {
2381                if (!uuid_equal(&mp->m_sb.sb_uuid, uuid))
2382                        goto recover_immediately;
2383                return lsn;
2384        }
2385
2386        /*
2387         * We do individual object checks on dquot and inode buffers as they
2388         * have their own individual LSN records. Also, we could have a stale
2389         * buffer here, so we have to at least recognise these buffer types.
2390         *
2391         * A notd complexity here is inode unlinked list processing - it logs
2392         * the inode directly in the buffer, but we don't know which inodes have
2393         * been modified, and there is no global buffer LSN. Hence we need to
2394         * recover all inode buffer types immediately. This problem will be
2395         * fixed by logical logging of the unlinked list modifications.
2396         */
2397        magic16 = be16_to_cpu(*(__be16 *)blk);
2398        switch (magic16) {
2399        case XFS_DQUOT_MAGIC:
2400        case XFS_DINODE_MAGIC:
2401                goto recover_immediately;
2402        default:
2403                break;
2404        }
2405
2406        /* unknown buffer contents, recover immediately */
2407
2408recover_immediately:
2409        return (xfs_lsn_t)-1;
2410
2411}
2412
2413/*
2414 * Validate the recovered buffer is of the correct type and attach the
2415 * appropriate buffer operations to them for writeback. Magic numbers are in a
2416 * few places:
2417 *      the first 16 bits of the buffer (inode buffer, dquot buffer),
2418 *      the first 32 bits of the buffer (most blocks),
2419 *      inside a struct xfs_da_blkinfo at the start of the buffer.
2420 */
2421static void
2422xlog_recover_validate_buf_type(
2423        struct xfs_mount        *mp,
2424        struct xfs_buf          *bp,
2425        xfs_buf_log_format_t    *buf_f,
2426        xfs_lsn_t               current_lsn)
2427{
2428        struct xfs_da_blkinfo   *info = bp->b_addr;
2429        uint32_t                magic32;
2430        uint16_t                magic16;
2431        uint16_t                magicda;
2432        char                    *warnmsg = NULL;
2433
2434        /*
2435         * We can only do post recovery validation on items on CRC enabled
2436         * fielsystems as we need to know when the buffer was written to be able
2437         * to determine if we should have replayed the item. If we replay old
2438         * metadata over a newer buffer, then it will enter a temporarily
2439         * inconsistent state resulting in verification failures. Hence for now
2440         * just avoid the verification stage for non-crc filesystems
2441         */
2442        if (!xfs_sb_version_hascrc(&mp->m_sb))
2443                return;
2444
2445        magic32 = be32_to_cpu(*(__be32 *)bp->b_addr);
2446        magic16 = be16_to_cpu(*(__be16*)bp->b_addr);
2447        magicda = be16_to_cpu(info->magic);
2448        switch (xfs_blft_from_flags(buf_f)) {
2449        case XFS_BLFT_BTREE_BUF:
2450                switch (magic32) {
2451                case XFS_ABTB_CRC_MAGIC:
2452                case XFS_ABTC_CRC_MAGIC:
2453                case XFS_ABTB_MAGIC:
2454                case XFS_ABTC_MAGIC:
2455                        bp->b_ops = &xfs_allocbt_buf_ops;
2456                        break;
2457                case XFS_IBT_CRC_MAGIC:
2458                case XFS_FIBT_CRC_MAGIC:
2459                case XFS_IBT_MAGIC:
2460                case XFS_FIBT_MAGIC:
2461                        bp->b_ops = &xfs_inobt_buf_ops;
2462                        break;
2463                case XFS_BMAP_CRC_MAGIC:
2464                case XFS_BMAP_MAGIC:
2465                        bp->b_ops = &xfs_bmbt_buf_ops;
2466                        break;
2467                case XFS_RMAP_CRC_MAGIC:
2468                        bp->b_ops = &xfs_rmapbt_buf_ops;
2469                        break;
2470                case XFS_REFC_CRC_MAGIC:
2471                        bp->b_ops = &xfs_refcountbt_buf_ops;
2472                        break;
2473                default:
2474                        warnmsg = "Bad btree block magic!";
2475                        break;
2476                }
2477                break;
2478        case XFS_BLFT_AGF_BUF:
2479                if (magic32 != XFS_AGF_MAGIC) {
2480                        warnmsg = "Bad AGF block magic!";
2481                        break;
2482                }
2483                bp->b_ops = &xfs_agf_buf_ops;
2484                break;
2485        case XFS_BLFT_AGFL_BUF:
2486                if (magic32 != XFS_AGFL_MAGIC) {
2487                        warnmsg = "Bad AGFL block magic!";
2488                        break;
2489                }
2490                bp->b_ops = &xfs_agfl_buf_ops;
2491                break;
2492        case XFS_BLFT_AGI_BUF:
2493                if (magic32 != XFS_AGI_MAGIC) {
2494                        warnmsg = "Bad AGI block magic!";
2495                        break;
2496                }
2497                bp->b_ops = &xfs_agi_buf_ops;
2498                break;
2499        case XFS_BLFT_UDQUOT_BUF:
2500        case XFS_BLFT_PDQUOT_BUF:
2501        case XFS_BLFT_GDQUOT_BUF:
2502#ifdef CONFIG_XFS_QUOTA
2503                if (magic16 != XFS_DQUOT_MAGIC) {
2504                        warnmsg = "Bad DQUOT block magic!";
2505                        break;
2506                }
2507                bp->b_ops = &xfs_dquot_buf_ops;
2508#else
2509                xfs_alert(mp,
2510        "Trying to recover dquots without QUOTA support built in!");
2511                ASSERT(0);
2512#endif
2513                break;
2514        case XFS_BLFT_DINO_BUF:
2515                if (magic16 != XFS_DINODE_MAGIC) {
2516                        warnmsg = "Bad INODE block magic!";
2517                        break;
2518                }
2519                bp->b_ops = &xfs_inode_buf_ops;
2520                break;
2521        case XFS_BLFT_SYMLINK_BUF:
2522                if (magic32 != XFS_SYMLINK_MAGIC) {
2523                        warnmsg = "Bad symlink block magic!";
2524                        break;
2525                }
2526                bp->b_ops = &xfs_symlink_buf_ops;
2527                break;
2528        case XFS_BLFT_DIR_BLOCK_BUF:
2529                if (magic32 != XFS_DIR2_BLOCK_MAGIC &&
2530                    magic32 != XFS_DIR3_BLOCK_MAGIC) {
2531                        warnmsg = "Bad dir block magic!";
2532                        break;
2533                }
2534                bp->b_ops = &xfs_dir3_block_buf_ops;
2535                break;
2536        case XFS_BLFT_DIR_DATA_BUF:
2537                if (magic32 != XFS_DIR2_DATA_MAGIC &&
2538                    magic32 != XFS_DIR3_DATA_MAGIC) {
2539                        warnmsg = "Bad dir data magic!";
2540                        break;
2541                }
2542                bp->b_ops = &xfs_dir3_data_buf_ops;
2543                break;
2544        case XFS_BLFT_DIR_FREE_BUF:
2545                if (magic32 != XFS_DIR2_FREE_MAGIC &&
2546                    magic32 != XFS_DIR3_FREE_MAGIC) {
2547                        warnmsg = "Bad dir3 free magic!";
2548                        break;
2549                }
2550                bp->b_ops = &xfs_dir3_free_buf_ops;
2551                break;
2552        case XFS_BLFT_DIR_LEAF1_BUF:
2553                if (magicda != XFS_DIR2_LEAF1_MAGIC &&
2554                    magicda != XFS_DIR3_LEAF1_MAGIC) {
2555                        warnmsg = "Bad dir leaf1 magic!";
2556                        break;
2557                }
2558                bp->b_ops = &xfs_dir3_leaf1_buf_ops;
2559                break;
2560        case XFS_BLFT_DIR_LEAFN_BUF:
2561                if (magicda != XFS_DIR2_LEAFN_MAGIC &&
2562                    magicda != XFS_DIR3_LEAFN_MAGIC) {
2563                        warnmsg = "Bad dir leafn magic!";
2564                        break;
2565                }
2566                bp->b_ops = &xfs_dir3_leafn_buf_ops;
2567                break;
2568        case XFS_BLFT_DA_NODE_BUF:
2569                if (magicda != XFS_DA_NODE_MAGIC &&
2570                    magicda != XFS_DA3_NODE_MAGIC) {
2571                        warnmsg = "Bad da node magic!";
2572                        break;
2573                }
2574                bp->b_ops = &xfs_da3_node_buf_ops;
2575                break;
2576        case XFS_BLFT_ATTR_LEAF_BUF:
2577                if (magicda != XFS_ATTR_LEAF_MAGIC &&
2578                    magicda != XFS_ATTR3_LEAF_MAGIC) {
2579                        warnmsg = "Bad attr leaf magic!";
2580                        break;
2581                }
2582                bp->b_ops = &xfs_attr3_leaf_buf_ops;
2583                break;
2584        case XFS_BLFT_ATTR_RMT_BUF:
2585                if (magic32 != XFS_ATTR3_RMT_MAGIC) {
2586                        warnmsg = "Bad attr remote magic!";
2587                        break;
2588                }
2589                bp->b_ops = &xfs_attr3_rmt_buf_ops;
2590                break;
2591        case XFS_BLFT_SB_BUF:
2592                if (magic32 != XFS_SB_MAGIC) {
2593                        warnmsg = "Bad SB block magic!";
2594                        break;
2595                }
2596                bp->b_ops = &xfs_sb_buf_ops;
2597                break;
2598#ifdef CONFIG_XFS_RT
2599        case XFS_BLFT_RTBITMAP_BUF:
2600        case XFS_BLFT_RTSUMMARY_BUF:
2601                /* no magic numbers for verification of RT buffers */
2602                bp->b_ops = &xfs_rtbuf_ops;
2603                break;
2604#endif /* CONFIG_XFS_RT */
2605        default:
2606                xfs_warn(mp, "Unknown buffer type %d!",
2607                         xfs_blft_from_flags(buf_f));
2608                break;
2609        }
2610
2611        /*
2612         * Nothing else to do in the case of a NULL current LSN as this means
2613         * the buffer is more recent than the change in the log and will be
2614         * skipped.
2615         */
2616        if (current_lsn == NULLCOMMITLSN)
2617                return;
2618
2619        if (warnmsg) {
2620                xfs_warn(mp, warnmsg);
2621                ASSERT(0);
2622        }
2623
2624        /*
2625         * We must update the metadata LSN of the buffer as it is written out to
2626         * ensure that older transactions never replay over this one and corrupt
2627         * the buffer. This can occur if log recovery is interrupted at some
2628         * point after the current transaction completes, at which point a
2629         * subsequent mount starts recovery from the beginning.
2630         *
2631         * Write verifiers update the metadata LSN from log items attached to
2632         * the buffer. Therefore, initialize a bli purely to carry the LSN to
2633         * the verifier. We'll clean it up in our ->iodone() callback.
2634         */
2635        if (bp->b_ops) {
2636                struct xfs_buf_log_item *bip;
2637
2638                ASSERT(!bp->b_iodone || bp->b_iodone == xlog_recover_iodone);
2639                bp->b_iodone = xlog_recover_iodone;
2640                xfs_buf_item_init(bp, mp);
2641                bip = bp->b_log_item;
2642                bip->bli_item.li_lsn = current_lsn;
2643        }
2644}
2645
2646/*
2647 * Perform a 'normal' buffer recovery.  Each logged region of the
2648 * buffer should be copied over the corresponding region in the
2649 * given buffer.  The bitmap in the buf log format structure indicates
2650 * where to place the logged data.
2651 */
2652STATIC void
2653xlog_recover_do_reg_buffer(
2654        struct xfs_mount        *mp,
2655        xlog_recover_item_t     *item,
2656        struct xfs_buf          *bp,
2657        xfs_buf_log_format_t    *buf_f,
2658        xfs_lsn_t               current_lsn)
2659{
2660        int                     i;
2661        int                     bit;
2662        int                     nbits;
2663        xfs_failaddr_t          fa;
2664
2665        trace_xfs_log_recover_buf_reg_buf(mp->m_log, buf_f);
2666
2667        bit = 0;
2668        i = 1;  /* 0 is the buf format structure */
2669        while (1) {
2670                bit = xfs_next_bit(buf_f->blf_data_map,
2671                                   buf_f->blf_map_size, bit);
2672                if (bit == -1)
2673                        break;
2674                nbits = xfs_contig_bits(buf_f->blf_data_map,
2675                                        buf_f->blf_map_size, bit);
2676                ASSERT(nbits > 0);
2677                ASSERT(item->ri_buf[i].i_addr != NULL);
2678                ASSERT(item->ri_buf[i].i_len % XFS_BLF_CHUNK == 0);
2679                ASSERT(BBTOB(bp->b_io_length) >=
2680                       ((uint)bit << XFS_BLF_SHIFT) + (nbits << XFS_BLF_SHIFT));
2681
2682                /*
2683                 * The dirty regions logged in the buffer, even though
2684                 * contiguous, may span multiple chunks. This is because the
2685                 * dirty region may span a physical page boundary in a buffer
2686                 * and hence be split into two separate vectors for writing into
2687                 * the log. Hence we need to trim nbits back to the length of
2688                 * the current region being copied out of the log.
2689                 */
2690                if (item->ri_buf[i].i_len < (nbits << XFS_BLF_SHIFT))
2691                        nbits = item->ri_buf[i].i_len >> XFS_BLF_SHIFT;
2692
2693                /*
2694                 * Do a sanity check if this is a dquot buffer. Just checking
2695                 * the first dquot in the buffer should do. XXXThis is
2696                 * probably a good thing to do for other buf types also.
2697                 */
2698                fa = NULL;
2699                if (buf_f->blf_flags &
2700                   (XFS_BLF_UDQUOT_BUF|XFS_BLF_PDQUOT_BUF|XFS_BLF_GDQUOT_BUF)) {
2701                        if (item->ri_buf[i].i_addr == NULL) {
2702                                xfs_alert(mp,
2703                                        "XFS: NULL dquot in %s.", __func__);
2704                                goto next;
2705                        }
2706                        if (item->ri_buf[i].i_len < sizeof(xfs_disk_dquot_t)) {
2707                                xfs_alert(mp,
2708                                        "XFS: dquot too small (%d) in %s.",
2709                                        item->ri_buf[i].i_len, __func__);
2710                                goto next;
2711                        }
2712                        fa = xfs_dquot_verify(mp, item->ri_buf[i].i_addr,
2713                                               -1, 0);
2714                        if (fa) {
2715                                xfs_alert(mp,
2716        "dquot corrupt at %pS trying to replay into block 0x%llx",
2717                                        fa, bp->b_bn);
2718                                goto next;
2719                        }
2720                }
2721
2722                memcpy(xfs_buf_offset(bp,
2723                        (uint)bit << XFS_BLF_SHIFT),    /* dest */
2724                        item->ri_buf[i].i_addr,         /* source */
2725                        nbits<<XFS_BLF_SHIFT);          /* length */
2726 next:
2727                i++;
2728                bit += nbits;
2729        }
2730
2731        /* Shouldn't be any more regions */
2732        ASSERT(i == item->ri_total);
2733
2734        xlog_recover_validate_buf_type(mp, bp, buf_f, current_lsn);
2735}
2736
2737/*
2738 * Perform a dquot buffer recovery.
2739 * Simple algorithm: if we have found a QUOTAOFF log item of the same type
2740 * (ie. USR or GRP), then just toss this buffer away; don't recover it.
2741 * Else, treat it as a regular buffer and do recovery.
2742 *
2743 * Return false if the buffer was tossed and true if we recovered the buffer to
2744 * indicate to the caller if the buffer needs writing.
2745 */
2746STATIC bool
2747xlog_recover_do_dquot_buffer(
2748        struct xfs_mount                *mp,
2749        struct xlog                     *log,
2750        struct xlog_recover_item        *item,
2751        struct xfs_buf                  *bp,
2752        struct xfs_buf_log_format       *buf_f)
2753{
2754        uint                    type;
2755
2756        trace_xfs_log_recover_buf_dquot_buf(log, buf_f);
2757
2758        /*
2759         * Filesystems are required to send in quota flags at mount time.
2760         */
2761        if (!mp->m_qflags)
2762                return false;
2763
2764        type = 0;
2765        if (buf_f->blf_flags & XFS_BLF_UDQUOT_BUF)
2766                type |= XFS_DQ_USER;
2767        if (buf_f->blf_flags & XFS_BLF_PDQUOT_BUF)
2768                type |= XFS_DQ_PROJ;
2769        if (buf_f->blf_flags & XFS_BLF_GDQUOT_BUF)
2770                type |= XFS_DQ_GROUP;
2771        /*
2772         * This type of quotas was turned off, so ignore this buffer
2773         */
2774        if (log->l_quotaoffs_flag & type)
2775                return false;
2776
2777        xlog_recover_do_reg_buffer(mp, item, bp, buf_f, NULLCOMMITLSN);
2778        return true;
2779}
2780
2781/*
2782 * This routine replays a modification made to a buffer at runtime.
2783 * There are actually two types of buffer, regular and inode, which
2784 * are handled differently.  Inode buffers are handled differently
2785 * in that we only recover a specific set of data from them, namely
2786 * the inode di_next_unlinked fields.  This is because all other inode
2787 * data is actually logged via inode records and any data we replay
2788 * here which overlaps that may be stale.
2789 *
2790 * When meta-data buffers are freed at run time we log a buffer item
2791 * with the XFS_BLF_CANCEL bit set to indicate that previous copies
2792 * of the buffer in the log should not be replayed at recovery time.
2793 * This is so that if the blocks covered by the buffer are reused for
2794 * file data before we crash we don't end up replaying old, freed
2795 * meta-data into a user's file.
2796 *
2797 * To handle the cancellation of buffer log items, we make two passes
2798 * over the log during recovery.  During the first we build a table of
2799 * those buffers which have been cancelled, and during the second we
2800 * only replay those buffers which do not have corresponding cancel
2801 * records in the table.  See xlog_recover_buffer_pass[1,2] above
2802 * for more details on the implementation of the table of cancel records.
2803 */
2804STATIC int
2805xlog_recover_buffer_pass2(
2806        struct xlog                     *log,
2807        struct list_head                *buffer_list,
2808        struct xlog_recover_item        *item,
2809        xfs_lsn_t                       current_lsn)
2810{
2811        xfs_buf_log_format_t    *buf_f = item->ri_buf[0].i_addr;
2812        xfs_mount_t             *mp = log->l_mp;
2813        xfs_buf_t               *bp;
2814        int                     error;
2815        uint                    buf_flags;
2816        xfs_lsn_t               lsn;
2817
2818        /*
2819         * In this pass we only want to recover all the buffers which have
2820         * not been cancelled and are not cancellation buffers themselves.
2821         */
2822        if (xlog_check_buffer_cancelled(log, buf_f->blf_blkno,
2823                        buf_f->blf_len, buf_f->blf_flags)) {
2824                trace_xfs_log_recover_buf_cancel(log, buf_f);
2825                return 0;
2826        }
2827
2828        trace_xfs_log_recover_buf_recover(log, buf_f);
2829
2830        buf_flags = 0;
2831        if (buf_f->blf_flags & XFS_BLF_INODE_BUF)
2832                buf_flags |= XBF_UNMAPPED;
2833
2834        bp = xfs_buf_read(mp->m_ddev_targp, buf_f->blf_blkno, buf_f->blf_len,
2835                          buf_flags, NULL);
2836        if (!bp)
2837                return -ENOMEM;
2838        error = bp->b_error;
2839        if (error) {
2840                xfs_buf_ioerror_alert(bp, "xlog_recover_do..(read#1)");
2841                goto out_release;
2842        }
2843
2844        /*
2845         * Recover the buffer only if we get an LSN from it and it's less than
2846         * the lsn of the transaction we are replaying.
2847         *
2848         * Note that we have to be extremely careful of readahead here.
2849         * Readahead does not attach verfiers to the buffers so if we don't
2850         * actually do any replay after readahead because of the LSN we found
2851         * in the buffer if more recent than that current transaction then we
2852         * need to attach the verifier directly. Failure to do so can lead to
2853         * future recovery actions (e.g. EFI and unlinked list recovery) can
2854         * operate on the buffers and they won't get the verifier attached. This
2855         * can lead to blocks on disk having the correct content but a stale
2856         * CRC.
2857         *
2858         * It is safe to assume these clean buffers are currently up to date.
2859         * If the buffer is dirtied by a later transaction being replayed, then
2860         * the verifier will be reset to match whatever recover turns that
2861         * buffer into.
2862         */
2863        lsn = xlog_recover_get_buf_lsn(mp, bp);
2864        if (lsn && lsn != -1 && XFS_LSN_CMP(lsn, current_lsn) >= 0) {
2865                trace_xfs_log_recover_buf_skip(log, buf_f);
2866                xlog_recover_validate_buf_type(mp, bp, buf_f, NULLCOMMITLSN);
2867                goto out_release;
2868        }
2869
2870        if (buf_f->blf_flags & XFS_BLF_INODE_BUF) {
2871                error = xlog_recover_do_inode_buffer(mp, item, bp, buf_f);
2872                if (error)
2873                        goto out_release;
2874        } else if (buf_f->blf_flags &
2875                  (XFS_BLF_UDQUOT_BUF|XFS_BLF_PDQUOT_BUF|XFS_BLF_GDQUOT_BUF)) {
2876                bool    dirty;
2877
2878                dirty = xlog_recover_do_dquot_buffer(mp, log, item, bp, buf_f);
2879                if (!dirty)
2880                        goto out_release;
2881        } else {
2882                xlog_recover_do_reg_buffer(mp, item, bp, buf_f, current_lsn);
2883        }
2884
2885        /*
2886         * Perform delayed write on the buffer.  Asynchronous writes will be
2887         * slower when taking into account all the buffers to be flushed.
2888         *
2889         * Also make sure that only inode buffers with good sizes stay in
2890         * the buffer cache.  The kernel moves inodes in buffers of 1 block
2891         * or mp->m_inode_cluster_size bytes, whichever is bigger.  The inode
2892         * buffers in the log can be a different size if the log was generated
2893         * by an older kernel using unclustered inode buffers or a newer kernel
2894         * running with a different inode cluster size.  Regardless, if the
2895         * the inode buffer size isn't max(blocksize, mp->m_inode_cluster_size)
2896         * for *our* value of mp->m_inode_cluster_size, then we need to keep
2897         * the buffer out of the buffer cache so that the buffer won't
2898         * overlap with future reads of those inodes.
2899         */
2900        if (XFS_DINODE_MAGIC ==
2901            be16_to_cpu(*((__be16 *)xfs_buf_offset(bp, 0))) &&
2902            (BBTOB(bp->b_io_length) != max(log->l_mp->m_sb.sb_blocksize,
2903                        (uint32_t)log->l_mp->m_inode_cluster_size))) {
2904                xfs_buf_stale(bp);
2905                error = xfs_bwrite(bp);
2906        } else {
2907                ASSERT(bp->b_target->bt_mount == mp);
2908                bp->b_iodone = xlog_recover_iodone;
2909                xfs_buf_delwri_queue(bp, buffer_list);
2910        }
2911
2912out_release:
2913        xfs_buf_relse(bp);
2914        return error;
2915}
2916
2917/*
2918 * Inode fork owner changes
2919 *
2920 * If we have been told that we have to reparent the inode fork, it's because an
2921 * extent swap operation on a CRC enabled filesystem has been done and we are
2922 * replaying it. We need to walk the BMBT of the appropriate fork and change the
2923 * owners of it.
2924 *
2925 * The complexity here is that we don't have an inode context to work with, so
2926 * after we've replayed the inode we need to instantiate one.  This is where the
2927 * fun begins.
2928 *
2929 * We are in the middle of log recovery, so we can't run transactions. That
2930 * means we cannot use cache coherent inode instantiation via xfs_iget(), as
2931 * that will result in the corresponding iput() running the inode through
2932 * xfs_inactive(). If we've just replayed an inode core that changes the link
2933 * count to zero (i.e. it's been unlinked), then xfs_inactive() will run
2934 * transactions (bad!).
2935 *
2936 * So, to avoid this, we instantiate an inode directly from the inode core we've
2937 * just recovered. We have the buffer still locked, and all we really need to
2938 * instantiate is the inode core and the forks being modified. We can do this
2939 * manually, then run the inode btree owner change, and then tear down the
2940 * xfs_inode without having to run any transactions at all.
2941 *
2942 * Also, because we don't have a transaction context available here but need to
2943 * gather all the buffers we modify for writeback so we pass the buffer_list
2944 * instead for the operation to use.
2945 */
2946
2947STATIC int
2948xfs_recover_inode_owner_change(
2949        struct xfs_mount        *mp,
2950        struct xfs_dinode       *dip,
2951        struct xfs_inode_log_format *in_f,
2952        struct list_head        *buffer_list)
2953{
2954        struct xfs_inode        *ip;
2955        int                     error;
2956
2957        ASSERT(in_f->ilf_fields & (XFS_ILOG_DOWNER|XFS_ILOG_AOWNER));
2958
2959        ip = xfs_inode_alloc(mp, in_f->ilf_ino);
2960        if (!ip)
2961                return -ENOMEM;
2962
2963        /* instantiate the inode */
2964        xfs_inode_from_disk(ip, dip);
2965        ASSERT(ip->i_d.di_version >= 3);
2966
2967        error = xfs_iformat_fork(ip, dip);
2968        if (error)
2969                goto out_free_ip;
2970
2971        if (!xfs_inode_verify_forks(ip)) {
2972                error = -EFSCORRUPTED;
2973                goto out_free_ip;
2974        }
2975
2976        if (in_f->ilf_fields & XFS_ILOG_DOWNER) {
2977                ASSERT(in_f->ilf_fields & XFS_ILOG_DBROOT);
2978                error = xfs_bmbt_change_owner(NULL, ip, XFS_DATA_FORK,
2979                                              ip->i_ino, buffer_list);
2980                if (error)
2981                        goto out_free_ip;
2982        }
2983
2984        if (in_f->ilf_fields & XFS_ILOG_AOWNER) {
2985                ASSERT(in_f->ilf_fields & XFS_ILOG_ABROOT);
2986                error = xfs_bmbt_change_owner(NULL, ip, XFS_ATTR_FORK,
2987                                              ip->i_ino, buffer_list);
2988                if (error)
2989                        goto out_free_ip;
2990        }
2991
2992out_free_ip:
2993        xfs_inode_free(ip);
2994        return error;
2995}
2996
2997STATIC int
2998xlog_recover_inode_pass2(
2999        struct xlog                     *log,
3000        struct list_head                *buffer_list,
3001        struct xlog_recover_item        *item,
3002        xfs_lsn_t                       current_lsn)
3003{
3004        struct xfs_inode_log_format     *in_f;
3005        xfs_mount_t             *mp = log->l_mp;
3006        xfs_buf_t               *bp;
3007        xfs_dinode_t            *dip;
3008        int                     len;
3009        char                    *src;
3010        char                    *dest;
3011        int                     error;
3012        int                     attr_index;
3013        uint                    fields;
3014        struct xfs_log_dinode   *ldip;
3015        uint                    isize;
3016        int                     need_free = 0;
3017
3018        if (item->ri_buf[0].i_len == sizeof(struct xfs_inode_log_format)) {
3019                in_f = item->ri_buf[0].i_addr;
3020        } else {
3021                in_f = kmem_alloc(sizeof(struct xfs_inode_log_format), KM_SLEEP);
3022                need_free = 1;
3023                error = xfs_inode_item_format_convert(&item->ri_buf[0], in_f);
3024                if (error)
3025                        goto error;
3026        }
3027
3028        /*
3029         * Inode buffers can be freed, look out for it,
3030         * and do not replay the inode.
3031         */
3032        if (xlog_check_buffer_cancelled(log, in_f->ilf_blkno,
3033                                        in_f->ilf_len, 0)) {
3034                error = 0;
3035                trace_xfs_log_recover_inode_cancel(log, in_f);
3036                goto error;
3037        }
3038        trace_xfs_log_recover_inode_recover(log, in_f);
3039
3040        bp = xfs_buf_read(mp->m_ddev_targp, in_f->ilf_blkno, in_f->ilf_len, 0,
3041                          &xfs_inode_buf_ops);
3042        if (!bp) {
3043                error = -ENOMEM;
3044                goto error;
3045        }
3046        error = bp->b_error;
3047        if (error) {
3048                xfs_buf_ioerror_alert(bp, "xlog_recover_do..(read#2)");
3049                goto out_release;
3050        }
3051        ASSERT(in_f->ilf_fields & XFS_ILOG_CORE);
3052        dip = xfs_buf_offset(bp, in_f->ilf_boffset);
3053
3054        /*
3055         * Make sure the place we're flushing out to really looks
3056         * like an inode!
3057         */
3058        if (unlikely(dip->di_magic != cpu_to_be16(XFS_DINODE_MAGIC))) {
3059                xfs_alert(mp,
3060        "%s: Bad inode magic number, dip = "PTR_FMT", dino bp = "PTR_FMT", ino = %Ld",
3061                        __func__, dip, bp, in_f->ilf_ino);
3062                XFS_ERROR_REPORT("xlog_recover_inode_pass2(1)",
3063                                 XFS_ERRLEVEL_LOW, mp);
3064                error = -EFSCORRUPTED;
3065                goto out_release;
3066        }
3067        ldip = item->ri_buf[1].i_addr;
3068        if (unlikely(ldip->di_magic != XFS_DINODE_MAGIC)) {
3069                xfs_alert(mp,
3070                        "%s: Bad inode log record, rec ptr "PTR_FMT", ino %Ld",
3071                        __func__, item, in_f->ilf_ino);
3072                XFS_ERROR_REPORT("xlog_recover_inode_pass2(2)",
3073                                 XFS_ERRLEVEL_LOW, mp);
3074                error = -EFSCORRUPTED;
3075                goto out_release;
3076        }
3077
3078        /*
3079         * If the inode has an LSN in it, recover the inode only if it's less
3080         * than the lsn of the transaction we are replaying. Note: we still
3081         * need to replay an owner change even though the inode is more recent
3082         * than the transaction as there is no guarantee that all the btree
3083         * blocks are more recent than this transaction, too.
3084         */
3085        if (dip->di_version >= 3) {
3086                xfs_lsn_t       lsn = be64_to_cpu(dip->di_lsn);
3087
3088                if (lsn && lsn != -1 && XFS_LSN_CMP(lsn, current_lsn) >= 0) {
3089                        trace_xfs_log_recover_inode_skip(log, in_f);
3090                        error = 0;
3091                        goto out_owner_change;
3092                }
3093        }
3094
3095        /*
3096         * di_flushiter is only valid for v1/2 inodes. All changes for v3 inodes
3097         * are transactional and if ordering is necessary we can determine that
3098         * more accurately by the LSN field in the V3 inode core. Don't trust
3099         * the inode versions we might be changing them here - use the
3100         * superblock flag to determine whether we need to look at di_flushiter
3101         * to skip replay when the on disk inode is newer than the log one
3102         */
3103        if (!xfs_sb_version_hascrc(&mp->m_sb) &&
3104            ldip->di_flushiter < be16_to_cpu(dip->di_flushiter)) {
3105                /*
3106                 * Deal with the wrap case, DI_MAX_FLUSH is less
3107                 * than smaller numbers
3108                 */
3109                if (be16_to_cpu(dip->di_flushiter) == DI_MAX_FLUSH &&
3110                    ldip->di_flushiter < (DI_MAX_FLUSH >> 1)) {
3111                        /* do nothing */
3112                } else {
3113                        trace_xfs_log_recover_inode_skip(log, in_f);
3114                        error = 0;
3115                        goto out_release;
3116                }
3117        }
3118
3119        /* Take the opportunity to reset the flush iteration count */
3120        ldip->di_flushiter = 0;
3121
3122        if (unlikely(S_ISREG(ldip->di_mode))) {
3123                if ((ldip->di_format != XFS_DINODE_FMT_EXTENTS) &&
3124                    (ldip->di_format != XFS_DINODE_FMT_BTREE)) {
3125                        XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(3)",
3126                                         XFS_ERRLEVEL_LOW, mp, ldip,
3127                                         sizeof(*ldip));
3128                        xfs_alert(mp,
3129                "%s: Bad regular inode log record, rec ptr "PTR_FMT", "
3130                "ino ptr = "PTR_FMT", ino bp = "PTR_FMT", ino %Ld",
3131                                __func__, item, dip, bp, in_f->ilf_ino);
3132                        error = -EFSCORRUPTED;
3133                        goto out_release;
3134                }
3135        } else if (unlikely(S_ISDIR(ldip->di_mode))) {
3136                if ((ldip->di_format != XFS_DINODE_FMT_EXTENTS) &&
3137                    (ldip->di_format != XFS_DINODE_FMT_BTREE) &&
3138                    (ldip->di_format != XFS_DINODE_FMT_LOCAL)) {
3139                        XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(4)",
3140                                             XFS_ERRLEVEL_LOW, mp, ldip,
3141                                             sizeof(*ldip));
3142                        xfs_alert(mp,
3143                "%s: Bad dir inode log record, rec ptr "PTR_FMT", "
3144                "ino ptr = "PTR_FMT", ino bp = "PTR_FMT", ino %Ld",
3145                                __func__, item, dip, bp, in_f->ilf_ino);
3146                        error = -EFSCORRUPTED;
3147                        goto out_release;
3148                }
3149        }
3150        if (unlikely(ldip->di_nextents + ldip->di_anextents > ldip->di_nblocks)){
3151                XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(5)",
3152                                     XFS_ERRLEVEL_LOW, mp, ldip,
3153                                     sizeof(*ldip));
3154                xfs_alert(mp,
3155        "%s: Bad inode log record, rec ptr "PTR_FMT", dino ptr "PTR_FMT", "
3156        "dino bp "PTR_FMT", ino %Ld, total extents = %d, nblocks = %Ld",
3157                        __func__, item, dip, bp, in_f->ilf_ino,
3158                        ldip->di_nextents + ldip->di_anextents,
3159                        ldip->di_nblocks);
3160                error = -EFSCORRUPTED;
3161                goto out_release;
3162        }
3163        if (unlikely(ldip->di_forkoff > mp->m_sb.sb_inodesize)) {
3164                XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(6)",
3165                                     XFS_ERRLEVEL_LOW, mp, ldip,
3166                                     sizeof(*ldip));
3167                xfs_alert(mp,
3168        "%s: Bad inode log record, rec ptr "PTR_FMT", dino ptr "PTR_FMT", "
3169        "dino bp "PTR_FMT", ino %Ld, forkoff 0x%x", __func__,
3170                        item, dip, bp, in_f->ilf_ino, ldip->di_forkoff);
3171                error = -EFSCORRUPTED;
3172                goto out_release;
3173        }
3174        isize = xfs_log_dinode_size(ldip->di_version);
3175        if (unlikely(item->ri_buf[1].i_len > isize)) {
3176                XFS_CORRUPTION_ERROR("xlog_recover_inode_pass2(7)",
3177                                     XFS_ERRLEVEL_LOW, mp, ldip,
3178                                     sizeof(*ldip));
3179                xfs_alert(mp,
3180                        "%s: Bad inode log record length %d, rec ptr "PTR_FMT,
3181                        __func__, item->ri_buf[1].i_len, item);
3182                error = -EFSCORRUPTED;
3183                goto out_release;
3184        }
3185
3186        /* recover the log dinode inode into the on disk inode */
3187        xfs_log_dinode_to_disk(ldip, dip);
3188
3189        fields = in_f->ilf_fields;
3190        if (fields & XFS_ILOG_DEV)
3191                xfs_dinode_put_rdev(dip, in_f->ilf_u.ilfu_rdev);
3192
3193        if (in_f->ilf_size == 2)
3194                goto out_owner_change;
3195        len = item->ri_buf[2].i_len;
3196        src = item->ri_buf[2].i_addr;
3197        ASSERT(in_f->ilf_size <= 4);
3198        ASSERT((in_f->ilf_size == 3) || (fields & XFS_ILOG_AFORK));
3199        ASSERT(!(fields & XFS_ILOG_DFORK) ||
3200               (len == in_f->ilf_dsize));
3201
3202        switch (fields & XFS_ILOG_DFORK) {
3203        case XFS_ILOG_DDATA:
3204        case XFS_ILOG_DEXT:
3205                memcpy(XFS_DFORK_DPTR(dip), src, len);
3206                break;
3207
3208        case XFS_ILOG_DBROOT:
3209                xfs_bmbt_to_bmdr(mp, (struct xfs_btree_block *)src, len,
3210                                 (xfs_bmdr_block_t *)XFS_DFORK_DPTR(dip),
3211                                 XFS_DFORK_DSIZE(dip, mp));
3212                break;
3213
3214        default:
3215                /*
3216                 * There are no data fork flags set.
3217                 */
3218                ASSERT((fields & XFS_ILOG_DFORK) == 0);
3219                break;
3220        }
3221
3222        /*
3223         * If we logged any attribute data, recover it.  There may or
3224         * may not have been any other non-core data logged in this
3225         * transaction.
3226         */
3227        if (in_f->ilf_fields & XFS_ILOG_AFORK) {
3228                if (in_f->ilf_fields & XFS_ILOG_DFORK) {
3229                        attr_index = 3;
3230                } else {
3231                        attr_index = 2;
3232                }
3233                len = item->ri_buf[attr_index].i_len;
3234                src = item->ri_buf[attr_index].i_addr;
3235                ASSERT(len == in_f->ilf_asize);
3236
3237                switch (in_f->ilf_fields & XFS_ILOG_AFORK) {
3238                case XFS_ILOG_ADATA:
3239                case XFS_ILOG_AEXT:
3240                        dest = XFS_DFORK_APTR(dip);
3241                        ASSERT(len <= XFS_DFORK_ASIZE(dip, mp));
3242                        memcpy(dest, src, len);
3243                        break;
3244
3245                case XFS_ILOG_ABROOT:
3246                        dest = XFS_DFORK_APTR(dip);
3247                        xfs_bmbt_to_bmdr(mp, (struct xfs_btree_block *)src,
3248                                         len, (xfs_bmdr_block_t*)dest,
3249                                         XFS_DFORK_ASIZE(dip, mp));
3250                        break;
3251
3252                default:
3253                        xfs_warn(log->l_mp, "%s: Invalid flag", __func__);
3254                        ASSERT(0);
3255                        error = -EIO;
3256                        goto out_release;
3257                }
3258        }
3259
3260out_owner_change:
3261        /* Recover the swapext owner change unless inode has been deleted */
3262        if ((in_f->ilf_fields & (XFS_ILOG_DOWNER|XFS_ILOG_AOWNER)) &&
3263            (dip->di_mode != 0))
3264                error = xfs_recover_inode_owner_change(mp, dip, in_f,
3265                                                       buffer_list);
3266        /* re-generate the checksum. */
3267        xfs_dinode_calc_crc(log->l_mp, dip);
3268
3269        ASSERT(bp->b_target->bt_mount == mp);
3270        bp->b_iodone = xlog_recover_iodone;
3271        xfs_buf_delwri_queue(bp, buffer_list);
3272
3273out_release:
3274        xfs_buf_relse(bp);
3275error:
3276        if (need_free)
3277                kmem_free(in_f);
3278        return error;
3279}
3280
3281/*
3282 * Recover QUOTAOFF records. We simply make a note of it in the xlog
3283 * structure, so that we know not to do any dquot item or dquot buffer recovery,
3284 * of that type.
3285 */
3286STATIC int
3287xlog_recover_quotaoff_pass1(
3288        struct xlog                     *log,
3289        struct xlog_recover_item        *item)
3290{
3291        xfs_qoff_logformat_t    *qoff_f = item->ri_buf[0].i_addr;
3292        ASSERT(qoff_f);
3293
3294        /*
3295         * The logitem format's flag tells us if this was user quotaoff,
3296         * group/project quotaoff or both.
3297         */
3298        if (qoff_f->qf_flags & XFS_UQUOTA_ACCT)
3299                log->l_quotaoffs_flag |= XFS_DQ_USER;
3300        if (qoff_f->qf_flags & XFS_PQUOTA_ACCT)
3301                log->l_quotaoffs_flag |= XFS_DQ_PROJ;
3302        if (qoff_f->qf_flags & XFS_GQUOTA_ACCT)
3303                log->l_quotaoffs_flag |= XFS_DQ_GROUP;
3304
3305        return 0;
3306}
3307
3308/*
3309 * Recover a dquot record
3310 */
3311STATIC int
3312xlog_recover_dquot_pass2(
3313        struct xlog                     *log,
3314        struct list_head                *buffer_list,
3315        struct xlog_recover_item        *item,
3316        xfs_lsn_t                       current_lsn)
3317{
3318        xfs_mount_t             *mp = log->l_mp;
3319        xfs_buf_t               *bp;
3320        struct xfs_disk_dquot   *ddq, *recddq;
3321        xfs_failaddr_t          fa;
3322        int                     error;
3323        xfs_dq_logformat_t      *dq_f;
3324        uint                    type;
3325
3326
3327        /*
3328         * Filesystems are required to send in quota flags at mount time.
3329         */
3330        if (mp->m_qflags == 0)
3331                return 0;
3332
3333        recddq = item->ri_buf[1].i_addr;
3334        if (recddq == NULL) {
3335                xfs_alert(log->l_mp, "NULL dquot in %s.", __func__);
3336                return -EIO;
3337        }
3338        if (item->ri_buf[1].i_len < sizeof(xfs_disk_dquot_t)) {
3339                xfs_alert(log->l_mp, "dquot too small (%d) in %s.",
3340                        item->ri_buf[1].i_len, __func__);
3341                return -EIO;
3342        }
3343
3344        /*
3345         * This type of quotas was turned off, so ignore this record.
3346         */
3347        type = recddq->d_flags & (XFS_DQ_USER | XFS_DQ_PROJ | XFS_DQ_GROUP);
3348        ASSERT(type);
3349        if (log->l_quotaoffs_flag & type)
3350                return 0;
3351
3352        /*
3353         * At this point we know that quota was _not_ turned off.
3354         * Since the mount flags are not indicating to us otherwise, this
3355         * must mean that quota is on, and the dquot needs to be replayed.
3356         * Remember that we may not have fully recovered the superblock yet,
3357         * so we can't do the usual trick of looking at the SB quota bits.
3358         *
3359         * The other possibility, of course, is that the quota subsystem was
3360         * removed since the last mount - ENOSYS.
3361         */
3362        dq_f = item->ri_buf[0].i_addr;
3363        ASSERT(dq_f);
3364        fa = xfs_dquot_verify(mp, recddq, dq_f->qlf_id, 0);
3365        if (fa) {
3366                xfs_alert(mp, "corrupt dquot ID 0x%x in log at %pS",
3367                                dq_f->qlf_id, fa);
3368                return -EIO;
3369        }
3370        ASSERT(dq_f->qlf_len == 1);
3371
3372        /*
3373         * At this point we are assuming that the dquots have been allocated
3374         * and hence the buffer has valid dquots stamped in it. It should,
3375         * therefore, pass verifier validation. If the dquot is bad, then the
3376         * we'll return an error here, so we don't need to specifically check
3377         * the dquot in the buffer after the verifier has run.
3378         */
3379        error = xfs_trans_read_buf(mp, NULL, mp->m_ddev_targp, dq_f->qlf_blkno,
3380                                   XFS_FSB_TO_BB(mp, dq_f->qlf_len), 0, &bp,
3381                                   &xfs_dquot_buf_ops);
3382        if (error)
3383                return error;
3384
3385        ASSERT(bp);
3386        ddq = xfs_buf_offset(bp, dq_f->qlf_boffset);
3387
3388        /*
3389         * If the dquot has an LSN in it, recover the dquot only if it's less
3390         * than the lsn of the transaction we are replaying.
3391         */
3392        if (xfs_sb_version_hascrc(&mp->m_sb)) {
3393                struct xfs_dqblk *dqb = (struct xfs_dqblk *)ddq;
3394                xfs_lsn_t       lsn = be64_to_cpu(dqb->dd_lsn);
3395
3396                if (lsn && lsn != -1 && XFS_LSN_CMP(lsn, current_lsn) >= 0) {
3397                        goto out_release;
3398                }
3399        }
3400
3401        memcpy(ddq, recddq, item->ri_buf[1].i_len);
3402        if (xfs_sb_version_hascrc(&mp->m_sb)) {
3403                xfs_update_cksum((char *)ddq, sizeof(struct xfs_dqblk),
3404                                 XFS_DQUOT_CRC_OFF);
3405        }
3406
3407        ASSERT(dq_f->qlf_size == 2);
3408        ASSERT(bp->b_target->bt_mount == mp);
3409        bp->b_iodone = xlog_recover_iodone;
3410        xfs_buf_delwri_queue(bp, buffer_list);
3411
3412out_release:
3413        xfs_buf_relse(bp);
3414        return 0;
3415}
3416
3417/*
3418 * This routine is called to create an in-core extent free intent
3419 * item from the efi format structure which was logged on disk.
3420 * It allocates an in-core efi, copies the extents from the format
3421 * structure into it, and adds the efi to the AIL with the given
3422 * LSN.
3423 */
3424STATIC int
3425xlog_recover_efi_pass2(
3426        struct xlog                     *log,
3427        struct xlog_recover_item        *item,
3428        xfs_lsn_t                       lsn)
3429{
3430        int                             error;
3431        struct xfs_mount                *mp = log->l_mp;
3432        struct xfs_efi_log_item         *efip;
3433        struct xfs_efi_log_format       *efi_formatp;
3434
3435        efi_formatp = item->ri_buf[0].i_addr;
3436
3437        efip = xfs_efi_init(mp, efi_formatp->efi_nextents);
3438        error = xfs_efi_copy_format(&item->ri_buf[0], &efip->efi_format);
3439        if (error) {
3440                xfs_efi_item_free(efip);
3441                return error;
3442        }
3443        atomic_set(&efip->efi_next_extent, efi_formatp->efi_nextents);
3444
3445        spin_lock(&log->l_ailp->ail_lock);
3446        /*
3447         * The EFI has two references. One for the EFD and one for EFI to ensure
3448         * it makes it into the AIL. Insert the EFI into the AIL directly and
3449         * drop the EFI reference. Note that xfs_trans_ail_update() drops the
3450         * AIL lock.
3451         */
3452        xfs_trans_ail_update(log->l_ailp, &efip->efi_item, lsn);
3453        xfs_efi_release(efip);
3454        return 0;
3455}
3456
3457
3458/*
3459 * This routine is called when an EFD format structure is found in a committed
3460 * transaction in the log. Its purpose is to cancel the corresponding EFI if it
3461 * was still in the log. To do this it searches the AIL for the EFI with an id
3462 * equal to that in the EFD format structure. If we find it we drop the EFD
3463 * reference, which removes the EFI from the AIL and frees it.
3464 */
3465STATIC int
3466xlog_recover_efd_pass2(
3467        struct xlog                     *log,
3468        struct xlog_recover_item        *item)
3469{
3470        xfs_efd_log_format_t    *efd_formatp;
3471        xfs_efi_log_item_t      *efip = NULL;
3472        xfs_log_item_t          *lip;
3473        uint64_t                efi_id;
3474        struct xfs_ail_cursor   cur;
3475        struct xfs_ail          *ailp = log->l_ailp;
3476
3477        efd_formatp = item->ri_buf[0].i_addr;
3478        ASSERT((item->ri_buf[0].i_len == (sizeof(xfs_efd_log_format_32_t) +
3479                ((efd_formatp->efd_nextents - 1) * sizeof(xfs_extent_32_t)))) ||
3480               (item->ri_buf[0].i_len == (sizeof(xfs_efd_log_format_64_t) +
3481                ((efd_formatp->efd_nextents - 1) * sizeof(xfs_extent_64_t)))));
3482        efi_id = efd_formatp->efd_efi_id;
3483
3484        /*
3485         * Search for the EFI with the id in the EFD format structure in the
3486         * AIL.
3487         */
3488        spin_lock(&ailp->ail_lock);
3489        lip = xfs_trans_ail_cursor_first(ailp, &cur, 0);
3490        while (lip != NULL) {
3491                if (lip->li_type == XFS_LI_EFI) {
3492                        efip = (xfs_efi_log_item_t *)lip;
3493                        if (efip->efi_format.efi_id == efi_id) {
3494                                /*
3495                                 * Drop the EFD reference to the EFI. This
3496                                 * removes the EFI from the AIL and frees it.
3497                                 */
3498                                spin_unlock(&ailp->ail_lock);
3499                                xfs_efi_release(efip);
3500                                spin_lock(&ailp->ail_lock);
3501                                break;
3502                        }
3503                }
3504                lip = xfs_trans_ail_cursor_next(ailp, &cur);
3505        }
3506
3507        xfs_trans_ail_cursor_done(&cur);
3508        spin_unlock(&ailp->ail_lock);
3509
3510        return 0;
3511}
3512
3513/*
3514 * This routine is called to create an in-core extent rmap update
3515 * item from the rui format structure which was logged on disk.
3516 * It allocates an in-core rui, copies the extents from the format
3517 * structure into it, and adds the rui to the AIL with the given
3518 * LSN.
3519 */
3520STATIC int
3521xlog_recover_rui_pass2(
3522        struct xlog                     *log,
3523        struct xlog_recover_item        *item,
3524        xfs_lsn_t                       lsn)
3525{
3526        int                             error;
3527        struct xfs_mount                *mp = log->l_mp;
3528        struct xfs_rui_log_item         *ruip;
3529        struct xfs_rui_log_format       *rui_formatp;
3530
3531        rui_formatp = item->ri_buf[0].i_addr;
3532
3533        ruip = xfs_rui_init(mp, rui_formatp->rui_nextents);
3534        error = xfs_rui_copy_format(&item->ri_buf[0], &ruip->rui_format);
3535        if (error) {
3536                xfs_rui_item_free(ruip);
3537                return error;
3538        }
3539        atomic_set(&ruip->rui_next_extent, rui_formatp->rui_nextents);
3540
3541        spin_lock(&log->l_ailp->ail_lock);
3542        /*
3543         * The RUI has two references. One for the RUD and one for RUI to ensure
3544         * it makes it into the AIL. Insert the RUI into the AIL directly and
3545         * drop the RUI reference. Note that xfs_trans_ail_update() drops the
3546         * AIL lock.
3547         */
3548        xfs_trans_ail_update(log->l_ailp, &ruip->rui_item, lsn);
3549        xfs_rui_release(ruip);
3550        return 0;
3551}
3552
3553
3554/*
3555 * This routine is called when an RUD format structure is found in a committed
3556 * transaction in the log. Its purpose is to cancel the corresponding RUI if it
3557 * was still in the log. To do this it searches the AIL for the RUI with an id
3558 * equal to that in the RUD format structure. If we find it we drop the RUD
3559 * reference, which removes the RUI from the AIL and frees it.
3560 */
3561STATIC int
3562xlog_recover_rud_pass2(
3563        struct xlog                     *log,
3564        struct xlog_recover_item        *item)
3565{
3566        struct xfs_rud_log_format       *rud_formatp;
3567        struct xfs_rui_log_item         *ruip = NULL;
3568        struct xfs_log_item             *lip;
3569        uint64_t                        rui_id;
3570        struct xfs_ail_cursor           cur;
3571        struct xfs_ail                  *ailp = log->l_ailp;
3572
3573        rud_formatp = item->ri_buf[0].i_addr;
3574        ASSERT(item->ri_buf[0].i_len == sizeof(struct xfs_rud_log_format));
3575        rui_id = rud_formatp->rud_rui_id;
3576
3577        /*
3578         * Search for the RUI with the id in the RUD format structure in the
3579         * AIL.
3580         */
3581        spin_lock(&ailp->ail_lock);
3582        lip = xfs_trans_ail_cursor_first(ailp, &cur, 0);
3583        while (lip != NULL) {
3584                if (lip->li_type == XFS_LI_RUI) {
3585                        ruip = (struct xfs_rui_log_item *)lip;
3586                        if (ruip->rui_format.rui_id == rui_id) {
3587                                /*
3588                                 * Drop the RUD reference to the RUI. This
3589                                 * removes the RUI from the AIL and frees it.
3590                                 */
3591                                spin_unlock(&ailp->ail_lock);
3592                                xfs_rui_release(ruip);
3593                                spin_lock(&ailp->ail_lock);
3594                                break;
3595                        }
3596                }
3597                lip = xfs_trans_ail_cursor_next(ailp, &cur);
3598        }
3599
3600        xfs_trans_ail_cursor_done(&cur);
3601        spin_unlock(&ailp->ail_lock);
3602
3603        return 0;
3604}
3605
3606/*
3607 * Copy an CUI format buffer from the given buf, and into the destination
3608 * CUI format structure.  The CUI/CUD items were designed not to need any
3609 * special alignment handling.
3610 */
3611static int
3612xfs_cui_copy_format(
3613        struct xfs_log_iovec            *buf,
3614        struct xfs_cui_log_format       *dst_cui_fmt)
3615{
3616        struct xfs_cui_log_format       *src_cui_fmt;
3617        uint                            len;
3618
3619        src_cui_fmt = buf->i_addr;
3620        len = xfs_cui_log_format_sizeof(src_cui_fmt->cui_nextents);
3621
3622        if (buf->i_len == len) {
3623                memcpy(dst_cui_fmt, src_cui_fmt, len);
3624                return 0;
3625        }
3626        return -EFSCORRUPTED;
3627}
3628
3629/*
3630 * This routine is called to create an in-core extent refcount update
3631 * item from the cui format structure which was logged on disk.
3632 * It allocates an in-core cui, copies the extents from the format
3633 * structure into it, and adds the cui to the AIL with the given
3634 * LSN.
3635 */
3636STATIC int
3637xlog_recover_cui_pass2(
3638        struct xlog                     *log,
3639        struct xlog_recover_item        *item,
3640        xfs_lsn_t                       lsn)
3641{
3642        int                             error;
3643        struct xfs_mount                *mp = log->l_mp;
3644        struct xfs_cui_log_item         *cuip;
3645        struct xfs_cui_log_format       *cui_formatp;
3646
3647        cui_formatp = item->ri_buf[0].i_addr;
3648
3649        cuip = xfs_cui_init(mp, cui_formatp->cui_nextents);
3650        error = xfs_cui_copy_format(&item->ri_buf[0], &cuip->cui_format);
3651        if (error) {
3652                xfs_cui_item_free(cuip);
3653                return error;
3654        }
3655        atomic_set(&cuip->cui_next_extent, cui_formatp->cui_nextents);
3656
3657        spin_lock(&log->l_ailp->ail_lock);
3658        /*
3659         * The CUI has two references. One for the CUD and one for CUI to ensure
3660         * it makes it into the AIL. Insert the CUI into the AIL directly and
3661         * drop the CUI reference. Note that xfs_trans_ail_update() drops the
3662         * AIL lock.
3663         */
3664        xfs_trans_ail_update(log->l_ailp, &cuip->cui_item, lsn);
3665        xfs_cui_release(cuip);
3666        return 0;
3667}
3668
3669
3670/*
3671 * This routine is called when an CUD format structure is found in a committed
3672 * transaction in the log. Its purpose is to cancel the corresponding CUI if it
3673 * was still in the log. To do this it searches the AIL for the CUI with an id
3674 * equal to that in the CUD format structure. If we find it we drop the CUD
3675 * reference, which removes the CUI from the AIL and frees it.
3676 */
3677STATIC int
3678xlog_recover_cud_pass2(
3679        struct xlog                     *log,
3680        struct xlog_recover_item        *item)
3681{
3682        struct xfs_cud_log_format       *cud_formatp;
3683        struct xfs_cui_log_item         *cuip = NULL;
3684        struct xfs_log_item             *lip;
3685        uint64_t                        cui_id;
3686        struct xfs_ail_cursor           cur;
3687        struct xfs_ail                  *ailp = log->l_ailp;
3688
3689        cud_formatp = item->ri_buf[0].i_addr;
3690        if (item->ri_buf[0].i_len != sizeof(struct xfs_cud_log_format))
3691                return -EFSCORRUPTED;
3692        cui_id = cud_formatp->cud_cui_id;
3693
3694        /*
3695         * Search for the CUI with the id in the CUD format structure in the
3696         * AIL.
3697         */
3698        spin_lock(&ailp->ail_lock);
3699        lip = xfs_trans_ail_cursor_first(ailp, &cur, 0);
3700        while (lip != NULL) {
3701                if (lip->li_type == XFS_LI_CUI) {
3702                        cuip = (struct xfs_cui_log_item *)lip;
3703                        if (cuip->cui_format.cui_id == cui_id) {
3704                                /*
3705                                 * Drop the CUD reference to the CUI. This
3706                                 * removes the CUI from the AIL and frees it.
3707                                 */
3708                                spin_unlock(&ailp->ail_lock);
3709                                xfs_cui_release(cuip);
3710                                spin_lock(&ailp->ail_lock);
3711                                break;
3712                        }
3713                }
3714                lip = xfs_trans_ail_cursor_next(ailp, &cur);
3715        }
3716
3717        xfs_trans_ail_cursor_done(&cur);
3718        spin_unlock(&ailp->ail_lock);
3719
3720        return 0;
3721}
3722
3723/*
3724 * Copy an BUI format buffer from the given buf, and into the destination
3725 * BUI format structure.  The BUI/BUD items were designed not to need any
3726 * special alignment handling.
3727 */
3728static int
3729xfs_bui_copy_format(
3730        struct xfs_log_iovec            *buf,
3731        struct xfs_bui_log_format       *dst_bui_fmt)
3732{
3733        struct xfs_bui_log_format       *src_bui_fmt;
3734        uint                            len;
3735
3736        src_bui_fmt = buf->i_addr;
3737        len = xfs_bui_log_format_sizeof(src_bui_fmt->bui_nextents);
3738
3739        if (buf->i_len == len) {
3740                memcpy(dst_bui_fmt, src_bui_fmt, len);
3741                return 0;
3742        }
3743        return -EFSCORRUPTED;
3744}
3745
3746/*
3747 * This routine is called to create an in-core extent bmap update
3748 * item from the bui format structure which was logged on disk.
3749 * It allocates an in-core bui, copies the extents from the format
3750 * structure into it, and adds the bui to the AIL with the given
3751 * LSN.
3752 */
3753STATIC int
3754xlog_recover_bui_pass2(
3755        struct xlog                     *log,
3756        struct xlog_recover_item        *item,
3757        xfs_lsn_t                       lsn)
3758{
3759        int                             error;
3760        struct xfs_mount                *mp = log->l_mp;
3761        struct xfs_bui_log_item         *buip;
3762        struct xfs_bui_log_format       *bui_formatp;
3763
3764        bui_formatp = item->ri_buf[0].i_addr;
3765
3766        if (bui_formatp->bui_nextents != XFS_BUI_MAX_FAST_EXTENTS)
3767                return -EFSCORRUPTED;
3768        buip = xfs_bui_init(mp);
3769        error = xfs_bui_copy_format(&item->ri_buf[0], &buip->bui_format);
3770        if (error) {
3771                xfs_bui_item_free(buip);
3772                return error;
3773        }
3774        atomic_set(&buip->bui_next_extent, bui_formatp->bui_nextents);
3775
3776        spin_lock(&log->l_ailp->ail_lock);
3777        /*
3778         * The RUI has two references. One for the RUD and one for RUI to ensure
3779         * it makes it into the AIL. Insert the RUI into the AIL directly and
3780         * drop the RUI reference. Note that xfs_trans_ail_update() drops the
3781         * AIL lock.
3782         */
3783        xfs_trans_ail_update(log->l_ailp, &buip->bui_item, lsn);
3784        xfs_bui_release(buip);
3785        return 0;
3786}
3787
3788
3789/*
3790 * This routine is called when an BUD format structure is found in a committed
3791 * transaction in the log. Its purpose is to cancel the corresponding BUI if it
3792 * was still in the log. To do this it searches the AIL for the BUI with an id
3793 * equal to that in the BUD format structure. If we find it we drop the BUD
3794 * reference, which removes the BUI from the AIL and frees it.
3795 */
3796STATIC int
3797xlog_recover_bud_pass2(
3798        struct xlog                     *log,
3799        struct xlog_recover_item        *item)
3800{
3801        struct xfs_bud_log_format       *bud_formatp;
3802        struct xfs_bui_log_item         *buip = NULL;
3803        struct xfs_log_item             *lip;
3804        uint64_t                        bui_id;
3805        struct xfs_ail_cursor           cur;
3806        struct xfs_ail                  *ailp = log->l_ailp;
3807
3808        bud_formatp = item->ri_buf[0].i_addr;
3809        if (item->ri_buf[0].i_len != sizeof(struct xfs_bud_log_format))
3810                return -EFSCORRUPTED;
3811        bui_id = bud_formatp->bud_bui_id;
3812
3813        /*
3814         * Search for the BUI with the id in the BUD format structure in the
3815         * AIL.
3816         */
3817        spin_lock(&ailp->ail_lock);
3818        lip = xfs_trans_ail_cursor_first(ailp, &cur, 0);
3819        while (lip != NULL) {
3820                if (lip->li_type == XFS_LI_BUI) {
3821                        buip = (struct xfs_bui_log_item *)lip;
3822                        if (buip->bui_format.bui_id == bui_id) {
3823                                /*
3824                                 * Drop the BUD reference to the BUI. This
3825                                 * removes the BUI from the AIL and frees it.
3826                                 */
3827                                spin_unlock(&ailp->ail_lock);
3828                                xfs_bui_release(buip);
3829                                spin_lock(&ailp->ail_lock);
3830                                break;
3831                        }
3832                }
3833                lip = xfs_trans_ail_cursor_next(ailp, &cur);
3834        }
3835
3836        xfs_trans_ail_cursor_done(&cur);
3837        spin_unlock(&ailp->ail_lock);
3838
3839        return 0;
3840}
3841
3842/*
3843 * This routine is called when an inode create format structure is found in a
3844 * committed transaction in the log.  It's purpose is to initialise the inodes
3845 * being allocated on disk. This requires us to get inode cluster buffers that
3846 * match the range to be initialised, stamped with inode templates and written
3847 * by delayed write so that subsequent modifications will hit the cached buffer
3848 * and only need writing out at the end of recovery.
3849 */
3850STATIC int
3851xlog_recover_do_icreate_pass2(
3852        struct xlog             *log,
3853        struct list_head        *buffer_list,
3854        xlog_recover_item_t     *item)
3855{
3856        struct xfs_mount        *mp = log->l_mp;
3857        struct xfs_icreate_log  *icl;
3858        xfs_agnumber_t          agno;
3859        xfs_agblock_t           agbno;
3860        unsigned int            count;
3861        unsigned int            isize;
3862        xfs_agblock_t           length;
3863        int                     blks_per_cluster;
3864        int                     bb_per_cluster;
3865        int                     cancel_count;
3866        int                     nbufs;
3867        int                     i;
3868
3869        icl = (struct xfs_icreate_log *)item->ri_buf[0].i_addr;
3870        if (icl->icl_type != XFS_LI_ICREATE) {
3871                xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad type");
3872                return -EINVAL;
3873        }
3874
3875        if (icl->icl_size != 1) {
3876                xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad icl size");
3877                return -EINVAL;
3878        }
3879
3880        agno = be32_to_cpu(icl->icl_ag);
3881        if (agno >= mp->m_sb.sb_agcount) {
3882                xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad agno");
3883                return -EINVAL;
3884        }
3885        agbno = be32_to_cpu(icl->icl_agbno);
3886        if (!agbno || agbno == NULLAGBLOCK || agbno >= mp->m_sb.sb_agblocks) {
3887                xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad agbno");
3888                return -EINVAL;
3889        }
3890        isize = be32_to_cpu(icl->icl_isize);
3891        if (isize != mp->m_sb.sb_inodesize) {
3892                xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad isize");
3893                return -EINVAL;
3894        }
3895        count = be32_to_cpu(icl->icl_count);
3896        if (!count) {
3897                xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad count");
3898                return -EINVAL;
3899        }
3900        length = be32_to_cpu(icl->icl_length);
3901        if (!length || length >= mp->m_sb.sb_agblocks) {
3902                xfs_warn(log->l_mp, "xlog_recover_do_icreate_trans: bad length");
3903                return -EINVAL;
3904        }
3905
3906        /*
3907         * The inode chunk is either full or sparse and we only support
3908         * m_ialloc_min_blks sized sparse allocations at this time.
3909         */
3910        if (length != mp->m_ialloc_blks &&
3911            length != mp->m_ialloc_min_blks) {
3912                xfs_warn(log->l_mp,
3913                         "%s: unsupported chunk length", __FUNCTION__);
3914                return -EINVAL;
3915        }
3916
3917        /* verify inode count is consistent with extent length */
3918        if ((count >> mp->m_sb.sb_inopblog) != length) {
3919                xfs_warn(log->l_mp,
3920                         "%s: inconsistent inode count and chunk length",
3921                         __FUNCTION__);
3922                return -EINVAL;
3923        }
3924
3925        /*
3926         * The icreate transaction can cover multiple cluster buffers and these
3927         * buffers could have been freed and reused. Check the individual
3928         * buffers for cancellation so we don't overwrite anything written after
3929         * a cancellation.
3930         */
3931        blks_per_cluster = xfs_icluster_size_fsb(mp);
3932        bb_per_cluster = XFS_FSB_TO_BB(mp, blks_per_cluster);
3933        nbufs = length / blks_per_cluster;
3934        for (i = 0, cancel_count = 0; i < nbufs; i++) {
3935                xfs_daddr_t     daddr;
3936
3937                daddr = XFS_AGB_TO_DADDR(mp, agno,
3938                                         agbno + i * blks_per_cluster);
3939                if (xlog_check_buffer_cancelled(log, daddr, bb_per_cluster, 0))
3940                        cancel_count++;
3941        }
3942
3943        /*
3944         * We currently only use icreate for a single allocation at a time. This
3945         * means we should expect either all or none of the buffers to be
3946         * cancelled. Be conservative and skip replay if at least one buffer is
3947         * cancelled, but warn the user that something is awry if the buffers
3948         * are not consistent.
3949         *
3950         * XXX: This must be refined to only skip cancelled clusters once we use
3951         * icreate for multiple chunk allocations.
3952         */
3953        ASSERT(!cancel_count || cancel_count == nbufs);
3954        if (cancel_count) {
3955                if (cancel_count != nbufs)
3956                        xfs_warn(mp,
3957        "WARNING: partial inode chunk cancellation, skipped icreate.");
3958                trace_xfs_log_recover_icreate_cancel(log, icl);
3959                return 0;
3960        }
3961
3962        trace_xfs_log_recover_icreate_recover(log, icl);
3963        return xfs_ialloc_inode_init(mp, NULL, buffer_list, count, agno, agbno,
3964                                     length, be32_to_cpu(icl->icl_gen));
3965}
3966
3967STATIC void
3968xlog_recover_buffer_ra_pass2(
3969        struct xlog                     *log,
3970        struct xlog_recover_item        *item)
3971{
3972        struct xfs_buf_log_format       *buf_f = item->ri_buf[0].i_addr;
3973        struct xfs_mount                *mp = log->l_mp;
3974
3975        if (xlog_peek_buffer_cancelled(log, buf_f->blf_blkno,
3976                        buf_f->blf_len, buf_f->blf_flags)) {
3977                return;
3978        }
3979
3980        xfs_buf_readahead(mp->m_ddev_targp, buf_f->blf_blkno,
3981                                buf_f->blf_len, NULL);
3982}
3983
3984STATIC void
3985xlog_recover_inode_ra_pass2(
3986        struct xlog                     *log,
3987        struct xlog_recover_item        *item)
3988{
3989        struct xfs_inode_log_format     ilf_buf;
3990        struct xfs_inode_log_format     *ilfp;
3991        struct xfs_mount                *mp = log->l_mp;
3992        int                     error;
3993
3994        if (item->ri_buf[0].i_len == sizeof(struct xfs_inode_log_format)) {
3995                ilfp = item->ri_buf[0].i_addr;
3996        } else {
3997                ilfp = &ilf_buf;
3998                memset(ilfp, 0, sizeof(*ilfp));
3999                error = xfs_inode_item_format_convert(&item->ri_buf[0], ilfp);
4000                if (error)
4001                        return;
4002        }
4003
4004        if (xlog_peek_buffer_cancelled(log, ilfp->ilf_blkno, ilfp->ilf_len, 0))
4005                return;
4006
4007        xfs_buf_readahead(mp->m_ddev_targp, ilfp->ilf_blkno,
4008                                ilfp->ilf_len, &xfs_inode_buf_ra_ops);
4009}
4010
4011STATIC void
4012xlog_recover_dquot_ra_pass2(
4013        struct xlog                     *log,
4014        struct xlog_recover_item        *item)
4015{
4016        struct xfs_mount        *mp = log->l_mp;
4017        struct xfs_disk_dquot   *recddq;
4018        struct xfs_dq_logformat *dq_f;
4019        uint                    type;
4020        int                     len;
4021
4022
4023        if (mp->m_qflags == 0)
4024                return;
4025
4026        recddq = item->ri_buf[1].i_addr;
4027        if (recddq == NULL)
4028                return;
4029        if (item->ri_buf[1].i_len < sizeof(struct xfs_disk_dquot))
4030                return;
4031
4032        type = recddq->d_flags & (XFS_DQ_USER | XFS_DQ_PROJ | XFS_DQ_GROUP);
4033        ASSERT(type);
4034        if (log->l_quotaoffs_flag & type)
4035                return;
4036
4037        dq_f = item->ri_buf[0].i_addr;
4038        ASSERT(dq_f);
4039        ASSERT(dq_f->qlf_len == 1);
4040
4041        len = XFS_FSB_TO_BB(mp, dq_f->qlf_len);
4042        if (xlog_peek_buffer_cancelled(log, dq_f->qlf_blkno, len, 0))
4043                return;
4044
4045        xfs_buf_readahead(mp->m_ddev_targp, dq_f->qlf_blkno, len,
4046                          &xfs_dquot_buf_ra_ops);
4047}
4048
4049STATIC void
4050xlog_recover_ra_pass2(
4051        struct xlog                     *log,
4052        struct xlog_recover_item        *item)
4053{
4054        switch (ITEM_TYPE(item)) {
4055        case XFS_LI_BUF:
4056                xlog_recover_buffer_ra_pass2(log, item);
4057                break;
4058        case XFS_LI_INODE:
4059                xlog_recover_inode_ra_pass2(log, item);
4060                break;
4061        case XFS_LI_DQUOT:
4062                xlog_recover_dquot_ra_pass2(log, item);
4063                break;
4064        case XFS_LI_EFI:
4065        case XFS_LI_EFD:
4066        case XFS_LI_QUOTAOFF:
4067        case XFS_LI_RUI:
4068        case XFS_LI_RUD:
4069        case XFS_LI_CUI:
4070        case XFS_LI_CUD:
4071        case XFS_LI_BUI:
4072        case XFS_LI_BUD:
4073        default:
4074                break;
4075        }
4076}
4077
4078STATIC int
4079xlog_recover_commit_pass1(
4080        struct xlog                     *log,
4081        struct xlog_recover             *trans,
4082        struct xlog_recover_item        *item)
4083{
4084        trace_xfs_log_recover_item_recover(log, trans, item, XLOG_RECOVER_PASS1);
4085
4086        switch (ITEM_TYPE(item)) {
4087        case XFS_LI_BUF:
4088                return xlog_recover_buffer_pass1(log, item);
4089        case XFS_LI_QUOTAOFF:
4090                return xlog_recover_quotaoff_pass1(log, item);
4091        case XFS_LI_INODE:
4092        case XFS_LI_EFI:
4093        case XFS_LI_EFD:
4094        case XFS_LI_DQUOT:
4095        case XFS_LI_ICREATE:
4096        case XFS_LI_RUI:
4097        case XFS_LI_RUD:
4098        case XFS_LI_CUI:
4099        case XFS_LI_CUD:
4100        case XFS_LI_BUI:
4101        case XFS_LI_BUD:
4102                /* nothing to do in pass 1 */
4103                return 0;
4104        default:
4105                xfs_warn(log->l_mp, "%s: invalid item type (%d)",
4106                        __func__, ITEM_TYPE(item));
4107                ASSERT(0);
4108                return -EIO;
4109        }
4110}
4111
4112STATIC int
4113xlog_recover_commit_pass2(
4114        struct xlog                     *log,
4115        struct xlog_recover             *trans,
4116        struct list_head                *buffer_list,
4117        struct xlog_recover_item        *item)
4118{
4119        trace_xfs_log_recover_item_recover(log, trans, item, XLOG_RECOVER_PASS2);
4120
4121        switch (ITEM_TYPE(item)) {
4122        case XFS_LI_BUF:
4123                return xlog_recover_buffer_pass2(log, buffer_list, item,
4124                                                 trans->r_lsn);
4125        case XFS_LI_INODE:
4126                return xlog_recover_inode_pass2(log, buffer_list, item,
4127                                                 trans->r_lsn);
4128        case XFS_LI_EFI:
4129                return xlog_recover_efi_pass2(log, item, trans->r_lsn);
4130        case XFS_LI_EFD:
4131                return xlog_recover_efd_pass2(log, item);
4132        case XFS_LI_RUI:
4133                return xlog_recover_rui_pass2(log, item, trans->r_lsn);
4134        case XFS_LI_RUD:
4135                return xlog_recover_rud_pass2(log, item);
4136        case XFS_LI_CUI:
4137                return xlog_recover_cui_pass2(log, item, trans->r_lsn);
4138        case XFS_LI_CUD:
4139                return xlog_recover_cud_pass2(log, item);
4140        case XFS_LI_BUI:
4141                return xlog_recover_bui_pass2(log, item, trans->r_lsn);
4142        case XFS_LI_BUD:
4143                return xlog_recover_bud_pass2(log, item);
4144        case XFS_LI_DQUOT:
4145                return xlog_recover_dquot_pass2(log, buffer_list, item,
4146                                                trans->r_lsn);
4147        case XFS_LI_ICREATE:
4148                return xlog_recover_do_icreate_pass2(log, buffer_list, item);
4149        case XFS_LI_QUOTAOFF:
4150                /* nothing to do in pass2 */
4151                return 0;
4152        default:
4153                xfs_warn(log->l_mp, "%s: invalid item type (%d)",
4154                        __func__, ITEM_TYPE(item));
4155                ASSERT(0);
4156                return -EIO;
4157        }
4158}
4159
4160STATIC int
4161xlog_recover_items_pass2(
4162        struct xlog                     *log,
4163        struct xlog_recover             *trans,
4164        struct list_head                *buffer_list,
4165        struct list_head                *item_list)
4166{
4167        struct xlog_recover_item        *item;
4168        int                             error = 0;
4169
4170        list_for_each_entry(item, item_list, ri_list) {
4171                error = xlog_recover_commit_pass2(log, trans,
4172                                          buffer_list, item);
4173                if (error)
4174                        return error;
4175        }
4176
4177        return error;
4178}
4179
4180/*
4181 * Perform the transaction.
4182 *
4183 * If the transaction modifies a buffer or inode, do it now.  Otherwise,
4184 * EFIs and EFDs get queued up by adding entries into the AIL for them.
4185 */
4186STATIC int
4187xlog_recover_commit_trans(
4188        struct xlog             *log,
4189        struct xlog_recover     *trans,
4190        int                     pass,
4191        struct list_head        *buffer_list)
4192{
4193        int                             error = 0;
4194        int                             items_queued = 0;
4195        struct xlog_recover_item        *item;
4196        struct xlog_recover_item        *next;
4197        LIST_HEAD                       (ra_list);
4198        LIST_HEAD                       (done_list);
4199
4200        #define XLOG_RECOVER_COMMIT_QUEUE_MAX 100
4201
4202        hlist_del_init(&trans->r_list);
4203
4204        error = xlog_recover_reorder_trans(log, trans, pass);
4205        if (error)
4206                return error;
4207
4208        list_for_each_entry_safe(item, next, &trans->r_itemq, ri_list) {
4209                switch (pass) {
4210                case XLOG_RECOVER_PASS1:
4211                        error = xlog_recover_commit_pass1(log, trans, item);
4212                        break;
4213                case XLOG_RECOVER_PASS2:
4214                        xlog_recover_ra_pass2(log, item);
4215                        list_move_tail(&item->ri_list, &ra_list);
4216                        items_queued++;
4217                        if (items_queued >= XLOG_RECOVER_COMMIT_QUEUE_MAX) {
4218                                error = xlog_recover_items_pass2(log, trans,
4219                                                buffer_list, &ra_list);
4220                                list_splice_tail_init(&ra_list, &done_list);
4221                                items_queued = 0;
4222                        }
4223
4224                        break;
4225                default:
4226                        ASSERT(0);
4227                }
4228
4229                if (error)
4230                        goto out;
4231        }
4232
4233out:
4234        if (!list_empty(&ra_list)) {
4235                if (!error)
4236                        error = xlog_recover_items_pass2(log, trans,
4237                                        buffer_list, &ra_list);
4238                list_splice_tail_init(&ra_list, &done_list);
4239        }
4240
4241        if (!list_empty(&done_list))
4242                list_splice_init(&done_list, &trans->r_itemq);
4243
4244        return error;
4245}
4246
4247STATIC void
4248xlog_recover_add_item(
4249        struct list_head        *head)
4250{
4251        xlog_recover_item_t     *item;
4252
4253        item = kmem_zalloc(sizeof(xlog_recover_item_t), KM_SLEEP);
4254        INIT_LIST_HEAD(&item->ri_list);
4255        list_add_tail(&item->ri_list, head);
4256}
4257
4258STATIC int
4259xlog_recover_add_to_cont_trans(
4260        struct xlog             *log,
4261        struct xlog_recover     *trans,
4262        char                    *dp,
4263        int                     len)
4264{
4265        xlog_recover_item_t     *item;
4266        char                    *ptr, *old_ptr;
4267        int                     old_len;
4268
4269        /*
4270         * If the transaction is empty, the header was split across this and the
4271         * previous record. Copy the rest of the header.
4272         */
4273        if (list_empty(&trans->r_itemq)) {
4274                ASSERT(len <= sizeof(struct xfs_trans_header));
4275                if (len > sizeof(struct xfs_trans_header)) {
4276                        xfs_warn(log->l_mp, "%s: bad header length", __func__);
4277                        return -EIO;
4278                }
4279
4280                xlog_recover_add_item(&trans->r_itemq);
4281                ptr = (char *)&trans->r_theader +
4282                                sizeof(struct xfs_trans_header) - len;
4283                memcpy(ptr, dp, len);
4284                return 0;
4285        }
4286
4287        /* take the tail entry */
4288        item = list_entry(trans->r_itemq.prev, xlog_recover_item_t, ri_list);
4289
4290        old_ptr = item->ri_buf[item->ri_cnt-1].i_addr;
4291        old_len = item->ri_buf[item->ri_cnt-1].i_len;
4292
4293        ptr = kmem_realloc(old_ptr, len + old_len, KM_SLEEP);
4294        memcpy(&ptr[old_len], dp, len);
4295        item->ri_buf[item->ri_cnt-1].i_len += len;
4296        item->ri_buf[item->ri_cnt-1].i_addr = ptr;
4297        trace_xfs_log_recover_item_add_cont(log, trans, item, 0);
4298        return 0;
4299}
4300
4301/*
4302 * The next region to add is the start of a new region.  It could be
4303 * a whole region or it could be the first part of a new region.  Because
4304 * of this, the assumption here is that the type and size fields of all
4305 * format structures fit into the first 32 bits of the structure.
4306 *
4307 * This works because all regions must be 32 bit aligned.  Therefore, we
4308 * either have both fields or we have neither field.  In the case we have
4309 * neither field, the data part of the region is zero length.  We only have
4310 * a log_op_header and can throw away the header since a new one will appear
4311 * later.  If we have at least 4 bytes, then we can determine how many regions
4312 * will appear in the current log item.
4313 */
4314STATIC int
4315xlog_recover_add_to_trans(
4316        struct xlog             *log,
4317        struct xlog_recover     *trans,
4318        char                    *dp,
4319        int                     len)
4320{
4321        struct xfs_inode_log_format     *in_f;                  /* any will do */
4322        xlog_recover_item_t     *item;
4323        char                    *ptr;
4324
4325        if (!len)
4326                return 0;
4327        if (list_empty(&trans->r_itemq)) {
4328                /* we need to catch log corruptions here */
4329                if (*(uint *)dp != XFS_TRANS_HEADER_MAGIC) {
4330                        xfs_warn(log->l_mp, "%s: bad header magic number",
4331                                __func__);
4332                        ASSERT(0);
4333                        return -EIO;
4334                }
4335
4336                if (len > sizeof(struct xfs_trans_header)) {
4337                        xfs_warn(log->l_mp, "%s: bad header length", __func__);
4338                        ASSERT(0);
4339                        return -EIO;
4340                }
4341
4342                /*
4343                 * The transaction header can be arbitrarily split across op
4344                 * records. If we don't have the whole thing here, copy what we
4345                 * do have and handle the rest in the next record.
4346                 */
4347                if (len == sizeof(struct xfs_trans_header))
4348                        xlog_recover_add_item(&trans->r_itemq);
4349                memcpy(&trans->r_theader, dp, len);
4350                return 0;
4351        }
4352
4353        ptr = kmem_alloc(len, KM_SLEEP);
4354        memcpy(ptr, dp, len);
4355        in_f = (struct xfs_inode_log_format *)ptr;
4356
4357        /* take the tail entry */
4358        item = list_entry(trans->r_itemq.prev, xlog_recover_item_t, ri_list);
4359        if (item->ri_total != 0 &&
4360             item->ri_total == item->ri_cnt) {
4361                /* tail item is in use, get a new one */
4362                xlog_recover_add_item(&trans->r_itemq);
4363                item = list_entry(trans->r_itemq.prev,
4364                                        xlog_recover_item_t, ri_list);
4365        }
4366
4367        if (item->ri_total == 0) {              /* first region to be added */
4368                if (in_f->ilf_size == 0 ||
4369                    in_f->ilf_size > XLOG_MAX_REGIONS_IN_ITEM) {
4370                        xfs_warn(log->l_mp,
4371                "bad number of regions (%d) in inode log format",
4372                                  in_f->ilf_size);
4373                        ASSERT(0);
4374                        kmem_free(ptr);
4375                        return -EIO;
4376                }
4377
4378                item->ri_total = in_f->ilf_size;
4379                item->ri_buf =
4380                        kmem_zalloc(item->ri_total * sizeof(xfs_log_iovec_t),
4381                                    KM_SLEEP);
4382        }
4383        ASSERT(item->ri_total > item->ri_cnt);
4384        /* Description region is ri_buf[0] */
4385        item->ri_buf[item->ri_cnt].i_addr = ptr;
4386        item->ri_buf[item->ri_cnt].i_len  = len;
4387        item->ri_cnt++;
4388        trace_xfs_log_recover_item_add(log, trans, item, 0);
4389        return 0;
4390}
4391
4392/*
4393 * Free up any resources allocated by the transaction
4394 *
4395 * Remember that EFIs, EFDs, and IUNLINKs are handled later.
4396 */
4397STATIC void
4398xlog_recover_free_trans(
4399        struct xlog_recover     *trans)
4400{
4401        xlog_recover_item_t     *item, *n;
4402        int                     i;
4403
4404        hlist_del_init(&trans->r_list);
4405
4406        list_for_each_entry_safe(item, n, &trans->r_itemq, ri_list) {
4407                /* Free the regions in the item. */
4408                list_del(&item->ri_list);
4409                for (i = 0; i < item->ri_cnt; i++)
4410                        kmem_free(item->ri_buf[i].i_addr);
4411                /* Free the item itself */
4412                kmem_free(item->ri_buf);
4413                kmem_free(item);
4414        }
4415        /* Free the transaction recover structure */
4416        kmem_free(trans);
4417}
4418
4419/*
4420 * On error or completion, trans is freed.
4421 */
4422STATIC int
4423xlog_recovery_process_trans(
4424        struct xlog             *log,
4425        struct xlog_recover     *trans,
4426        char                    *dp,
4427        unsigned int            len,
4428        unsigned int            flags,
4429        int                     pass,
4430        struct list_head        *buffer_list)
4431{
4432        int                     error = 0;
4433        bool                    freeit = false;
4434
4435        /* mask off ophdr transaction container flags */
4436        flags &= ~XLOG_END_TRANS;
4437        if (flags & XLOG_WAS_CONT_TRANS)
4438                flags &= ~XLOG_CONTINUE_TRANS;
4439
4440        /*
4441         * Callees must not free the trans structure. We'll decide if we need to
4442         * free it or not based on the operation being done and it's result.
4443         */
4444        switch (flags) {
4445        /* expected flag values */
4446        case 0:
4447        case XLOG_CONTINUE_TRANS:
4448                error = xlog_recover_add_to_trans(log, trans, dp, len);
4449                break;
4450        case XLOG_WAS_CONT_TRANS:
4451                error = xlog_recover_add_to_cont_trans(log, trans, dp, len);
4452                break;
4453        case XLOG_COMMIT_TRANS:
4454                error = xlog_recover_commit_trans(log, trans, pass,
4455                                                  buffer_list);
4456                /* success or fail, we are now done with this transaction. */
4457                freeit = true;
4458                break;
4459
4460        /* unexpected flag values */
4461        case XLOG_UNMOUNT_TRANS:
4462                /* just skip trans */
4463                xfs_warn(log->l_mp, "%s: Unmount LR", __func__);
4464                freeit = true;
4465                break;
4466        case XLOG_START_TRANS:
4467        default:
4468                xfs_warn(log->l_mp, "%s: bad flag 0x%x", __func__, flags);
4469                ASSERT(0);
4470                error = -EIO;
4471                break;
4472        }
4473        if (error || freeit)
4474                xlog_recover_free_trans(trans);
4475        return error;
4476}
4477
4478/*
4479 * Lookup the transaction recovery structure associated with the ID in the
4480 * current ophdr. If the transaction doesn't exist and the start flag is set in
4481 * the ophdr, then allocate a new transaction for future ID matches to find.
4482 * Either way, return what we found during the lookup - an existing transaction
4483 * or nothing.
4484 */
4485STATIC struct xlog_recover *
4486xlog_recover_ophdr_to_trans(
4487        struct hlist_head       rhash[],
4488        struct xlog_rec_header  *rhead,
4489        struct xlog_op_header   *ohead)
4490{
4491        struct xlog_recover     *trans;
4492        xlog_tid_t              tid;
4493        struct hlist_head       *rhp;
4494
4495        tid = be32_to_cpu(ohead->oh_tid);
4496        rhp = &rhash[XLOG_RHASH(tid)];
4497        hlist_for_each_entry(trans, rhp, r_list) {
4498                if (trans->r_log_tid == tid)
4499                        return trans;
4500        }
4501
4502        /*
4503         * skip over non-start transaction headers - we could be
4504         * processing slack space before the next transaction starts
4505         */
4506        if (!(ohead->oh_flags & XLOG_START_TRANS))
4507                return NULL;
4508
4509        ASSERT(be32_to_cpu(ohead->oh_len) == 0);
4510
4511        /*
4512         * This is a new transaction so allocate a new recovery container to
4513         * hold the recovery ops that will follow.
4514         */
4515        trans = kmem_zalloc(sizeof(struct xlog_recover), KM_SLEEP);
4516        trans->r_log_tid = tid;
4517        trans->r_lsn = be64_to_cpu(rhead->h_lsn);
4518        INIT_LIST_HEAD(&trans->r_itemq);
4519        INIT_HLIST_NODE(&trans->r_list);
4520        hlist_add_head(&trans->r_list, rhp);
4521
4522        /*
4523         * Nothing more to do for this ophdr. Items to be added to this new
4524         * transaction will be in subsequent ophdr containers.
4525         */
4526        return NULL;
4527}
4528
4529STATIC int
4530xlog_recover_process_ophdr(
4531        struct xlog             *log,
4532        struct hlist_head       rhash[],
4533        struct xlog_rec_header  *rhead,
4534        struct xlog_op_header   *ohead,
4535        char                    *dp,
4536        char                    *end,
4537        int                     pass,
4538        struct list_head        *buffer_list)
4539{
4540        struct xlog_recover     *trans;
4541        unsigned int            len;
4542        int                     error;
4543
4544        /* Do we understand who wrote this op? */
4545        if (ohead->oh_clientid != XFS_TRANSACTION &&
4546            ohead->oh_clientid != XFS_LOG) {
4547                xfs_warn(log->l_mp, "%s: bad clientid 0x%x",
4548                        __func__, ohead->oh_clientid);
4549                ASSERT(0);
4550                return -EIO;
4551        }
4552
4553        /*
4554         * Check the ophdr contains all the data it is supposed to contain.
4555         */
4556        len = be32_to_cpu(ohead->oh_len);
4557        if (dp + len > end) {
4558                xfs_warn(log->l_mp, "%s: bad length 0x%x", __func__, len);
4559                WARN_ON(1);
4560                return -EIO;
4561        }
4562
4563        trans = xlog_recover_ophdr_to_trans(rhash, rhead, ohead);
4564        if (!trans) {
4565                /* nothing to do, so skip over this ophdr */
4566                return 0;
4567        }
4568
4569        /*
4570         * The recovered buffer queue is drained only once we know that all
4571         * recovery items for the current LSN have been processed. This is
4572         * required because:
4573         *
4574         * - Buffer write submission updates the metadata LSN of the buffer.
4575         * - Log recovery skips items with a metadata LSN >= the current LSN of
4576         *   the recovery item.
4577         * - Separate recovery items against the same metadata buffer can share
4578         *   a current LSN. I.e., consider that the LSN of a recovery item is
4579         *   defined as the starting LSN of the first record in which its
4580         *   transaction appears, that a record can hold multiple transactions,
4581         *   and/or that a transaction can span multiple records.
4582         *
4583         * In other words, we are allowed to submit a buffer from log recovery
4584         * once per current LSN. Otherwise, we may incorrectly skip recovery
4585         * items and cause corruption.
4586         *
4587         * We don't know up front whether buffers are updated multiple times per
4588         * LSN. Therefore, track the current LSN of each commit log record as it
4589         * is processed and drain the queue when it changes. Use commit records
4590         * because they are ordered correctly by the logging code.
4591         */
4592        if (log->l_recovery_lsn != trans->r_lsn &&
4593            ohead->oh_flags & XLOG_COMMIT_TRANS) {
4594                error = xfs_buf_delwri_submit(buffer_list);
4595                if (error)
4596                        return error;
4597                log->l_recovery_lsn = trans->r_lsn;
4598        }
4599
4600        return xlog_recovery_process_trans(log, trans, dp, len,
4601                                           ohead->oh_flags, pass, buffer_list);
4602}
4603
4604/*
4605 * There are two valid states of the r_state field.  0 indicates that the
4606 * transaction structure is in a normal state.  We have either seen the
4607 * start of the transaction or the last operation we added was not a partial
4608 * operation.  If the last operation we added to the transaction was a
4609 * partial operation, we need to mark r_state with XLOG_WAS_CONT_TRANS.
4610 *
4611 * NOTE: skip LRs with 0 data length.
4612 */
4613STATIC int
4614xlog_recover_process_data(
4615        struct xlog             *log,
4616        struct hlist_head       rhash[],
4617        struct xlog_rec_header  *rhead,
4618        char                    *dp,
4619        int                     pass,
4620        struct list_head        *buffer_list)
4621{
4622        struct xlog_op_header   *ohead;
4623        char                    *end;
4624        int                     num_logops;
4625        int                     error;
4626
4627        end = dp + be32_to_cpu(rhead->h_len);
4628        num_logops = be32_to_cpu(rhead->h_num_logops);
4629
4630        /* check the log format matches our own - else we can't recover */
4631        if (xlog_header_check_recover(log->l_mp, rhead))
4632                return -EIO;
4633
4634        trace_xfs_log_recover_record(log, rhead, pass);
4635        while ((dp < end) && num_logops) {
4636
4637                ohead = (struct xlog_op_header *)dp;
4638                dp += sizeof(*ohead);
4639                ASSERT(dp <= end);
4640
4641                /* errors will abort recovery */
4642                error = xlog_recover_process_ophdr(log, rhash, rhead, ohead,
4643                                                   dp, end, pass, buffer_list);
4644                if (error)
4645                        return error;
4646
4647                dp += be32_to_cpu(ohead->oh_len);
4648                num_logops--;
4649        }
4650        return 0;
4651}
4652
4653/* Recover the EFI if necessary. */
4654STATIC int
4655xlog_recover_process_efi(
4656        struct xfs_mount                *mp,
4657        struct xfs_ail                  *ailp,
4658        struct xfs_log_item             *lip)
4659{
4660        struct xfs_efi_log_item         *efip;
4661        int                             error;
4662
4663        /*
4664         * Skip EFIs that we've already processed.
4665         */
4666        efip = container_of(lip, struct xfs_efi_log_item, efi_item);
4667        if (test_bit(XFS_EFI_RECOVERED, &efip->efi_flags))
4668                return 0;
4669
4670        spin_unlock(&ailp->ail_lock);
4671        error = xfs_efi_recover(mp, efip);
4672        spin_lock(&ailp->ail_lock);
4673
4674        return error;
4675}
4676
4677/* Release the EFI since we're cancelling everything. */
4678STATIC void
4679xlog_recover_cancel_efi(
4680        struct xfs_mount                *mp,
4681        struct xfs_ail                  *ailp,
4682        struct xfs_log_item             *lip)
4683{
4684        struct xfs_efi_log_item         *efip;
4685
4686        efip = container_of(lip, struct xfs_efi_log_item, efi_item);
4687
4688        spin_unlock(&ailp->ail_lock);
4689        xfs_efi_release(efip);
4690        spin_lock(&ailp->ail_lock);
4691}
4692
4693/* Recover the RUI if necessary. */
4694STATIC int
4695xlog_recover_process_rui(
4696        struct xfs_mount                *mp,
4697        struct xfs_ail                  *ailp,
4698        struct xfs_log_item             *lip)
4699{
4700        struct xfs_rui_log_item         *ruip;
4701        int                             error;
4702
4703        /*
4704         * Skip RUIs that we've already processed.
4705         */
4706        ruip = container_of(lip, struct xfs_rui_log_item, rui_item);
4707        if (test_bit(XFS_RUI_RECOVERED, &ruip->rui_flags))
4708                return 0;
4709
4710        spin_unlock(&ailp->ail_lock);
4711        error = xfs_rui_recover(mp, ruip);
4712        spin_lock(&ailp->ail_lock);
4713
4714        return error;
4715}
4716
4717/* Release the RUI since we're cancelling everything. */
4718STATIC void
4719xlog_recover_cancel_rui(
4720        struct xfs_mount                *mp,
4721        struct xfs_ail                  *ailp,
4722        struct xfs_log_item             *lip)
4723{
4724        struct xfs_rui_log_item         *ruip;
4725
4726        ruip = container_of(lip, struct xfs_rui_log_item, rui_item);
4727
4728        spin_unlock(&ailp->ail_lock);
4729        xfs_rui_release(ruip);
4730        spin_lock(&ailp->ail_lock);
4731}
4732
4733/* Recover the CUI if necessary. */
4734STATIC int
4735xlog_recover_process_cui(
4736        struct xfs_mount                *mp,
4737        struct xfs_ail                  *ailp,
4738        struct xfs_log_item             *lip,
4739        struct xfs_defer_ops            *dfops)
4740{
4741        struct xfs_cui_log_item         *cuip;
4742        int                             error;
4743
4744        /*
4745         * Skip CUIs that we've already processed.
4746         */
4747        cuip = container_of(lip, struct xfs_cui_log_item, cui_item);
4748        if (test_bit(XFS_CUI_RECOVERED, &cuip->cui_flags))
4749                return 0;
4750
4751        spin_unlock(&ailp->ail_lock);
4752        error = xfs_cui_recover(mp, cuip, dfops);
4753        spin_lock(&ailp->ail_lock);
4754
4755        return error;
4756}
4757
4758/* Release the CUI since we're cancelling everything. */
4759STATIC void
4760xlog_recover_cancel_cui(
4761        struct xfs_mount                *mp,
4762        struct xfs_ail                  *ailp,
4763        struct xfs_log_item             *lip)
4764{
4765        struct xfs_cui_log_item         *cuip;
4766
4767        cuip = container_of(lip, struct xfs_cui_log_item, cui_item);
4768
4769        spin_unlock(&ailp->ail_lock);
4770        xfs_cui_release(cuip);
4771        spin_lock(&ailp->ail_lock);
4772}
4773
4774/* Recover the BUI if necessary. */
4775STATIC int
4776xlog_recover_process_bui(
4777        struct xfs_mount                *mp,
4778        struct xfs_ail                  *ailp,
4779        struct xfs_log_item             *lip,
4780        struct xfs_defer_ops            *dfops)
4781{
4782        struct xfs_bui_log_item         *buip;
4783        int                             error;
4784
4785        /*
4786         * Skip BUIs that we've already processed.
4787         */
4788        buip = container_of(lip, struct xfs_bui_log_item, bui_item);
4789        if (test_bit(XFS_BUI_RECOVERED, &buip->bui_flags))
4790                return 0;
4791
4792        spin_unlock(&ailp->ail_lock);
4793        error = xfs_bui_recover(mp, buip, dfops);
4794        spin_lock(&ailp->ail_lock);
4795
4796        return error;
4797}
4798
4799/* Release the BUI since we're cancelling everything. */
4800STATIC void
4801xlog_recover_cancel_bui(
4802        struct xfs_mount                *mp,
4803        struct xfs_ail                  *ailp,
4804        struct xfs_log_item             *lip)
4805{
4806        struct xfs_bui_log_item         *buip;
4807
4808        buip = container_of(lip, struct xfs_bui_log_item, bui_item);
4809
4810        spin_unlock(&ailp->ail_lock);
4811        xfs_bui_release(buip);
4812        spin_lock(&ailp->ail_lock);
4813}
4814
4815/* Is this log item a deferred action intent? */
4816static inline bool xlog_item_is_intent(struct xfs_log_item *lip)
4817{
4818        switch (lip->li_type) {
4819        case XFS_LI_EFI:
4820        case XFS_LI_RUI:
4821        case XFS_LI_CUI:
4822        case XFS_LI_BUI:
4823                return true;
4824        default:
4825                return false;
4826        }
4827}
4828
4829/* Take all the collected deferred ops and finish them in order. */
4830static int
4831xlog_finish_defer_ops(
4832        struct xfs_mount        *mp,
4833        struct xfs_defer_ops    *dfops)
4834{
4835        struct xfs_trans        *tp;
4836        int64_t                 freeblks;
4837        uint                    resblks;
4838        int                     error;
4839
4840        /*
4841         * We're finishing the defer_ops that accumulated as a result of
4842         * recovering unfinished intent items during log recovery.  We
4843         * reserve an itruncate transaction because it is the largest
4844         * permanent transaction type.  Since we're the only user of the fs
4845         * right now, take 93% (15/16) of the available free blocks.  Use
4846         * weird math to avoid a 64-bit division.
4847         */
4848        freeblks = percpu_counter_sum(&mp->m_fdblocks);
4849        if (freeblks <= 0)
4850                return -ENOSPC;
4851        resblks = min_t(int64_t, UINT_MAX, freeblks);
4852        resblks = (resblks * 15) >> 4;
4853        error = xfs_trans_alloc(mp, &M_RES(mp)->tr_itruncate, resblks,
4854                        0, XFS_TRANS_RESERVE, &tp);
4855        if (error)
4856                return error;
4857
4858        error = xfs_defer_finish(&tp, dfops);
4859        if (error)
4860                goto out_cancel;
4861
4862        return xfs_trans_commit(tp);
4863
4864out_cancel:
4865        xfs_trans_cancel(tp);
4866        return error;
4867}
4868
4869/*
4870 * When this is called, all of the log intent items which did not have
4871 * corresponding log done items should be in the AIL.  What we do now
4872 * is update the data structures associated with each one.
4873 *
4874 * Since we process the log intent items in normal transactions, they
4875 * will be removed at some point after the commit.  This prevents us
4876 * from just walking down the list processing each one.  We'll use a
4877 * flag in the intent item to skip those that we've already processed
4878 * and use the AIL iteration mechanism's generation count to try to
4879 * speed this up at least a bit.
4880 *
4881 * When we start, we know that the intents are the only things in the
4882 * AIL.  As we process them, however, other items are added to the
4883 * AIL.
4884 */
4885STATIC int
4886xlog_recover_process_intents(
4887        struct xlog             *log)
4888{
4889        struct xfs_defer_ops    dfops;
4890        struct xfs_ail_cursor   cur;
4891        struct xfs_log_item     *lip;
4892        struct xfs_ail          *ailp;
4893        xfs_fsblock_t           firstfsb;
4894        int                     error = 0;
4895#if defined(DEBUG) || defined(XFS_WARN)
4896        xfs_lsn_t               last_lsn;
4897#endif
4898
4899        ailp = log->l_ailp;
4900        spin_lock(&ailp->ail_lock);
4901        lip = xfs_trans_ail_cursor_first(ailp, &cur, 0);
4902#if defined(DEBUG) || defined(XFS_WARN)
4903        last_lsn = xlog_assign_lsn(log->l_curr_cycle, log->l_curr_block);
4904#endif
4905        xfs_defer_init(&dfops, &firstfsb);
4906        while (lip != NULL) {
4907                /*
4908                 * We're done when we see something other than an intent.
4909                 * There should be no intents left in the AIL now.
4910                 */
4911                if (!xlog_item_is_intent(lip)) {
4912#ifdef DEBUG
4913                        for (; lip; lip = xfs_trans_ail_cursor_next(ailp, &cur))
4914                                ASSERT(!xlog_item_is_intent(lip));
4915#endif
4916                        break;
4917                }
4918
4919                /*
4920                 * We should never see a redo item with a LSN higher than
4921                 * the last transaction we found in the log at the start
4922                 * of recovery.
4923                 */
4924                ASSERT(XFS_LSN_CMP(last_lsn, lip->li_lsn) >= 0);
4925
4926                /*
4927                 * NOTE: If your intent processing routine can create more
4928                 * deferred ops, you /must/ attach them to the dfops in this
4929                 * routine or else those subsequent intents will get
4930                 * replayed in the wrong order!
4931                 */
4932                switch (lip->li_type) {
4933                case XFS_LI_EFI:
4934                        error = xlog_recover_process_efi(log->l_mp, ailp, lip);
4935                        break;
4936                case XFS_LI_RUI:
4937                        error = xlog_recover_process_rui(log->l_mp, ailp, lip);
4938                        break;
4939                case XFS_LI_CUI:
4940                        error = xlog_recover_process_cui(log->l_mp, ailp, lip,
4941                                        &dfops);
4942                        break;
4943                case XFS_LI_BUI:
4944                        error = xlog_recover_process_bui(log->l_mp, ailp, lip,
4945                                        &dfops);
4946                        break;
4947                }
4948                if (error)
4949                        goto out;
4950                lip = xfs_trans_ail_cursor_next(ailp, &cur);
4951        }
4952out:
4953        xfs_trans_ail_cursor_done(&cur);
4954        spin_unlock(&ailp->ail_lock);
4955        if (error)
4956                xfs_defer_cancel(&dfops);
4957        else
4958                error = xlog_finish_defer_ops(log->l_mp, &dfops);
4959
4960        return error;
4961}
4962
4963/*
4964 * A cancel occurs when the mount has failed and we're bailing out.
4965 * Release all pending log intent items so they don't pin the AIL.
4966 */
4967STATIC int
4968xlog_recover_cancel_intents(
4969        struct xlog             *log)
4970{
4971        struct xfs_log_item     *lip;
4972        int                     error = 0;
4973        struct xfs_ail_cursor   cur;
4974        struct xfs_ail          *ailp;
4975
4976        ailp = log->l_ailp;
4977        spin_lock(&ailp->ail_lock);
4978        lip = xfs_trans_ail_cursor_first(ailp, &cur, 0);
4979        while (lip != NULL) {
4980                /*
4981                 * We're done when we see something other than an intent.
4982                 * There should be no intents left in the AIL now.
4983                 */
4984                if (!xlog_item_is_intent(lip)) {
4985#ifdef DEBUG
4986                        for (; lip; lip = xfs_trans_ail_cursor_next(ailp, &cur))
4987                                ASSERT(!xlog_item_is_intent(lip));
4988#endif
4989                        break;
4990                }
4991
4992                switch (lip->li_type) {
4993                case XFS_LI_EFI:
4994                        xlog_recover_cancel_efi(log->l_mp, ailp, lip);
4995                        break;
4996                case XFS_LI_RUI:
4997                        xlog_recover_cancel_rui(log->l_mp, ailp, lip);
4998                        break;
4999                case XFS_LI_CUI:
5000                        xlog_recover_cancel_cui(log->l_mp, ailp, lip);
5001                        break;
5002                case XFS_LI_BUI:
5003                        xlog_recover_cancel_bui(log->l_mp, ailp, lip);
5004                        break;
5005                }
5006
5007                lip = xfs_trans_ail_cursor_next(ailp, &cur);
5008        }
5009
5010        xfs_trans_ail_cursor_done(&cur);
5011        spin_unlock(&ailp->ail_lock);
5012        return error;
5013}
5014
5015/*
5016 * This routine performs a transaction to null out a bad inode pointer
5017 * in an agi unlinked inode hash bucket.
5018 */
5019STATIC void
5020xlog_recover_clear_agi_bucket(
5021        xfs_mount_t     *mp,
5022        xfs_agnumber_t  agno,
5023        int             bucket)
5024{
5025        xfs_trans_t     *tp;
5026        xfs_agi_t       *agi;
5027        xfs_buf_t       *agibp;
5028        int             offset;
5029        int             error;
5030
5031        error = xfs_trans_alloc(mp, &M_RES(mp)->tr_clearagi, 0, 0, 0, &tp);
5032        if (error)
5033                goto out_error;
5034
5035        error = xfs_read_agi(mp, tp, agno, &agibp);
5036        if (error)
5037                goto out_abort;
5038
5039        agi = XFS_BUF_TO_AGI(agibp);
5040        agi->agi_unlinked[bucket] = cpu_to_be32(NULLAGINO);
5041        offset = offsetof(xfs_agi_t, agi_unlinked) +
5042                 (sizeof(xfs_agino_t) * bucket);
5043        xfs_trans_log_buf(tp, agibp, offset,
5044                          (offset + sizeof(xfs_agino_t) - 1));
5045
5046        error = xfs_trans_commit(tp);
5047        if (error)
5048                goto out_error;
5049        return;
5050
5051out_abort:
5052        xfs_trans_cancel(tp);
5053out_error:
5054        xfs_warn(mp, "%s: failed to clear agi %d. Continuing.", __func__, agno);
5055        return;
5056}
5057
5058STATIC xfs_agino_t
5059xlog_recover_process_one_iunlink(
5060        struct xfs_mount                *mp,
5061        xfs_agnumber_t                  agno,
5062        xfs_agino_t                     agino,
5063        int                             bucket)
5064{
5065        struct xfs_buf                  *ibp;
5066        struct xfs_dinode               *dip;
5067        struct xfs_inode                *ip;
5068        xfs_ino_t                       ino;
5069        int                             error;
5070
5071        ino = XFS_AGINO_TO_INO(mp, agno, agino);
5072        error = xfs_iget(mp, NULL, ino, 0, 0, &ip);
5073        if (error)
5074                goto fail;
5075
5076        /*
5077         * Get the on disk inode to find the next inode in the bucket.
5078         */
5079        error = xfs_imap_to_bp(mp, NULL, &ip->i_imap, &dip, &ibp, 0, 0);
5080        if (error)
5081                goto fail_iput;
5082
5083        xfs_iflags_clear(ip, XFS_IRECOVERY);
5084        ASSERT(VFS_I(ip)->i_nlink == 0);
5085        ASSERT(VFS_I(ip)->i_mode != 0);
5086
5087        /* setup for the next pass */
5088        agino = be32_to_cpu(dip->di_next_unlinked);
5089        xfs_buf_relse(ibp);
5090
5091        /*
5092         * Prevent any DMAPI event from being sent when the reference on
5093         * the inode is dropped.
5094         */
5095        ip->i_d.di_dmevmask = 0;
5096
5097        IRELE(ip);
5098        return agino;
5099
5100 fail_iput:
5101        IRELE(ip);
5102 fail:
5103        /*
5104         * We can't read in the inode this bucket points to, or this inode
5105         * is messed up.  Just ditch this bucket of inodes.  We will lose
5106         * some inodes and space, but at least we won't hang.
5107         *
5108         * Call xlog_recover_clear_agi_bucket() to perform a transaction to
5109         * clear the inode pointer in the bucket.
5110         */
5111        xlog_recover_clear_agi_bucket(mp, agno, bucket);
5112        return NULLAGINO;
5113}
5114
5115/*
5116 * xlog_iunlink_recover
5117 *
5118 * This is called during recovery to process any inodes which
5119 * we unlinked but not freed when the system crashed.  These
5120 * inodes will be on the lists in the AGI blocks.  What we do
5121 * here is scan all the AGIs and fully truncate and free any
5122 * inodes found on the lists.  Each inode is removed from the
5123 * lists when it has been fully truncated and is freed.  The
5124 * freeing of the inode and its removal from the list must be
5125 * atomic.
5126 */
5127STATIC void
5128xlog_recover_process_iunlinks(
5129        struct xlog     *log)
5130{
5131        xfs_mount_t     *mp;
5132        xfs_agnumber_t  agno;
5133        xfs_agi_t       *agi;
5134        xfs_buf_t       *agibp;
5135        xfs_agino_t     agino;
5136        int             bucket;
5137        int             error;
5138
5139        mp = log->l_mp;
5140
5141        for (agno = 0; agno < mp->m_sb.sb_agcount; agno++) {
5142                /*
5143                 * Find the agi for this ag.
5144                 */
5145                error = xfs_read_agi(mp, NULL, agno, &agibp);
5146                if (error) {
5147                        /*
5148                         * AGI is b0rked. Don't process it.
5149                         *
5150                         * We should probably mark the filesystem as corrupt
5151                         * after we've recovered all the ag's we can....
5152                         */
5153                        continue;
5154                }
5155                /*
5156                 * Unlock the buffer so that it can be acquired in the normal
5157                 * course of the transaction to truncate and free each inode.
5158                 * Because we are not racing with anyone else here for the AGI
5159                 * buffer, we don't even need to hold it locked to read the
5160                 * initial unlinked bucket entries out of the buffer. We keep
5161                 * buffer reference though, so that it stays pinned in memory
5162                 * while we need the buffer.
5163                 */
5164                agi = XFS_BUF_TO_AGI(agibp);
5165                xfs_buf_unlock(agibp);
5166
5167                for (bucket = 0; bucket < XFS_AGI_UNLINKED_BUCKETS; bucket++) {
5168                        agino = be32_to_cpu(agi->agi_unlinked[bucket]);
5169                        while (agino != NULLAGINO) {
5170                                agino = xlog_recover_process_one_iunlink(mp,
5171                                                        agno, agino, bucket);
5172                        }
5173                }
5174                xfs_buf_rele(agibp);
5175        }
5176}
5177
5178STATIC int
5179xlog_unpack_data(
5180        struct xlog_rec_header  *rhead,
5181        char                    *dp,
5182        struct xlog             *log)
5183{
5184        int                     i, j, k;
5185
5186        for (i = 0; i < BTOBB(be32_to_cpu(rhead->h_len)) &&
5187                  i < (XLOG_HEADER_CYCLE_SIZE / BBSIZE); i++) {
5188                *(__be32 *)dp = *(__be32 *)&rhead->h_cycle_data[i];
5189                dp += BBSIZE;
5190        }
5191
5192        if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) {
5193                xlog_in_core_2_t *xhdr = (xlog_in_core_2_t *)rhead;
5194                for ( ; i < BTOBB(be32_to_cpu(rhead->h_len)); i++) {
5195                        j = i / (XLOG_HEADER_CYCLE_SIZE / BBSIZE);
5196                        k = i % (XLOG_HEADER_CYCLE_SIZE / BBSIZE);
5197                        *(__be32 *)dp = xhdr[j].hic_xheader.xh_cycle_data[k];
5198                        dp += BBSIZE;
5199                }
5200        }
5201
5202        return 0;
5203}
5204
5205/*
5206 * CRC check, unpack and process a log record.
5207 */
5208STATIC int
5209xlog_recover_process(
5210        struct xlog             *log,
5211        struct hlist_head       rhash[],
5212        struct xlog_rec_header  *rhead,
5213        char                    *dp,
5214        int                     pass,
5215        struct list_head        *buffer_list)
5216{
5217        int                     error;
5218        __le32                  old_crc = rhead->h_crc;
5219        __le32                  crc;
5220
5221
5222        crc = xlog_cksum(log, rhead, dp, be32_to_cpu(rhead->h_len));
5223
5224        /*
5225         * Nothing else to do if this is a CRC verification pass. Just return
5226         * if this a record with a non-zero crc. Unfortunately, mkfs always
5227         * sets old_crc to 0 so we must consider this valid even on v5 supers.
5228         * Otherwise, return EFSBADCRC on failure so the callers up the stack
5229         * know precisely what failed.
5230         */
5231        if (pass == XLOG_RECOVER_CRCPASS) {
5232                if (old_crc && crc != old_crc)
5233                        return -EFSBADCRC;
5234                return 0;
5235        }
5236
5237        /*
5238         * We're in the normal recovery path. Issue a warning if and only if the
5239         * CRC in the header is non-zero. This is an advisory warning and the
5240         * zero CRC check prevents warnings from being emitted when upgrading
5241         * the kernel from one that does not add CRCs by default.
5242         */
5243        if (crc != old_crc) {
5244                if (old_crc || xfs_sb_version_hascrc(&log->l_mp->m_sb)) {
5245                        xfs_alert(log->l_mp,
5246                "log record CRC mismatch: found 0x%x, expected 0x%x.",
5247                                        le32_to_cpu(old_crc),
5248                                        le32_to_cpu(crc));
5249                        xfs_hex_dump(dp, 32);
5250                }
5251
5252                /*
5253                 * If the filesystem is CRC enabled, this mismatch becomes a
5254                 * fatal log corruption failure.
5255                 */
5256                if (xfs_sb_version_hascrc(&log->l_mp->m_sb))
5257                        return -EFSCORRUPTED;
5258        }
5259
5260        error = xlog_unpack_data(rhead, dp, log);
5261        if (error)
5262                return error;
5263
5264        return xlog_recover_process_data(log, rhash, rhead, dp, pass,
5265                                         buffer_list);
5266}
5267
5268STATIC int
5269xlog_valid_rec_header(
5270        struct xlog             *log,
5271        struct xlog_rec_header  *rhead,
5272        xfs_daddr_t             blkno)
5273{
5274        int                     hlen;
5275
5276        if (unlikely(rhead->h_magicno != cpu_to_be32(XLOG_HEADER_MAGIC_NUM))) {
5277                XFS_ERROR_REPORT("xlog_valid_rec_header(1)",
5278                                XFS_ERRLEVEL_LOW, log->l_mp);
5279                return -EFSCORRUPTED;
5280        }
5281        if (unlikely(
5282            (!rhead->h_version ||
5283            (be32_to_cpu(rhead->h_version) & (~XLOG_VERSION_OKBITS))))) {
5284                xfs_warn(log->l_mp, "%s: unrecognised log version (%d).",
5285                        __func__, be32_to_cpu(rhead->h_version));
5286                return -EIO;
5287        }
5288
5289        /* LR body must have data or it wouldn't have been written */
5290        hlen = be32_to_cpu(rhead->h_len);
5291        if (unlikely( hlen <= 0 || hlen > INT_MAX )) {
5292                XFS_ERROR_REPORT("xlog_valid_rec_header(2)",
5293                                XFS_ERRLEVEL_LOW, log->l_mp);
5294                return -EFSCORRUPTED;
5295        }
5296        if (unlikely( blkno > log->l_logBBsize || blkno > INT_MAX )) {
5297                XFS_ERROR_REPORT("xlog_valid_rec_header(3)",
5298                                XFS_ERRLEVEL_LOW, log->l_mp);
5299                return -EFSCORRUPTED;
5300        }
5301        return 0;
5302}
5303
5304/*
5305 * Read the log from tail to head and process the log records found.
5306 * Handle the two cases where the tail and head are in the same cycle
5307 * and where the active portion of the log wraps around the end of
5308 * the physical log separately.  The pass parameter is passed through
5309 * to the routines called to process the data and is not looked at
5310 * here.
5311 */
5312STATIC int
5313xlog_do_recovery_pass(
5314        struct xlog             *log,
5315        xfs_daddr_t             head_blk,
5316        xfs_daddr_t             tail_blk,
5317        int                     pass,
5318        xfs_daddr_t             *first_bad)     /* out: first bad log rec */
5319{
5320        xlog_rec_header_t       *rhead;
5321        xfs_daddr_t             blk_no, rblk_no;
5322        xfs_daddr_t             rhead_blk;
5323        char                    *offset;
5324        xfs_buf_t               *hbp, *dbp;
5325        int                     error = 0, h_size, h_len;
5326        int                     error2 = 0;
5327        int                     bblks, split_bblks;
5328        int                     hblks, split_hblks, wrapped_hblks;
5329        int                     i;
5330        struct hlist_head       rhash[XLOG_RHASH_SIZE];
5331        LIST_HEAD               (buffer_list);
5332
5333        ASSERT(head_blk != tail_blk);
5334        blk_no = rhead_blk = tail_blk;
5335
5336        for (i = 0; i < XLOG_RHASH_SIZE; i++)
5337                INIT_HLIST_HEAD(&rhash[i]);
5338
5339        /*
5340         * Read the header of the tail block and get the iclog buffer size from
5341         * h_size.  Use this to tell how many sectors make up the log header.
5342         */
5343        if (xfs_sb_version_haslogv2(&log->l_mp->m_sb)) {
5344                /*
5345                 * When using variable length iclogs, read first sector of
5346                 * iclog header and extract the header size from it.  Get a
5347                 * new hbp that is the correct size.
5348                 */
5349                hbp = xlog_get_bp(log, 1);
5350                if (!hbp)
5351                        return -ENOMEM;
5352
5353                error = xlog_bread(log, tail_blk, 1, hbp, &offset);
5354                if (error)
5355                        goto bread_err1;
5356
5357                rhead = (xlog_rec_header_t *)offset;
5358                error = xlog_valid_rec_header(log, rhead, tail_blk);
5359                if (error)
5360                        goto bread_err1;
5361
5362                /*
5363                 * xfsprogs has a bug where record length is based on lsunit but
5364                 * h_size (iclog size) is hardcoded to 32k. Now that we
5365                 * unconditionally CRC verify the unmount record, this means the
5366                 * log buffer can be too small for the record and cause an
5367                 * overrun.
5368                 *
5369                 * Detect this condition here. Use lsunit for the buffer size as
5370                 * long as this looks like the mkfs case. Otherwise, return an
5371                 * error to avoid a buffer overrun.
5372                 */
5373                h_size = be32_to_cpu(rhead->h_size);
5374                h_len = be32_to_cpu(rhead->h_len);
5375                if (h_len > h_size) {
5376                        if (h_len <= log->l_mp->m_logbsize &&
5377                            be32_to_cpu(rhead->h_num_logops) == 1) {
5378                                xfs_warn(log->l_mp,
5379                "invalid iclog size (%d bytes), using lsunit (%d bytes)",
5380                                         h_size, log->l_mp->m_logbsize);
5381                                h_size = log->l_mp->m_logbsize;
5382                        } else
5383                                return -EFSCORRUPTED;
5384                }
5385
5386                if ((be32_to_cpu(rhead->h_version) & XLOG_VERSION_2) &&
5387                    (h_size > XLOG_HEADER_CYCLE_SIZE)) {
5388                        hblks = h_size / XLOG_HEADER_CYCLE_SIZE;
5389                        if (h_size % XLOG_HEADER_CYCLE_SIZE)
5390                                hblks++;
5391                        xlog_put_bp(hbp);
5392                        hbp = xlog_get_bp(log, hblks);
5393                } else {
5394                        hblks = 1;
5395                }
5396        } else {
5397                ASSERT(log->l_sectBBsize == 1);
5398                hblks = 1;
5399                hbp = xlog_get_bp(log, 1);
5400                h_size = XLOG_BIG_RECORD_BSIZE;
5401        }
5402
5403        if (!hbp)
5404                return -ENOMEM;
5405        dbp = xlog_get_bp(log, BTOBB(h_size));
5406        if (!dbp) {
5407                xlog_put_bp(hbp);
5408                return -ENOMEM;
5409        }
5410
5411        memset(rhash, 0, sizeof(rhash));
5412        if (tail_blk > head_blk) {
5413                /*
5414                 * Perform recovery around the end of the physical log.
5415                 * When the head is not on the same cycle number as the tail,
5416                 * we can't do a sequential recovery.
5417                 */
5418                while (blk_no < log->l_logBBsize) {
5419                        /*
5420                         * Check for header wrapping around physical end-of-log
5421                         */
5422                        offset = hbp->b_addr;
5423                        split_hblks = 0;
5424                        wrapped_hblks = 0;
5425                        if (blk_no + hblks <= log->l_logBBsize) {
5426                                /* Read header in one read */
5427                                error = xlog_bread(log, blk_no, hblks, hbp,
5428                                                   &offset);
5429                                if (error)
5430                                        goto bread_err2;
5431                        } else {
5432                                /* This LR is split across physical log end */
5433                                if (blk_no != log->l_logBBsize) {
5434                                        /* some data before physical log end */
5435                                        ASSERT(blk_no <= INT_MAX);
5436                                        split_hblks = log->l_logBBsize - (int)blk_no;
5437                                        ASSERT(split_hblks > 0);
5438                                        error = xlog_bread(log, blk_no,
5439                                                           split_hblks, hbp,
5440                                                           &offset);
5441                                        if (error)
5442                                                goto bread_err2;
5443                                }
5444
5445                                /*
5446                                 * Note: this black magic still works with
5447                                 * large sector sizes (non-512) only because:
5448                                 * - we increased the buffer size originally
5449                                 *   by 1 sector giving us enough extra space
5450                                 *   for the second read;
5451                                 * - the log start is guaranteed to be sector
5452                                 *   aligned;
5453                                 * - we read the log end (LR header start)
5454                                 *   _first_, then the log start (LR header end)
5455                                 *   - order is important.
5456                                 */
5457                                wrapped_hblks = hblks - split_hblks;
5458                                error = xlog_bread_offset(log, 0,
5459                                                wrapped_hblks, hbp,
5460                                                offset + BBTOB(split_hblks));
5461                                if (error)
5462                                        goto bread_err2;
5463                        }
5464                        rhead = (xlog_rec_header_t *)offset;
5465                        error = xlog_valid_rec_header(log, rhead,
5466                                                split_hblks ? blk_no : 0);
5467                        if (error)
5468                                goto bread_err2;
5469
5470                        bblks = (int)BTOBB(be32_to_cpu(rhead->h_len));
5471                        blk_no += hblks;
5472
5473                        /*
5474                         * Read the log record data in multiple reads if it
5475                         * wraps around the end of the log. Note that if the
5476                         * header already wrapped, blk_no could point past the
5477                         * end of the log. The record data is contiguous in
5478                         * that case.
5479                         */
5480                        if (blk_no + bblks <= log->l_logBBsize ||
5481                            blk_no >= log->l_logBBsize) {
5482                                rblk_no = xlog_wrap_logbno(log, blk_no);
5483                                error = xlog_bread(log, rblk_no, bblks, dbp,
5484                                                   &offset);
5485                                if (error)
5486                                        goto bread_err2;
5487                        } else {
5488                                /* This log record is split across the
5489                                 * physical end of log */
5490                                offset = dbp->b_addr;
5491                                split_bblks = 0;
5492                                if (blk_no != log->l_logBBsize) {
5493                                        /* some data is before the physical
5494                                         * end of log */
5495                                        ASSERT(!wrapped_hblks);
5496                                        ASSERT(blk_no <= INT_MAX);
5497                                        split_bblks =
5498                                                log->l_logBBsize - (int)blk_no;
5499                                        ASSERT(split_bblks > 0);
5500                                        error = xlog_bread(log, blk_no,
5501                                                        split_bblks, dbp,
5502                                                        &offset);
5503                                        if (error)
5504                                                goto bread_err2;
5505                                }
5506
5507                                /*
5508                                 * Note: this black magic still works with
5509                                 * large sector sizes (non-512) only because:
5510                                 * - we increased the buffer size originally
5511                                 *   by 1 sector giving us enough extra space
5512                                 *   for the second read;
5513                                 * - the log start is guaranteed to be sector
5514                                 *   aligned;
5515                                 * - we read the log end (LR header start)
5516                                 *   _first_, then the log start (LR header end)
5517                                 *   - order is important.
5518                                 */
5519                                error = xlog_bread_offset(log, 0,
5520                                                bblks - split_bblks, dbp,
5521                                                offset + BBTOB(split_bblks));
5522                                if (error)
5523                                        goto bread_err2;
5524                        }
5525
5526                        error = xlog_recover_process(log, rhash, rhead, offset,
5527                                                     pass, &buffer_list);
5528                        if (error)
5529                                goto bread_err2;
5530
5531                        blk_no += bblks;
5532                        rhead_blk = blk_no;
5533                }
5534
5535                ASSERT(blk_no >= log->l_logBBsize);
5536                blk_no -= log->l_logBBsize;
5537                rhead_blk = blk_no;
5538        }
5539
5540        /* read first part of physical log */
5541        while (blk_no < head_blk) {
5542                error = xlog_bread(log, blk_no, hblks, hbp, &offset);
5543                if (error)
5544                        goto bread_err2;
5545
5546                rhead = (xlog_rec_header_t *)offset;
5547                error = xlog_valid_rec_header(log, rhead, blk_no);
5548                if (error)
5549                        goto bread_err2;
5550
5551                /* blocks in data section */
5552                bblks = (int)BTOBB(be32_to_cpu(rhead->h_len));
5553                error = xlog_bread(log, blk_no+hblks, bblks, dbp,
5554                                   &offset);
5555                if (error)
5556                        goto bread_err2;
5557
5558                error = xlog_recover_process(log, rhash, rhead, offset, pass,
5559                                             &buffer_list);
5560                if (error)
5561                        goto bread_err2;
5562
5563                blk_no += bblks + hblks;
5564                rhead_blk = blk_no;
5565        }
5566
5567 bread_err2:
5568        xlog_put_bp(dbp);
5569 bread_err1:
5570        xlog_put_bp(hbp);
5571
5572        /*
5573         * Submit buffers that have been added from the last record processed,
5574         * regardless of error status.
5575         */
5576        if (!list_empty(&buffer_list))
5577                error2 = xfs_buf_delwri_submit(&buffer_list);
5578
5579        if (error && first_bad)
5580                *first_bad = rhead_blk;
5581
5582        /*
5583         * Transactions are freed at commit time but transactions without commit
5584         * records on disk are never committed. Free any that may be left in the
5585         * hash table.
5586         */
5587        for (i = 0; i < XLOG_RHASH_SIZE; i++) {
5588                struct hlist_node       *tmp;
5589                struct xlog_recover     *trans;
5590
5591                hlist_for_each_entry_safe(trans, tmp, &rhash[i], r_list)
5592                        xlog_recover_free_trans(trans);
5593        }
5594
5595        return error ? error : error2;
5596}
5597
5598/*
5599 * Do the recovery of the log.  We actually do this in two phases.
5600 * The two passes are necessary in order to implement the function
5601 * of cancelling a record written into the log.  The first pass
5602 * determines those things which have been cancelled, and the
5603 * second pass replays log items normally except for those which
5604 * have been cancelled.  The handling of the replay and cancellations
5605 * takes place in the log item type specific routines.
5606 *
5607 * The table of items which have cancel records in the log is allocated
5608 * and freed at this level, since only here do we know when all of
5609 * the log recovery has been completed.
5610 */
5611STATIC int
5612xlog_do_log_recovery(
5613        struct xlog     *log,
5614        xfs_daddr_t     head_blk,
5615        xfs_daddr_t     tail_blk)
5616{
5617        int             error, i;
5618
5619        ASSERT(head_blk != tail_blk);
5620
5621        /*
5622         * First do a pass to find all of the cancelled buf log items.
5623         * Store them in the buf_cancel_table for use in the second pass.
5624         */
5625        log->l_buf_cancel_table = kmem_zalloc(XLOG_BC_TABLE_SIZE *
5626                                                 sizeof(struct list_head),
5627                                                 KM_SLEEP);
5628        for (i = 0; i < XLOG_BC_TABLE_SIZE; i++)
5629                INIT_LIST_HEAD(&log->l_buf_cancel_table[i]);
5630
5631        error = xlog_do_recovery_pass(log, head_blk, tail_blk,
5632                                      XLOG_RECOVER_PASS1, NULL);
5633        if (error != 0) {
5634                kmem_free(log->l_buf_cancel_table);
5635                log->l_buf_cancel_table = NULL;
5636                return error;
5637        }
5638        /*
5639         * Then do a second pass to actually recover the items in the log.
5640         * When it is complete free the table of buf cancel items.
5641         */
5642        error = xlog_do_recovery_pass(log, head_blk, tail_blk,
5643                                      XLOG_RECOVER_PASS2, NULL);
5644#ifdef DEBUG
5645        if (!error) {
5646                int     i;
5647
5648                for (i = 0; i < XLOG_BC_TABLE_SIZE; i++)
5649                        ASSERT(list_empty(&log->l_buf_cancel_table[i]));
5650        }
5651#endif  /* DEBUG */
5652
5653        kmem_free(log->l_buf_cancel_table);
5654        log->l_buf_cancel_table = NULL;
5655
5656        return error;
5657}
5658
5659/*
5660 * Do the actual recovery
5661 */
5662STATIC int
5663xlog_do_recover(
5664        struct xlog     *log,
5665        xfs_daddr_t     head_blk,
5666        xfs_daddr_t     tail_blk)
5667{
5668        struct xfs_mount *mp = log->l_mp;
5669        int             error;
5670        xfs_buf_t       *bp;
5671        xfs_sb_t        *sbp;
5672
5673        trace_xfs_log_recover(log, head_blk, tail_blk);
5674
5675        /*
5676         * First replay the images in the log.
5677         */
5678        error = xlog_do_log_recovery(log, head_blk, tail_blk);
5679        if (error)
5680                return error;
5681
5682        /*
5683         * If IO errors happened during recovery, bail out.
5684         */
5685        if (XFS_FORCED_SHUTDOWN(mp)) {
5686                return -EIO;
5687        }
5688
5689        /*
5690         * We now update the tail_lsn since much of the recovery has completed
5691         * and there may be space available to use.  If there were no extent
5692         * or iunlinks, we can free up the entire log and set the tail_lsn to
5693         * be the last_sync_lsn.  This was set in xlog_find_tail to be the
5694         * lsn of the last known good LR on disk.  If there are extent frees
5695         * or iunlinks they will have some entries in the AIL; so we look at
5696         * the AIL to determine how to set the tail_lsn.
5697         */
5698        xlog_assign_tail_lsn(mp);
5699
5700        /*
5701         * Now that we've finished replaying all buffer and inode
5702         * updates, re-read in the superblock and reverify it.
5703         */
5704        bp = xfs_getsb(mp, 0);
5705        bp->b_flags &= ~(XBF_DONE | XBF_ASYNC);
5706        ASSERT(!(bp->b_flags & XBF_WRITE));
5707        bp->b_flags |= XBF_READ;
5708        bp->b_ops = &xfs_sb_buf_ops;
5709
5710        error = xfs_buf_submit_wait(bp);
5711        if (error) {
5712                if (!XFS_FORCED_SHUTDOWN(mp)) {
5713                        xfs_buf_ioerror_alert(bp, __func__);
5714                        ASSERT(0);
5715                }
5716                xfs_buf_relse(bp);
5717                return error;
5718        }
5719
5720        /* Convert superblock from on-disk format */
5721        sbp = &mp->m_sb;
5722        xfs_sb_from_disk(sbp, XFS_BUF_TO_SBP(bp));
5723        xfs_buf_relse(bp);
5724
5725        /* re-initialise in-core superblock and geometry structures */
5726        xfs_reinit_percpu_counters(mp);
5727        error = xfs_initialize_perag(mp, sbp->sb_agcount, &mp->m_maxagi);
5728        if (error) {
5729                xfs_warn(mp, "Failed post-recovery per-ag init: %d", error);
5730                return error;
5731        }
5732        mp->m_alloc_set_aside = xfs_alloc_set_aside(mp);
5733
5734        xlog_recover_check_summary(log);
5735
5736        /* Normal transactions can now occur */
5737        log->l_flags &= ~XLOG_ACTIVE_RECOVERY;
5738        return 0;
5739}
5740
5741/*
5742 * Perform recovery and re-initialize some log variables in xlog_find_tail.
5743 *
5744 * Return error or zero.
5745 */
5746int
5747xlog_recover(
5748        struct xlog     *log)
5749{
5750        xfs_daddr_t     head_blk, tail_blk;
5751        int             error;
5752
5753        /* find the tail of the log */
5754        error = xlog_find_tail(log, &head_blk, &tail_blk);
5755        if (error)
5756                return error;
5757
5758        /*
5759         * The superblock was read before the log was available and thus the LSN
5760         * could not be verified. Check the superblock LSN against the current
5761         * LSN now that it's known.
5762         */
5763        if (xfs_sb_version_hascrc(&log->l_mp->m_sb) &&
5764            !xfs_log_check_lsn(log->l_mp, log->l_mp->m_sb.sb_lsn))
5765                return -EINVAL;
5766
5767        if (tail_blk != head_blk) {
5768                /* There used to be a comment here:
5769                 *
5770                 * disallow recovery on read-only mounts.  note -- mount
5771                 * checks for ENOSPC and turns it into an intelligent
5772                 * error message.
5773                 * ...but this is no longer true.  Now, unless you specify
5774                 * NORECOVERY (in which case this function would never be
5775                 * called), we just go ahead and recover.  We do this all
5776                 * under the vfs layer, so we can get away with it unless
5777                 * the device itself is read-only, in which case we fail.
5778                 */
5779                if ((error = xfs_dev_is_read_only(log->l_mp, "recovery"))) {
5780                        return error;
5781                }
5782
5783                /*
5784                 * Version 5 superblock log feature mask validation. We know the
5785                 * log is dirty so check if there are any unknown log features
5786                 * in what we need to recover. If there are unknown features
5787                 * (e.g. unsupported transactions, then simply reject the
5788                 * attempt at recovery before touching anything.
5789                 */
5790                if (XFS_SB_VERSION_NUM(&log->l_mp->m_sb) == XFS_SB_VERSION_5 &&
5791                    xfs_sb_has_incompat_log_feature(&log->l_mp->m_sb,
5792                                        XFS_SB_FEAT_INCOMPAT_LOG_UNKNOWN)) {
5793                        xfs_warn(log->l_mp,
5794"Superblock has unknown incompatible log features (0x%x) enabled.",
5795                                (log->l_mp->m_sb.sb_features_log_incompat &
5796                                        XFS_SB_FEAT_INCOMPAT_LOG_UNKNOWN));
5797                        xfs_warn(log->l_mp,
5798"The log can not be fully and/or safely recovered by this kernel.");
5799                        xfs_warn(log->l_mp,
5800"Please recover the log on a kernel that supports the unknown features.");
5801                        return -EINVAL;
5802                }
5803
5804                /*
5805                 * Delay log recovery if the debug hook is set. This is debug
5806                 * instrumention to coordinate simulation of I/O failures with
5807                 * log recovery.
5808                 */
5809                if (xfs_globals.log_recovery_delay) {
5810                        xfs_notice(log->l_mp,
5811                                "Delaying log recovery for %d seconds.",
5812                                xfs_globals.log_recovery_delay);
5813                        msleep(xfs_globals.log_recovery_delay * 1000);
5814                }
5815
5816                xfs_notice(log->l_mp, "Starting recovery (logdev: %s)",
5817                                log->l_mp->m_logname ? log->l_mp->m_logname
5818                                                     : "internal");
5819
5820                error = xlog_do_recover(log, head_blk, tail_blk);
5821                log->l_flags |= XLOG_RECOVERY_NEEDED;
5822        }
5823        return error;
5824}
5825
5826/*
5827 * In the first part of recovery we replay inodes and buffers and build
5828 * up the list of extent free items which need to be processed.  Here
5829 * we process the extent free items and clean up the on disk unlinked
5830 * inode lists.  This is separated from the first part of recovery so
5831 * that the root and real-time bitmap inodes can be read in from disk in
5832 * between the two stages.  This is necessary so that we can free space
5833 * in the real-time portion of the file system.
5834 */
5835int
5836xlog_recover_finish(
5837        struct xlog     *log)
5838{
5839        /*
5840         * Now we're ready to do the transactions needed for the
5841         * rest of recovery.  Start with completing all the extent
5842         * free intent records and then process the unlinked inode
5843         * lists.  At this point, we essentially run in normal mode
5844         * except that we're still performing recovery actions
5845         * rather than accepting new requests.
5846         */
5847        if (log->l_flags & XLOG_RECOVERY_NEEDED) {
5848                int     error;
5849                error = xlog_recover_process_intents(log);
5850                if (error) {
5851                        xfs_alert(log->l_mp, "Failed to recover intents");
5852                        return error;
5853                }
5854
5855                /*
5856                 * Sync the log to get all the intents out of the AIL.
5857                 * This isn't absolutely necessary, but it helps in
5858                 * case the unlink transactions would have problems
5859                 * pushing the intents out of the way.
5860                 */
5861                xfs_log_force(log->l_mp, XFS_LOG_SYNC);
5862
5863                xlog_recover_process_iunlinks(log);
5864
5865                xlog_recover_check_summary(log);
5866
5867                xfs_notice(log->l_mp, "Ending recovery (logdev: %s)",
5868                                log->l_mp->m_logname ? log->l_mp->m_logname
5869                                                     : "internal");
5870                log->l_flags &= ~XLOG_RECOVERY_NEEDED;
5871        } else {
5872                xfs_info(log->l_mp, "Ending clean mount");
5873        }
5874        return 0;
5875}
5876
5877int
5878xlog_recover_cancel(
5879        struct xlog     *log)
5880{
5881        int             error = 0;
5882
5883        if (log->l_flags & XLOG_RECOVERY_NEEDED)
5884                error = xlog_recover_cancel_intents(log);
5885
5886        return error;
5887}
5888
5889#if defined(DEBUG)
5890/*
5891 * Read all of the agf and agi counters and check that they
5892 * are consistent with the superblock counters.
5893 */
5894STATIC void
5895xlog_recover_check_summary(
5896        struct xlog     *log)
5897{
5898        xfs_mount_t     *mp;
5899        xfs_agf_t       *agfp;
5900        xfs_buf_t       *agfbp;
5901        xfs_buf_t       *agibp;
5902        xfs_agnumber_t  agno;
5903        uint64_t        freeblks;
5904        uint64_t        itotal;
5905        uint64_t        ifree;
5906        int             error;
5907
5908        mp = log->l_mp;
5909
5910        freeblks = 0LL;
5911        itotal = 0LL;
5912        ifree = 0LL;
5913        for (agno = 0; agno < mp->m_sb.sb_agcount; agno++) {
5914                error = xfs_read_agf(mp, NULL, agno, 0, &agfbp);
5915                if (error) {
5916                        xfs_alert(mp, "%s agf read failed agno %d error %d",
5917                                                __func__, agno, error);
5918                } else {
5919                        agfp = XFS_BUF_TO_AGF(agfbp);
5920                        freeblks += be32_to_cpu(agfp->agf_freeblks) +
5921                                    be32_to_cpu(agfp->agf_flcount);
5922                        xfs_buf_relse(agfbp);
5923                }
5924
5925                error = xfs_read_agi(mp, NULL, agno, &agibp);
5926                if (error) {
5927                        xfs_alert(mp, "%s agi read failed agno %d error %d",
5928                                                __func__, agno, error);
5929                } else {
5930                        struct xfs_agi  *agi = XFS_BUF_TO_AGI(agibp);
5931
5932                        itotal += be32_to_cpu(agi->agi_count);
5933                        ifree += be32_to_cpu(agi->agi_freecount);
5934                        xfs_buf_relse(agibp);
5935                }
5936        }
5937}
5938#endif /* DEBUG */
5939