linux/fs/jbd/commit.c
<<
>>
Prefs
   1/*
   2 * linux/fs/jbd/commit.c
   3 *
   4 * Written by Stephen C. Tweedie <sct@redhat.com>, 1998
   5 *
   6 * Copyright 1998 Red Hat corp --- All Rights Reserved
   7 *
   8 * This file is part of the Linux kernel and is made available under
   9 * the terms of the GNU General Public License, version 2, or at your
  10 * option, any later version, incorporated herein by reference.
  11 *
  12 * Journal commit routines for the generic filesystem journaling code;
  13 * part of the ext2fs journaling system.
  14 */
  15
  16#include <linux/time.h>
  17#include <linux/fs.h>
  18#include <linux/jbd.h>
  19#include <linux/errno.h>
  20#include <linux/mm.h>
  21#include <linux/pagemap.h>
  22#include <linux/bio.h>
  23#include <linux/blkdev.h>
  24#include <trace/events/jbd.h>
  25
  26/*
  27 * Default IO end handler for temporary BJ_IO buffer_heads.
  28 */
  29static void journal_end_buffer_io_sync(struct buffer_head *bh, int uptodate)
  30{
  31        BUFFER_TRACE(bh, "");
  32        if (uptodate)
  33                set_buffer_uptodate(bh);
  34        else
  35                clear_buffer_uptodate(bh);
  36        unlock_buffer(bh);
  37}
  38
  39/*
  40 * When an ext3-ordered file is truncated, it is possible that many pages are
  41 * not successfully freed, because they are attached to a committing transaction.
  42 * After the transaction commits, these pages are left on the LRU, with no
  43 * ->mapping, and with attached buffers.  These pages are trivially reclaimable
  44 * by the VM, but their apparent absence upsets the VM accounting, and it makes
  45 * the numbers in /proc/meminfo look odd.
  46 *
  47 * So here, we have a buffer which has just come off the forget list.  Look to
  48 * see if we can strip all buffers from the backing page.
  49 *
  50 * Called under journal->j_list_lock.  The caller provided us with a ref
  51 * against the buffer, and we drop that here.
  52 */
  53static void release_buffer_page(struct buffer_head *bh)
  54{
  55        struct page *page;
  56
  57        if (buffer_dirty(bh))
  58                goto nope;
  59        if (atomic_read(&bh->b_count) != 1)
  60                goto nope;
  61        page = bh->b_page;
  62        if (!page)
  63                goto nope;
  64        if (page->mapping)
  65                goto nope;
  66
  67        /* OK, it's a truncated page */
  68        if (!trylock_page(page))
  69                goto nope;
  70
  71        page_cache_get(page);
  72        __brelse(bh);
  73        try_to_free_buffers(page);
  74        unlock_page(page);
  75        page_cache_release(page);
  76        return;
  77
  78nope:
  79        __brelse(bh);
  80}
  81
  82/*
  83 * Decrement reference counter for data buffer. If it has been marked
  84 * 'BH_Freed', release it and the page to which it belongs if possible.
  85 */
  86static void release_data_buffer(struct buffer_head *bh)
  87{
  88        if (buffer_freed(bh)) {
  89                clear_buffer_freed(bh);
  90                release_buffer_page(bh);
  91        } else
  92                put_bh(bh);
  93}
  94
  95/*
  96 * Try to acquire jbd_lock_bh_state() against the buffer, when j_list_lock is
  97 * held.  For ranking reasons we must trylock.  If we lose, schedule away and
  98 * return 0.  j_list_lock is dropped in this case.
  99 */
 100static int inverted_lock(journal_t *journal, struct buffer_head *bh)
 101{
 102        if (!jbd_trylock_bh_state(bh)) {
 103                spin_unlock(&journal->j_list_lock);
 104                schedule();
 105                return 0;
 106        }
 107        return 1;
 108}
 109
 110/* Done it all: now write the commit record.  We should have
 111 * cleaned up our previous buffers by now, so if we are in abort
 112 * mode we can now just skip the rest of the journal write
 113 * entirely.
 114 *
 115 * Returns 1 if the journal needs to be aborted or 0 on success
 116 */
 117static int journal_write_commit_record(journal_t *journal,
 118                                        transaction_t *commit_transaction)
 119{
 120        struct journal_head *descriptor;
 121        struct buffer_head *bh;
 122        journal_header_t *header;
 123        int ret;
 124
 125        if (is_journal_aborted(journal))
 126                return 0;
 127
 128        descriptor = journal_get_descriptor_buffer(journal);
 129        if (!descriptor)
 130                return 1;
 131
 132        bh = jh2bh(descriptor);
 133
 134        header = (journal_header_t *)(bh->b_data);
 135        header->h_magic = cpu_to_be32(JFS_MAGIC_NUMBER);
 136        header->h_blocktype = cpu_to_be32(JFS_COMMIT_BLOCK);
 137        header->h_sequence = cpu_to_be32(commit_transaction->t_tid);
 138
 139        JBUFFER_TRACE(descriptor, "write commit block");
 140        set_buffer_dirty(bh);
 141
 142        if (journal->j_flags & JFS_BARRIER)
 143                ret = __sync_dirty_buffer(bh, WRITE_SYNC | WRITE_FLUSH_FUA);
 144        else
 145                ret = sync_dirty_buffer(bh);
 146
 147        put_bh(bh);             /* One for getblk() */
 148        journal_put_journal_head(descriptor);
 149
 150        return (ret == -EIO);
 151}
 152
 153static void journal_do_submit_data(struct buffer_head **wbuf, int bufs,
 154                                   int write_op)
 155{
 156        int i;
 157
 158        for (i = 0; i < bufs; i++) {
 159                wbuf[i]->b_end_io = end_buffer_write_sync;
 160                /* We use-up our safety reference in submit_bh() */
 161                submit_bh(write_op, wbuf[i]);
 162        }
 163}
 164
 165/*
 166 *  Submit all the data buffers to disk
 167 */
 168static int journal_submit_data_buffers(journal_t *journal,
 169                                       transaction_t *commit_transaction,
 170                                       int write_op)
 171{
 172        struct journal_head *jh;
 173        struct buffer_head *bh;
 174        int locked;
 175        int bufs = 0;
 176        struct buffer_head **wbuf = journal->j_wbuf;
 177        int err = 0;
 178
 179        /*
 180         * Whenever we unlock the journal and sleep, things can get added
 181         * onto ->t_sync_datalist, so we have to keep looping back to
 182         * write_out_data until we *know* that the list is empty.
 183         *
 184         * Cleanup any flushed data buffers from the data list.  Even in
 185         * abort mode, we want to flush this out as soon as possible.
 186         */
 187write_out_data:
 188        cond_resched();
 189        spin_lock(&journal->j_list_lock);
 190
 191        while (commit_transaction->t_sync_datalist) {
 192                jh = commit_transaction->t_sync_datalist;
 193                bh = jh2bh(jh);
 194                locked = 0;
 195
 196                /* Get reference just to make sure buffer does not disappear
 197                 * when we are forced to drop various locks */
 198                get_bh(bh);
 199                /* If the buffer is dirty, we need to submit IO and hence
 200                 * we need the buffer lock. We try to lock the buffer without
 201                 * blocking. If we fail, we need to drop j_list_lock and do
 202                 * blocking lock_buffer().
 203                 */
 204                if (buffer_dirty(bh)) {
 205                        if (!trylock_buffer(bh)) {
 206                                BUFFER_TRACE(bh, "needs blocking lock");
 207                                spin_unlock(&journal->j_list_lock);
 208                                trace_jbd_do_submit_data(journal,
 209                                                     commit_transaction);
 210                                /* Write out all data to prevent deadlocks */
 211                                journal_do_submit_data(wbuf, bufs, write_op);
 212                                bufs = 0;
 213                                lock_buffer(bh);
 214                                spin_lock(&journal->j_list_lock);
 215                        }
 216                        locked = 1;
 217                }
 218                /* We have to get bh_state lock. Again out of order, sigh. */
 219                if (!inverted_lock(journal, bh)) {
 220                        jbd_lock_bh_state(bh);
 221                        spin_lock(&journal->j_list_lock);
 222                }
 223                /* Someone already cleaned up the buffer? */
 224                if (!buffer_jbd(bh) || bh2jh(bh) != jh
 225                        || jh->b_transaction != commit_transaction
 226                        || jh->b_jlist != BJ_SyncData) {
 227                        jbd_unlock_bh_state(bh);
 228                        if (locked)
 229                                unlock_buffer(bh);
 230                        BUFFER_TRACE(bh, "already cleaned up");
 231                        release_data_buffer(bh);
 232                        continue;
 233                }
 234                if (locked && test_clear_buffer_dirty(bh)) {
 235                        BUFFER_TRACE(bh, "needs writeout, adding to array");
 236                        wbuf[bufs++] = bh;
 237                        __journal_file_buffer(jh, commit_transaction,
 238                                                BJ_Locked);
 239                        jbd_unlock_bh_state(bh);
 240                        if (bufs == journal->j_wbufsize) {
 241                                spin_unlock(&journal->j_list_lock);
 242                                trace_jbd_do_submit_data(journal,
 243                                                     commit_transaction);
 244                                journal_do_submit_data(wbuf, bufs, write_op);
 245                                bufs = 0;
 246                                goto write_out_data;
 247                        }
 248                } else if (!locked && buffer_locked(bh)) {
 249                        __journal_file_buffer(jh, commit_transaction,
 250                                                BJ_Locked);
 251                        jbd_unlock_bh_state(bh);
 252                        put_bh(bh);
 253                } else {
 254                        BUFFER_TRACE(bh, "writeout complete: unfile");
 255                        if (unlikely(!buffer_uptodate(bh)))
 256                                err = -EIO;
 257                        __journal_unfile_buffer(jh);
 258                        jbd_unlock_bh_state(bh);
 259                        if (locked)
 260                                unlock_buffer(bh);
 261                        release_data_buffer(bh);
 262                }
 263
 264                if (need_resched() || spin_needbreak(&journal->j_list_lock)) {
 265                        spin_unlock(&journal->j_list_lock);
 266                        goto write_out_data;
 267                }
 268        }
 269        spin_unlock(&journal->j_list_lock);
 270        trace_jbd_do_submit_data(journal, commit_transaction);
 271        journal_do_submit_data(wbuf, bufs, write_op);
 272
 273        return err;
 274}
 275
 276/*
 277 * journal_commit_transaction
 278 *
 279 * The primary function for committing a transaction to the log.  This
 280 * function is called by the journal thread to begin a complete commit.
 281 */
 282void journal_commit_transaction(journal_t *journal)
 283{
 284        transaction_t *commit_transaction;
 285        struct journal_head *jh, *new_jh, *descriptor;
 286        struct buffer_head **wbuf = journal->j_wbuf;
 287        int bufs;
 288        int flags;
 289        int err;
 290        unsigned int blocknr;
 291        ktime_t start_time;
 292        u64 commit_time;
 293        char *tagp = NULL;
 294        journal_header_t *header;
 295        journal_block_tag_t *tag = NULL;
 296        int space_left = 0;
 297        int first_tag = 0;
 298        int tag_flag;
 299        int i;
 300        struct blk_plug plug;
 301
 302        /*
 303         * First job: lock down the current transaction and wait for
 304         * all outstanding updates to complete.
 305         */
 306
 307        /* Do we need to erase the effects of a prior journal_flush? */
 308        if (journal->j_flags & JFS_FLUSHED) {
 309                jbd_debug(3, "super block updated\n");
 310                journal_update_superblock(journal, 1);
 311        } else {
 312                jbd_debug(3, "superblock not updated\n");
 313        }
 314
 315        J_ASSERT(journal->j_running_transaction != NULL);
 316        J_ASSERT(journal->j_committing_transaction == NULL);
 317
 318        commit_transaction = journal->j_running_transaction;
 319        J_ASSERT(commit_transaction->t_state == T_RUNNING);
 320
 321        trace_jbd_start_commit(journal, commit_transaction);
 322        jbd_debug(1, "JBD: starting commit of transaction %d\n",
 323                        commit_transaction->t_tid);
 324
 325        spin_lock(&journal->j_state_lock);
 326        commit_transaction->t_state = T_LOCKED;
 327
 328        trace_jbd_commit_locking(journal, commit_transaction);
 329        spin_lock(&commit_transaction->t_handle_lock);
 330        while (commit_transaction->t_updates) {
 331                DEFINE_WAIT(wait);
 332
 333                prepare_to_wait(&journal->j_wait_updates, &wait,
 334                                        TASK_UNINTERRUPTIBLE);
 335                if (commit_transaction->t_updates) {
 336                        spin_unlock(&commit_transaction->t_handle_lock);
 337                        spin_unlock(&journal->j_state_lock);
 338                        schedule();
 339                        spin_lock(&journal->j_state_lock);
 340                        spin_lock(&commit_transaction->t_handle_lock);
 341                }
 342                finish_wait(&journal->j_wait_updates, &wait);
 343        }
 344        spin_unlock(&commit_transaction->t_handle_lock);
 345
 346        J_ASSERT (commit_transaction->t_outstanding_credits <=
 347                        journal->j_max_transaction_buffers);
 348
 349        /*
 350         * First thing we are allowed to do is to discard any remaining
 351         * BJ_Reserved buffers.  Note, it is _not_ permissible to assume
 352         * that there are no such buffers: if a large filesystem
 353         * operation like a truncate needs to split itself over multiple
 354         * transactions, then it may try to do a journal_restart() while
 355         * there are still BJ_Reserved buffers outstanding.  These must
 356         * be released cleanly from the current transaction.
 357         *
 358         * In this case, the filesystem must still reserve write access
 359         * again before modifying the buffer in the new transaction, but
 360         * we do not require it to remember exactly which old buffers it
 361         * has reserved.  This is consistent with the existing behaviour
 362         * that multiple journal_get_write_access() calls to the same
 363         * buffer are perfectly permissible.
 364         */
 365        while (commit_transaction->t_reserved_list) {
 366                jh = commit_transaction->t_reserved_list;
 367                JBUFFER_TRACE(jh, "reserved, unused: refile");
 368                /*
 369                 * A journal_get_undo_access()+journal_release_buffer() may
 370                 * leave undo-committed data.
 371                 */
 372                if (jh->b_committed_data) {
 373                        struct buffer_head *bh = jh2bh(jh);
 374
 375                        jbd_lock_bh_state(bh);
 376                        jbd_free(jh->b_committed_data, bh->b_size);
 377                        jh->b_committed_data = NULL;
 378                        jbd_unlock_bh_state(bh);
 379                }
 380                journal_refile_buffer(journal, jh);
 381        }
 382
 383        /*
 384         * Now try to drop any written-back buffers from the journal's
 385         * checkpoint lists.  We do this *before* commit because it potentially
 386         * frees some memory
 387         */
 388        spin_lock(&journal->j_list_lock);
 389        __journal_clean_checkpoint_list(journal);
 390        spin_unlock(&journal->j_list_lock);
 391
 392        jbd_debug (3, "JBD: commit phase 1\n");
 393
 394        /*
 395         * Clear revoked flag to reflect there is no revoked buffers
 396         * in the next transaction which is going to be started.
 397         */
 398        journal_clear_buffer_revoked_flags(journal);
 399
 400        /*
 401         * Switch to a new revoke table.
 402         */
 403        journal_switch_revoke_table(journal);
 404
 405        trace_jbd_commit_flushing(journal, commit_transaction);
 406        commit_transaction->t_state = T_FLUSH;
 407        journal->j_committing_transaction = commit_transaction;
 408        journal->j_running_transaction = NULL;
 409        start_time = ktime_get();
 410        commit_transaction->t_log_start = journal->j_head;
 411        wake_up(&journal->j_wait_transaction_locked);
 412        spin_unlock(&journal->j_state_lock);
 413
 414        jbd_debug (3, "JBD: commit phase 2\n");
 415
 416        /*
 417         * Now start flushing things to disk, in the order they appear
 418         * on the transaction lists.  Data blocks go first.
 419         */
 420        blk_start_plug(&plug);
 421        err = journal_submit_data_buffers(journal, commit_transaction,
 422                                          WRITE_SYNC);
 423        blk_finish_plug(&plug);
 424
 425        /*
 426         * Wait for all previously submitted IO to complete.
 427         */
 428        spin_lock(&journal->j_list_lock);
 429        while (commit_transaction->t_locked_list) {
 430                struct buffer_head *bh;
 431
 432                jh = commit_transaction->t_locked_list->b_tprev;
 433                bh = jh2bh(jh);
 434                get_bh(bh);
 435                if (buffer_locked(bh)) {
 436                        spin_unlock(&journal->j_list_lock);
 437                        wait_on_buffer(bh);
 438                        spin_lock(&journal->j_list_lock);
 439                }
 440                if (unlikely(!buffer_uptodate(bh))) {
 441                        if (!trylock_page(bh->b_page)) {
 442                                spin_unlock(&journal->j_list_lock);
 443                                lock_page(bh->b_page);
 444                                spin_lock(&journal->j_list_lock);
 445                        }
 446                        if (bh->b_page->mapping)
 447                                set_bit(AS_EIO, &bh->b_page->mapping->flags);
 448
 449                        unlock_page(bh->b_page);
 450                        SetPageError(bh->b_page);
 451                        err = -EIO;
 452                }
 453                if (!inverted_lock(journal, bh)) {
 454                        put_bh(bh);
 455                        spin_lock(&journal->j_list_lock);
 456                        continue;
 457                }
 458                if (buffer_jbd(bh) && bh2jh(bh) == jh &&
 459                    jh->b_transaction == commit_transaction &&
 460                    jh->b_jlist == BJ_Locked)
 461                        __journal_unfile_buffer(jh);
 462                jbd_unlock_bh_state(bh);
 463                release_data_buffer(bh);
 464                cond_resched_lock(&journal->j_list_lock);
 465        }
 466        spin_unlock(&journal->j_list_lock);
 467
 468        if (err) {
 469                char b[BDEVNAME_SIZE];
 470
 471                printk(KERN_WARNING
 472                        "JBD: Detected IO errors while flushing file data "
 473                        "on %s\n", bdevname(journal->j_fs_dev, b));
 474                if (journal->j_flags & JFS_ABORT_ON_SYNCDATA_ERR)
 475                        journal_abort(journal, err);
 476                err = 0;
 477        }
 478
 479        blk_start_plug(&plug);
 480
 481        journal_write_revoke_records(journal, commit_transaction, WRITE_SYNC);
 482
 483        /*
 484         * If we found any dirty or locked buffers, then we should have
 485         * looped back up to the write_out_data label.  If there weren't
 486         * any then journal_clean_data_list should have wiped the list
 487         * clean by now, so check that it is in fact empty.
 488         */
 489        J_ASSERT (commit_transaction->t_sync_datalist == NULL);
 490
 491        jbd_debug (3, "JBD: commit phase 3\n");
 492
 493        /*
 494         * Way to go: we have now written out all of the data for a
 495         * transaction!  Now comes the tricky part: we need to write out
 496         * metadata.  Loop over the transaction's entire buffer list:
 497         */
 498        spin_lock(&journal->j_state_lock);
 499        commit_transaction->t_state = T_COMMIT;
 500        spin_unlock(&journal->j_state_lock);
 501
 502        trace_jbd_commit_logging(journal, commit_transaction);
 503        J_ASSERT(commit_transaction->t_nr_buffers <=
 504                 commit_transaction->t_outstanding_credits);
 505
 506        descriptor = NULL;
 507        bufs = 0;
 508        while (commit_transaction->t_buffers) {
 509
 510                /* Find the next buffer to be journaled... */
 511
 512                jh = commit_transaction->t_buffers;
 513
 514                /* If we're in abort mode, we just un-journal the buffer and
 515                   release it. */
 516
 517                if (is_journal_aborted(journal)) {
 518                        clear_buffer_jbddirty(jh2bh(jh));
 519                        JBUFFER_TRACE(jh, "journal is aborting: refile");
 520                        journal_refile_buffer(journal, jh);
 521                        /* If that was the last one, we need to clean up
 522                         * any descriptor buffers which may have been
 523                         * already allocated, even if we are now
 524                         * aborting. */
 525                        if (!commit_transaction->t_buffers)
 526                                goto start_journal_io;
 527                        continue;
 528                }
 529
 530                /* Make sure we have a descriptor block in which to
 531                   record the metadata buffer. */
 532
 533                if (!descriptor) {
 534                        struct buffer_head *bh;
 535
 536                        J_ASSERT (bufs == 0);
 537
 538                        jbd_debug(4, "JBD: get descriptor\n");
 539
 540                        descriptor = journal_get_descriptor_buffer(journal);
 541                        if (!descriptor) {
 542                                journal_abort(journal, -EIO);
 543                                continue;
 544                        }
 545
 546                        bh = jh2bh(descriptor);
 547                        jbd_debug(4, "JBD: got buffer %llu (%p)\n",
 548                                (unsigned long long)bh->b_blocknr, bh->b_data);
 549                        header = (journal_header_t *)&bh->b_data[0];
 550                        header->h_magic     = cpu_to_be32(JFS_MAGIC_NUMBER);
 551                        header->h_blocktype = cpu_to_be32(JFS_DESCRIPTOR_BLOCK);
 552                        header->h_sequence  = cpu_to_be32(commit_transaction->t_tid);
 553
 554                        tagp = &bh->b_data[sizeof(journal_header_t)];
 555                        space_left = bh->b_size - sizeof(journal_header_t);
 556                        first_tag = 1;
 557                        set_buffer_jwrite(bh);
 558                        set_buffer_dirty(bh);
 559                        wbuf[bufs++] = bh;
 560
 561                        /* Record it so that we can wait for IO
 562                           completion later */
 563                        BUFFER_TRACE(bh, "ph3: file as descriptor");
 564                        journal_file_buffer(descriptor, commit_transaction,
 565                                        BJ_LogCtl);
 566                }
 567
 568                /* Where is the buffer to be written? */
 569
 570                err = journal_next_log_block(journal, &blocknr);
 571                /* If the block mapping failed, just abandon the buffer
 572                   and repeat this loop: we'll fall into the
 573                   refile-on-abort condition above. */
 574                if (err) {
 575                        journal_abort(journal, err);
 576                        continue;
 577                }
 578
 579                /*
 580                 * start_this_handle() uses t_outstanding_credits to determine
 581                 * the free space in the log, but this counter is changed
 582                 * by journal_next_log_block() also.
 583                 */
 584                commit_transaction->t_outstanding_credits--;
 585
 586                /* Bump b_count to prevent truncate from stumbling over
 587                   the shadowed buffer!  @@@ This can go if we ever get
 588                   rid of the BJ_IO/BJ_Shadow pairing of buffers. */
 589                get_bh(jh2bh(jh));
 590
 591                /* Make a temporary IO buffer with which to write it out
 592                   (this will requeue both the metadata buffer and the
 593                   temporary IO buffer). new_bh goes on BJ_IO*/
 594
 595                set_buffer_jwrite(jh2bh(jh));
 596                /*
 597                 * akpm: journal_write_metadata_buffer() sets
 598                 * new_bh->b_transaction to commit_transaction.
 599                 * We need to clean this up before we release new_bh
 600                 * (which is of type BJ_IO)
 601                 */
 602                JBUFFER_TRACE(jh, "ph3: write metadata");
 603                flags = journal_write_metadata_buffer(commit_transaction,
 604                                                      jh, &new_jh, blocknr);
 605                set_buffer_jwrite(jh2bh(new_jh));
 606                wbuf[bufs++] = jh2bh(new_jh);
 607
 608                /* Record the new block's tag in the current descriptor
 609                   buffer */
 610
 611                tag_flag = 0;
 612                if (flags & 1)
 613                        tag_flag |= JFS_FLAG_ESCAPE;
 614                if (!first_tag)
 615                        tag_flag |= JFS_FLAG_SAME_UUID;
 616
 617                tag = (journal_block_tag_t *) tagp;
 618                tag->t_blocknr = cpu_to_be32(jh2bh(jh)->b_blocknr);
 619                tag->t_flags = cpu_to_be32(tag_flag);
 620                tagp += sizeof(journal_block_tag_t);
 621                space_left -= sizeof(journal_block_tag_t);
 622
 623                if (first_tag) {
 624                        memcpy (tagp, journal->j_uuid, 16);
 625                        tagp += 16;
 626                        space_left -= 16;
 627                        first_tag = 0;
 628                }
 629
 630                /* If there's no more to do, or if the descriptor is full,
 631                   let the IO rip! */
 632
 633                if (bufs == journal->j_wbufsize ||
 634                    commit_transaction->t_buffers == NULL ||
 635                    space_left < sizeof(journal_block_tag_t) + 16) {
 636
 637                        jbd_debug(4, "JBD: Submit %d IOs\n", bufs);
 638
 639                        /* Write an end-of-descriptor marker before
 640                           submitting the IOs.  "tag" still points to
 641                           the last tag we set up. */
 642
 643                        tag->t_flags |= cpu_to_be32(JFS_FLAG_LAST_TAG);
 644
 645start_journal_io:
 646                        for (i = 0; i < bufs; i++) {
 647                                struct buffer_head *bh = wbuf[i];
 648                                lock_buffer(bh);
 649                                clear_buffer_dirty(bh);
 650                                set_buffer_uptodate(bh);
 651                                bh->b_end_io = journal_end_buffer_io_sync;
 652                                submit_bh(WRITE_SYNC, bh);
 653                        }
 654                        cond_resched();
 655
 656                        /* Force a new descriptor to be generated next
 657                           time round the loop. */
 658                        descriptor = NULL;
 659                        bufs = 0;
 660                }
 661        }
 662
 663        blk_finish_plug(&plug);
 664
 665        /* Lo and behold: we have just managed to send a transaction to
 666           the log.  Before we can commit it, wait for the IO so far to
 667           complete.  Control buffers being written are on the
 668           transaction's t_log_list queue, and metadata buffers are on
 669           the t_iobuf_list queue.
 670
 671           Wait for the buffers in reverse order.  That way we are
 672           less likely to be woken up until all IOs have completed, and
 673           so we incur less scheduling load.
 674        */
 675
 676        jbd_debug(3, "JBD: commit phase 4\n");
 677
 678        /*
 679         * akpm: these are BJ_IO, and j_list_lock is not needed.
 680         * See __journal_try_to_free_buffer.
 681         */
 682wait_for_iobuf:
 683        while (commit_transaction->t_iobuf_list != NULL) {
 684                struct buffer_head *bh;
 685
 686                jh = commit_transaction->t_iobuf_list->b_tprev;
 687                bh = jh2bh(jh);
 688                if (buffer_locked(bh)) {
 689                        wait_on_buffer(bh);
 690                        goto wait_for_iobuf;
 691                }
 692                if (cond_resched())
 693                        goto wait_for_iobuf;
 694
 695                if (unlikely(!buffer_uptodate(bh)))
 696                        err = -EIO;
 697
 698                clear_buffer_jwrite(bh);
 699
 700                JBUFFER_TRACE(jh, "ph4: unfile after journal write");
 701                journal_unfile_buffer(journal, jh);
 702
 703                /*
 704                 * ->t_iobuf_list should contain only dummy buffer_heads
 705                 * which were created by journal_write_metadata_buffer().
 706                 */
 707                BUFFER_TRACE(bh, "dumping temporary bh");
 708                journal_put_journal_head(jh);
 709                __brelse(bh);
 710                J_ASSERT_BH(bh, atomic_read(&bh->b_count) == 0);
 711                free_buffer_head(bh);
 712
 713                /* We also have to unlock and free the corresponding
 714                   shadowed buffer */
 715                jh = commit_transaction->t_shadow_list->b_tprev;
 716                bh = jh2bh(jh);
 717                clear_buffer_jwrite(bh);
 718                J_ASSERT_BH(bh, buffer_jbddirty(bh));
 719
 720                /* The metadata is now released for reuse, but we need
 721                   to remember it against this transaction so that when
 722                   we finally commit, we can do any checkpointing
 723                   required. */
 724                JBUFFER_TRACE(jh, "file as BJ_Forget");
 725                journal_file_buffer(jh, commit_transaction, BJ_Forget);
 726                /*
 727                 * Wake up any transactions which were waiting for this
 728                 * IO to complete. The barrier must be here so that changes
 729                 * by journal_file_buffer() take effect before wake_up_bit()
 730                 * does the waitqueue check.
 731                 */
 732                smp_mb();
 733                wake_up_bit(&bh->b_state, BH_Unshadow);
 734                JBUFFER_TRACE(jh, "brelse shadowed buffer");
 735                __brelse(bh);
 736        }
 737
 738        J_ASSERT (commit_transaction->t_shadow_list == NULL);
 739
 740        jbd_debug(3, "JBD: commit phase 5\n");
 741
 742        /* Here we wait for the revoke record and descriptor record buffers */
 743 wait_for_ctlbuf:
 744        while (commit_transaction->t_log_list != NULL) {
 745                struct buffer_head *bh;
 746
 747                jh = commit_transaction->t_log_list->b_tprev;
 748                bh = jh2bh(jh);
 749                if (buffer_locked(bh)) {
 750                        wait_on_buffer(bh);
 751                        goto wait_for_ctlbuf;
 752                }
 753                if (cond_resched())
 754                        goto wait_for_ctlbuf;
 755
 756                if (unlikely(!buffer_uptodate(bh)))
 757                        err = -EIO;
 758
 759                BUFFER_TRACE(bh, "ph5: control buffer writeout done: unfile");
 760                clear_buffer_jwrite(bh);
 761                journal_unfile_buffer(journal, jh);
 762                journal_put_journal_head(jh);
 763                __brelse(bh);           /* One for getblk */
 764                /* AKPM: bforget here */
 765        }
 766
 767        if (err)
 768                journal_abort(journal, err);
 769
 770        jbd_debug(3, "JBD: commit phase 6\n");
 771
 772        /* All metadata is written, now write commit record and do cleanup */
 773        spin_lock(&journal->j_state_lock);
 774        J_ASSERT(commit_transaction->t_state == T_COMMIT);
 775        commit_transaction->t_state = T_COMMIT_RECORD;
 776        spin_unlock(&journal->j_state_lock);
 777
 778        if (journal_write_commit_record(journal, commit_transaction))
 779                err = -EIO;
 780
 781        if (err)
 782                journal_abort(journal, err);
 783
 784        /* End of a transaction!  Finally, we can do checkpoint
 785           processing: any buffers committed as a result of this
 786           transaction can be removed from any checkpoint list it was on
 787           before. */
 788
 789        jbd_debug(3, "JBD: commit phase 7\n");
 790
 791        J_ASSERT(commit_transaction->t_sync_datalist == NULL);
 792        J_ASSERT(commit_transaction->t_buffers == NULL);
 793        J_ASSERT(commit_transaction->t_checkpoint_list == NULL);
 794        J_ASSERT(commit_transaction->t_iobuf_list == NULL);
 795        J_ASSERT(commit_transaction->t_shadow_list == NULL);
 796        J_ASSERT(commit_transaction->t_log_list == NULL);
 797
 798restart_loop:
 799        /*
 800         * As there are other places (journal_unmap_buffer()) adding buffers
 801         * to this list we have to be careful and hold the j_list_lock.
 802         */
 803        spin_lock(&journal->j_list_lock);
 804        while (commit_transaction->t_forget) {
 805                transaction_t *cp_transaction;
 806                struct buffer_head *bh;
 807                int try_to_free = 0;
 808
 809                jh = commit_transaction->t_forget;
 810                spin_unlock(&journal->j_list_lock);
 811                bh = jh2bh(jh);
 812                /*
 813                 * Get a reference so that bh cannot be freed before we are
 814                 * done with it.
 815                 */
 816                get_bh(bh);
 817                jbd_lock_bh_state(bh);
 818                J_ASSERT_JH(jh, jh->b_transaction == commit_transaction ||
 819                        jh->b_transaction == journal->j_running_transaction);
 820
 821                /*
 822                 * If there is undo-protected committed data against
 823                 * this buffer, then we can remove it now.  If it is a
 824                 * buffer needing such protection, the old frozen_data
 825                 * field now points to a committed version of the
 826                 * buffer, so rotate that field to the new committed
 827                 * data.
 828                 *
 829                 * Otherwise, we can just throw away the frozen data now.
 830                 */
 831                if (jh->b_committed_data) {
 832                        jbd_free(jh->b_committed_data, bh->b_size);
 833                        jh->b_committed_data = NULL;
 834                        if (jh->b_frozen_data) {
 835                                jh->b_committed_data = jh->b_frozen_data;
 836                                jh->b_frozen_data = NULL;
 837                        }
 838                } else if (jh->b_frozen_data) {
 839                        jbd_free(jh->b_frozen_data, bh->b_size);
 840                        jh->b_frozen_data = NULL;
 841                }
 842
 843                spin_lock(&journal->j_list_lock);
 844                cp_transaction = jh->b_cp_transaction;
 845                if (cp_transaction) {
 846                        JBUFFER_TRACE(jh, "remove from old cp transaction");
 847                        __journal_remove_checkpoint(jh);
 848                }
 849
 850                /* Only re-checkpoint the buffer_head if it is marked
 851                 * dirty.  If the buffer was added to the BJ_Forget list
 852                 * by journal_forget, it may no longer be dirty and
 853                 * there's no point in keeping a checkpoint record for
 854                 * it. */
 855
 856                /* A buffer which has been freed while still being
 857                 * journaled by a previous transaction may end up still
 858                 * being dirty here, but we want to avoid writing back
 859                 * that buffer in the future after the "add to orphan"
 860                 * operation been committed,  That's not only a performance
 861                 * gain, it also stops aliasing problems if the buffer is
 862                 * left behind for writeback and gets reallocated for another
 863                 * use in a different page. */
 864                if (buffer_freed(bh) && !jh->b_next_transaction) {
 865                        clear_buffer_freed(bh);
 866                        clear_buffer_jbddirty(bh);
 867                }
 868
 869                if (buffer_jbddirty(bh)) {
 870                        JBUFFER_TRACE(jh, "add to new checkpointing trans");
 871                        __journal_insert_checkpoint(jh, commit_transaction);
 872                        if (is_journal_aborted(journal))
 873                                clear_buffer_jbddirty(bh);
 874                } else {
 875                        J_ASSERT_BH(bh, !buffer_dirty(bh));
 876                        /*
 877                         * The buffer on BJ_Forget list and not jbddirty means
 878                         * it has been freed by this transaction and hence it
 879                         * could not have been reallocated until this
 880                         * transaction has committed. *BUT* it could be
 881                         * reallocated once we have written all the data to
 882                         * disk and before we process the buffer on BJ_Forget
 883                         * list.
 884                         */
 885                        if (!jh->b_next_transaction)
 886                                try_to_free = 1;
 887                }
 888                JBUFFER_TRACE(jh, "refile or unfile freed buffer");
 889                __journal_refile_buffer(jh);
 890                jbd_unlock_bh_state(bh);
 891                if (try_to_free)
 892                        release_buffer_page(bh);
 893                else
 894                        __brelse(bh);
 895                cond_resched_lock(&journal->j_list_lock);
 896        }
 897        spin_unlock(&journal->j_list_lock);
 898        /*
 899         * This is a bit sleazy.  We use j_list_lock to protect transition
 900         * of a transaction into T_FINISHED state and calling
 901         * __journal_drop_transaction(). Otherwise we could race with
 902         * other checkpointing code processing the transaction...
 903         */
 904        spin_lock(&journal->j_state_lock);
 905        spin_lock(&journal->j_list_lock);
 906        /*
 907         * Now recheck if some buffers did not get attached to the transaction
 908         * while the lock was dropped...
 909         */
 910        if (commit_transaction->t_forget) {
 911                spin_unlock(&journal->j_list_lock);
 912                spin_unlock(&journal->j_state_lock);
 913                goto restart_loop;
 914        }
 915
 916        /* Done with this transaction! */
 917
 918        jbd_debug(3, "JBD: commit phase 8\n");
 919
 920        J_ASSERT(commit_transaction->t_state == T_COMMIT_RECORD);
 921
 922        commit_transaction->t_state = T_FINISHED;
 923        J_ASSERT(commit_transaction == journal->j_committing_transaction);
 924        journal->j_commit_sequence = commit_transaction->t_tid;
 925        journal->j_committing_transaction = NULL;
 926        commit_time = ktime_to_ns(ktime_sub(ktime_get(), start_time));
 927
 928        /*
 929         * weight the commit time higher than the average time so we don't
 930         * react too strongly to vast changes in commit time
 931         */
 932        if (likely(journal->j_average_commit_time))
 933                journal->j_average_commit_time = (commit_time*3 +
 934                                journal->j_average_commit_time) / 4;
 935        else
 936                journal->j_average_commit_time = commit_time;
 937
 938        spin_unlock(&journal->j_state_lock);
 939
 940        if (commit_transaction->t_checkpoint_list == NULL &&
 941            commit_transaction->t_checkpoint_io_list == NULL) {
 942                __journal_drop_transaction(journal, commit_transaction);
 943        } else {
 944                if (journal->j_checkpoint_transactions == NULL) {
 945                        journal->j_checkpoint_transactions = commit_transaction;
 946                        commit_transaction->t_cpnext = commit_transaction;
 947                        commit_transaction->t_cpprev = commit_transaction;
 948                } else {
 949                        commit_transaction->t_cpnext =
 950                                journal->j_checkpoint_transactions;
 951                        commit_transaction->t_cpprev =
 952                                commit_transaction->t_cpnext->t_cpprev;
 953                        commit_transaction->t_cpnext->t_cpprev =
 954                                commit_transaction;
 955                        commit_transaction->t_cpprev->t_cpnext =
 956                                commit_transaction;
 957                }
 958        }
 959        spin_unlock(&journal->j_list_lock);
 960
 961        trace_jbd_end_commit(journal, commit_transaction);
 962        jbd_debug(1, "JBD: commit %d complete, head %d\n",
 963                  journal->j_commit_sequence, journal->j_tail_sequence);
 964
 965        wake_up(&journal->j_wait_done_commit);
 966}
 967
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.