linux/fs/jbd2/transaction.c
<<
>>
Prefs
   1/*
   2 * linux/fs/jbd2/transaction.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 * Generic filesystem transaction handling code; part of the ext2fs
  13 * journaling system.
  14 *
  15 * This file manages transactions (compound commits managed by the
  16 * journaling code) and handles (individual atomic operations by the
  17 * filesystem).
  18 */
  19
  20#include <linux/time.h>
  21#include <linux/fs.h>
  22#include <linux/jbd2.h>
  23#include <linux/errno.h>
  24#include <linux/slab.h>
  25#include <linux/timer.h>
  26#include <linux/mm.h>
  27#include <linux/highmem.h>
  28#include <linux/hrtimer.h>
  29#include <linux/backing-dev.h>
  30#include <linux/bug.h>
  31#include <linux/module.h>
  32#include <linux/sched/mm.h>
  33
  34#include <trace/events/jbd2.h>
  35
  36static void __jbd2_journal_temp_unlink_buffer(struct journal_head *jh);
  37static void __jbd2_journal_unfile_buffer(struct journal_head *jh);
  38
  39static struct kmem_cache *transaction_cache;
  40int __init jbd2_journal_init_transaction_cache(void)
  41{
  42        J_ASSERT(!transaction_cache);
  43        transaction_cache = kmem_cache_create("jbd2_transaction_s",
  44                                        sizeof(transaction_t),
  45                                        0,
  46                                        SLAB_HWCACHE_ALIGN|SLAB_TEMPORARY,
  47                                        NULL);
  48        if (transaction_cache)
  49                return 0;
  50        return -ENOMEM;
  51}
  52
  53void jbd2_journal_destroy_transaction_cache(void)
  54{
  55        if (transaction_cache) {
  56                kmem_cache_destroy(transaction_cache);
  57                transaction_cache = NULL;
  58        }
  59}
  60
  61void jbd2_journal_free_transaction(transaction_t *transaction)
  62{
  63        if (unlikely(ZERO_OR_NULL_PTR(transaction)))
  64                return;
  65        kmem_cache_free(transaction_cache, transaction);
  66}
  67
  68/*
  69 * jbd2_get_transaction: obtain a new transaction_t object.
  70 *
  71 * Simply allocate and initialise a new transaction.  Create it in
  72 * RUNNING state and add it to the current journal (which should not
  73 * have an existing running transaction: we only make a new transaction
  74 * once we have started to commit the old one).
  75 *
  76 * Preconditions:
  77 *      The journal MUST be locked.  We don't perform atomic mallocs on the
  78 *      new transaction and we can't block without protecting against other
  79 *      processes trying to touch the journal while it is in transition.
  80 *
  81 */
  82
  83static transaction_t *
  84jbd2_get_transaction(journal_t *journal, transaction_t *transaction)
  85{
  86        transaction->t_journal = journal;
  87        transaction->t_state = T_RUNNING;
  88        transaction->t_start_time = ktime_get();
  89        transaction->t_tid = journal->j_transaction_sequence++;
  90        transaction->t_expires = jiffies + journal->j_commit_interval;
  91        spin_lock_init(&transaction->t_handle_lock);
  92        atomic_set(&transaction->t_updates, 0);
  93        atomic_set(&transaction->t_outstanding_credits,
  94                   atomic_read(&journal->j_reserved_credits));
  95        atomic_set(&transaction->t_handle_count, 0);
  96        INIT_LIST_HEAD(&transaction->t_inode_list);
  97        INIT_LIST_HEAD(&transaction->t_private_list);
  98
  99        /* Set up the commit timer for the new transaction. */
 100        journal->j_commit_timer.expires = round_jiffies_up(transaction->t_expires);
 101        add_timer(&journal->j_commit_timer);
 102
 103        J_ASSERT(journal->j_running_transaction == NULL);
 104        journal->j_running_transaction = transaction;
 105        transaction->t_max_wait = 0;
 106        transaction->t_start = jiffies;
 107        transaction->t_requested = 0;
 108
 109        return transaction;
 110}
 111
 112/*
 113 * Handle management.
 114 *
 115 * A handle_t is an object which represents a single atomic update to a
 116 * filesystem, and which tracks all of the modifications which form part
 117 * of that one update.
 118 */
 119
 120/*
 121 * Update transaction's maximum wait time, if debugging is enabled.
 122 *
 123 * In order for t_max_wait to be reliable, it must be protected by a
 124 * lock.  But doing so will mean that start_this_handle() can not be
 125 * run in parallel on SMP systems, which limits our scalability.  So
 126 * unless debugging is enabled, we no longer update t_max_wait, which
 127 * means that maximum wait time reported by the jbd2_run_stats
 128 * tracepoint will always be zero.
 129 */
 130static inline void update_t_max_wait(transaction_t *transaction,
 131                                     unsigned long ts)
 132{
 133#ifdef CONFIG_JBD2_DEBUG
 134        if (jbd2_journal_enable_debug &&
 135            time_after(transaction->t_start, ts)) {
 136                ts = jbd2_time_diff(ts, transaction->t_start);
 137                spin_lock(&transaction->t_handle_lock);
 138                if (ts > transaction->t_max_wait)
 139                        transaction->t_max_wait = ts;
 140                spin_unlock(&transaction->t_handle_lock);
 141        }
 142#endif
 143}
 144
 145/*
 146 * Wait until running transaction passes T_LOCKED state. Also starts the commit
 147 * if needed. The function expects running transaction to exist and releases
 148 * j_state_lock.
 149 */
 150static void wait_transaction_locked(journal_t *journal)
 151        __releases(journal->j_state_lock)
 152{
 153        DEFINE_WAIT(wait);
 154        int need_to_start;
 155        tid_t tid = journal->j_running_transaction->t_tid;
 156
 157        prepare_to_wait(&journal->j_wait_transaction_locked, &wait,
 158                        TASK_UNINTERRUPTIBLE);
 159        need_to_start = !tid_geq(journal->j_commit_request, tid);
 160        read_unlock(&journal->j_state_lock);
 161        if (need_to_start)
 162                jbd2_log_start_commit(journal, tid);
 163        jbd2_might_wait_for_commit(journal);
 164        schedule();
 165        finish_wait(&journal->j_wait_transaction_locked, &wait);
 166}
 167
 168static void sub_reserved_credits(journal_t *journal, int blocks)
 169{
 170        atomic_sub(blocks, &journal->j_reserved_credits);
 171        wake_up(&journal->j_wait_reserved);
 172}
 173
 174/*
 175 * Wait until we can add credits for handle to the running transaction.  Called
 176 * with j_state_lock held for reading. Returns 0 if handle joined the running
 177 * transaction. Returns 1 if we had to wait, j_state_lock is dropped, and
 178 * caller must retry.
 179 */
 180static int add_transaction_credits(journal_t *journal, int blocks,
 181                                   int rsv_blocks)
 182{
 183        transaction_t *t = journal->j_running_transaction;
 184        int needed;
 185        int total = blocks + rsv_blocks;
 186
 187        /*
 188         * If the current transaction is locked down for commit, wait
 189         * for the lock to be released.
 190         */
 191        if (t->t_state == T_LOCKED) {
 192                wait_transaction_locked(journal);
 193                return 1;
 194        }
 195
 196        /*
 197         * If there is not enough space left in the log to write all
 198         * potential buffers requested by this operation, we need to
 199         * stall pending a log checkpoint to free some more log space.
 200         */
 201        needed = atomic_add_return(total, &t->t_outstanding_credits);
 202        if (needed > journal->j_max_transaction_buffers) {
 203                /*
 204                 * If the current transaction is already too large,
 205                 * then start to commit it: we can then go back and
 206                 * attach this handle to a new transaction.
 207                 */
 208                atomic_sub(total, &t->t_outstanding_credits);
 209
 210                /*
 211                 * Is the number of reserved credits in the current transaction too
 212                 * big to fit this handle? Wait until reserved credits are freed.
 213                 */
 214                if (atomic_read(&journal->j_reserved_credits) + total >
 215                    journal->j_max_transaction_buffers) {
 216                        read_unlock(&journal->j_state_lock);
 217                        jbd2_might_wait_for_commit(journal);
 218                        wait_event(journal->j_wait_reserved,
 219                                   atomic_read(&journal->j_reserved_credits) + total <=
 220                                   journal->j_max_transaction_buffers);
 221                        return 1;
 222                }
 223
 224                wait_transaction_locked(journal);
 225                return 1;
 226        }
 227
 228        /*
 229         * The commit code assumes that it can get enough log space
 230         * without forcing a checkpoint.  This is *critical* for
 231         * correctness: a checkpoint of a buffer which is also
 232         * associated with a committing transaction creates a deadlock,
 233         * so commit simply cannot force through checkpoints.
 234         *
 235         * We must therefore ensure the necessary space in the journal
 236         * *before* starting to dirty potentially checkpointed buffers
 237         * in the new transaction.
 238         */
 239        if (jbd2_log_space_left(journal) < jbd2_space_needed(journal)) {
 240                atomic_sub(total, &t->t_outstanding_credits);
 241                read_unlock(&journal->j_state_lock);
 242                jbd2_might_wait_for_commit(journal);
 243                write_lock(&journal->j_state_lock);
 244                if (jbd2_log_space_left(journal) < jbd2_space_needed(journal))
 245                        __jbd2_log_wait_for_space(journal);
 246                write_unlock(&journal->j_state_lock);
 247                return 1;
 248        }
 249
 250        /* No reservation? We are done... */
 251        if (!rsv_blocks)
 252                return 0;
 253
 254        needed = atomic_add_return(rsv_blocks, &journal->j_reserved_credits);
 255        /* We allow at most half of a transaction to be reserved */
 256        if (needed > journal->j_max_transaction_buffers / 2) {
 257                sub_reserved_credits(journal, rsv_blocks);
 258                atomic_sub(total, &t->t_outstanding_credits);
 259                read_unlock(&journal->j_state_lock);
 260                jbd2_might_wait_for_commit(journal);
 261                wait_event(journal->j_wait_reserved,
 262                         atomic_read(&journal->j_reserved_credits) + rsv_blocks
 263                         <= journal->j_max_transaction_buffers / 2);
 264                return 1;
 265        }
 266        return 0;
 267}
 268
 269/*
 270 * start_this_handle: Given a handle, deal with any locking or stalling
 271 * needed to make sure that there is enough journal space for the handle
 272 * to begin.  Attach the handle to a transaction and set up the
 273 * transaction's buffer credits.
 274 */
 275
 276static int start_this_handle(journal_t *journal, handle_t *handle,
 277                             gfp_t gfp_mask)
 278{
 279        transaction_t   *transaction, *new_transaction = NULL;
 280        int             blocks = handle->h_buffer_credits;
 281        int             rsv_blocks = 0;
 282        unsigned long ts = jiffies;
 283
 284        if (handle->h_rsv_handle)
 285                rsv_blocks = handle->h_rsv_handle->h_buffer_credits;
 286
 287        /*
 288         * Limit the number of reserved credits to 1/2 of maximum transaction
 289         * size and limit the number of total credits to not exceed maximum
 290         * transaction size per operation.
 291         */
 292        if ((rsv_blocks > journal->j_max_transaction_buffers / 2) ||
 293            (rsv_blocks + blocks > journal->j_max_transaction_buffers)) {
 294                printk(KERN_ERR "JBD2: %s wants too many credits "
 295                       "credits:%d rsv_credits:%d max:%d\n",
 296                       current->comm, blocks, rsv_blocks,
 297                       journal->j_max_transaction_buffers);
 298                WARN_ON(1);
 299                return -ENOSPC;
 300        }
 301
 302alloc_transaction:
 303        if (!journal->j_running_transaction) {
 304                /*
 305                 * If __GFP_FS is not present, then we may be being called from
 306                 * inside the fs writeback layer, so we MUST NOT fail.
 307                 */
 308                if ((gfp_mask & __GFP_FS) == 0)
 309                        gfp_mask |= __GFP_NOFAIL;
 310                new_transaction = kmem_cache_zalloc(transaction_cache,
 311                                                    gfp_mask);
 312                if (!new_transaction)
 313                        return -ENOMEM;
 314        }
 315
 316        jbd_debug(3, "New handle %p going live.\n", handle);
 317
 318        /*
 319         * We need to hold j_state_lock until t_updates has been incremented,
 320         * for proper journal barrier handling
 321         */
 322repeat:
 323        read_lock(&journal->j_state_lock);
 324        BUG_ON(journal->j_flags & JBD2_UNMOUNT);
 325        if (is_journal_aborted(journal) ||
 326            (journal->j_errno != 0 && !(journal->j_flags & JBD2_ACK_ERR))) {
 327                read_unlock(&journal->j_state_lock);
 328                jbd2_journal_free_transaction(new_transaction);
 329                return -EROFS;
 330        }
 331
 332        /*
 333         * Wait on the journal's transaction barrier if necessary. Specifically
 334         * we allow reserved handles to proceed because otherwise commit could
 335         * deadlock on page writeback not being able to complete.
 336         */
 337        if (!handle->h_reserved && journal->j_barrier_count) {
 338                read_unlock(&journal->j_state_lock);
 339                wait_event(journal->j_wait_transaction_locked,
 340                                journal->j_barrier_count == 0);
 341                goto repeat;
 342        }
 343
 344        if (!journal->j_running_transaction) {
 345                read_unlock(&journal->j_state_lock);
 346                if (!new_transaction)
 347                        goto alloc_transaction;
 348                write_lock(&journal->j_state_lock);
 349                if (!journal->j_running_transaction &&
 350                    (handle->h_reserved || !journal->j_barrier_count)) {
 351                        jbd2_get_transaction(journal, new_transaction);
 352                        new_transaction = NULL;
 353                }
 354                write_unlock(&journal->j_state_lock);
 355                goto repeat;
 356        }
 357
 358        transaction = journal->j_running_transaction;
 359
 360        if (!handle->h_reserved) {
 361                /* We may have dropped j_state_lock - restart in that case */
 362                if (add_transaction_credits(journal, blocks, rsv_blocks))
 363                        goto repeat;
 364        } else {
 365                /*
 366                 * We have handle reserved so we are allowed to join T_LOCKED
 367                 * transaction and we don't have to check for transaction size
 368                 * and journal space.
 369                 */
 370                sub_reserved_credits(journal, blocks);
 371                handle->h_reserved = 0;
 372        }
 373
 374        /* OK, account for the buffers that this operation expects to
 375         * use and add the handle to the running transaction. 
 376         */
 377        update_t_max_wait(transaction, ts);
 378        handle->h_transaction = transaction;
 379        handle->h_requested_credits = blocks;
 380        handle->h_start_jiffies = jiffies;
 381        atomic_inc(&transaction->t_updates);
 382        atomic_inc(&transaction->t_handle_count);
 383        jbd_debug(4, "Handle %p given %d credits (total %d, free %lu)\n",
 384                  handle, blocks,
 385                  atomic_read(&transaction->t_outstanding_credits),
 386                  jbd2_log_space_left(journal));
 387        read_unlock(&journal->j_state_lock);
 388        current->journal_info = handle;
 389
 390        rwsem_acquire_read(&journal->j_trans_commit_map, 0, 0, _THIS_IP_);
 391        jbd2_journal_free_transaction(new_transaction);
 392        /*
 393         * Ensure that no allocations done while the transaction is open are
 394         * going to recurse back to the fs layer.
 395         */
 396        handle->saved_alloc_context = memalloc_nofs_save();
 397        return 0;
 398}
 399
 400/* Allocate a new handle.  This should probably be in a slab... */
 401static handle_t *new_handle(int nblocks)
 402{
 403        handle_t *handle = jbd2_alloc_handle(GFP_NOFS);
 404        if (!handle)
 405                return NULL;
 406        handle->h_buffer_credits = nblocks;
 407        handle->h_ref = 1;
 408
 409        return handle;
 410}
 411
 412handle_t *jbd2__journal_start(journal_t *journal, int nblocks, int rsv_blocks,
 413                              gfp_t gfp_mask, unsigned int type,
 414                              unsigned int line_no)
 415{
 416        handle_t *handle = journal_current_handle();
 417        int err;
 418
 419        if (!journal)
 420                return ERR_PTR(-EROFS);
 421
 422        if (handle) {
 423                J_ASSERT(handle->h_transaction->t_journal == journal);
 424                handle->h_ref++;
 425                return handle;
 426        }
 427
 428        handle = new_handle(nblocks);
 429        if (!handle)
 430                return ERR_PTR(-ENOMEM);
 431        if (rsv_blocks) {
 432                handle_t *rsv_handle;
 433
 434                rsv_handle = new_handle(rsv_blocks);
 435                if (!rsv_handle) {
 436                        jbd2_free_handle(handle);
 437                        return ERR_PTR(-ENOMEM);
 438                }
 439                rsv_handle->h_reserved = 1;
 440                rsv_handle->h_journal = journal;
 441                handle->h_rsv_handle = rsv_handle;
 442        }
 443
 444        err = start_this_handle(journal, handle, gfp_mask);
 445        if (err < 0) {
 446                if (handle->h_rsv_handle)
 447                        jbd2_free_handle(handle->h_rsv_handle);
 448                jbd2_free_handle(handle);
 449                return ERR_PTR(err);
 450        }
 451        handle->h_type = type;
 452        handle->h_line_no = line_no;
 453        trace_jbd2_handle_start(journal->j_fs_dev->bd_dev,
 454                                handle->h_transaction->t_tid, type,
 455                                line_no, nblocks);
 456
 457        return handle;
 458}
 459EXPORT_SYMBOL(jbd2__journal_start);
 460
 461
 462/**
 463 * handle_t *jbd2_journal_start() - Obtain a new handle.
 464 * @journal: Journal to start transaction on.
 465 * @nblocks: number of block buffer we might modify
 466 *
 467 * We make sure that the transaction can guarantee at least nblocks of
 468 * modified buffers in the log.  We block until the log can guarantee
 469 * that much space. Additionally, if rsv_blocks > 0, we also create another
 470 * handle with rsv_blocks reserved blocks in the journal. This handle is
 471 * is stored in h_rsv_handle. It is not attached to any particular transaction
 472 * and thus doesn't block transaction commit. If the caller uses this reserved
 473 * handle, it has to set h_rsv_handle to NULL as otherwise jbd2_journal_stop()
 474 * on the parent handle will dispose the reserved one. Reserved handle has to
 475 * be converted to a normal handle using jbd2_journal_start_reserved() before
 476 * it can be used.
 477 *
 478 * Return a pointer to a newly allocated handle, or an ERR_PTR() value
 479 * on failure.
 480 */
 481handle_t *jbd2_journal_start(journal_t *journal, int nblocks)
 482{
 483        return jbd2__journal_start(journal, nblocks, 0, GFP_NOFS, 0, 0);
 484}
 485EXPORT_SYMBOL(jbd2_journal_start);
 486
 487void jbd2_journal_free_reserved(handle_t *handle)
 488{
 489        journal_t *journal = handle->h_journal;
 490
 491        WARN_ON(!handle->h_reserved);
 492        sub_reserved_credits(journal, handle->h_buffer_credits);
 493        jbd2_free_handle(handle);
 494}
 495EXPORT_SYMBOL(jbd2_journal_free_reserved);
 496
 497/**
 498 * int jbd2_journal_start_reserved(handle_t *handle) - start reserved handle
 499 * @handle: handle to start
 500 *
 501 * Start handle that has been previously reserved with jbd2_journal_reserve().
 502 * This attaches @handle to the running transaction (or creates one if there's
 503 * not transaction running). Unlike jbd2_journal_start() this function cannot
 504 * block on journal commit, checkpointing, or similar stuff. It can block on
 505 * memory allocation or frozen journal though.
 506 *
 507 * Return 0 on success, non-zero on error - handle is freed in that case.
 508 */
 509int jbd2_journal_start_reserved(handle_t *handle, unsigned int type,
 510                                unsigned int line_no)
 511{
 512        journal_t *journal = handle->h_journal;
 513        int ret = -EIO;
 514
 515        if (WARN_ON(!handle->h_reserved)) {
 516                /* Someone passed in normal handle? Just stop it. */
 517                jbd2_journal_stop(handle);
 518                return ret;
 519        }
 520        /*
 521         * Usefulness of mixing of reserved and unreserved handles is
 522         * questionable. So far nobody seems to need it so just error out.
 523         */
 524        if (WARN_ON(current->journal_info)) {
 525                jbd2_journal_free_reserved(handle);
 526                return ret;
 527        }
 528
 529        handle->h_journal = NULL;
 530        /*
 531         * GFP_NOFS is here because callers are likely from writeback or
 532         * similarly constrained call sites
 533         */
 534        ret = start_this_handle(journal, handle, GFP_NOFS);
 535        if (ret < 0) {
 536                jbd2_journal_free_reserved(handle);
 537                return ret;
 538        }
 539        handle->h_type = type;
 540        handle->h_line_no = line_no;
 541        return 0;
 542}
 543EXPORT_SYMBOL(jbd2_journal_start_reserved);
 544
 545/**
 546 * int jbd2_journal_extend() - extend buffer credits.
 547 * @handle:  handle to 'extend'
 548 * @nblocks: nr blocks to try to extend by.
 549 *
 550 * Some transactions, such as large extends and truncates, can be done
 551 * atomically all at once or in several stages.  The operation requests
 552 * a credit for a number of buffer modifications in advance, but can
 553 * extend its credit if it needs more.
 554 *
 555 * jbd2_journal_extend tries to give the running handle more buffer credits.
 556 * It does not guarantee that allocation - this is a best-effort only.
 557 * The calling process MUST be able to deal cleanly with a failure to
 558 * extend here.
 559 *
 560 * Return 0 on success, non-zero on failure.
 561 *
 562 * return code < 0 implies an error
 563 * return code > 0 implies normal transaction-full status.
 564 */
 565int jbd2_journal_extend(handle_t *handle, int nblocks)
 566{
 567        transaction_t *transaction = handle->h_transaction;
 568        journal_t *journal;
 569        int result;
 570        int wanted;
 571
 572        if (is_handle_aborted(handle))
 573                return -EROFS;
 574        journal = transaction->t_journal;
 575
 576        result = 1;
 577
 578        read_lock(&journal->j_state_lock);
 579
 580        /* Don't extend a locked-down transaction! */
 581        if (transaction->t_state != T_RUNNING) {
 582                jbd_debug(3, "denied handle %p %d blocks: "
 583                          "transaction not running\n", handle, nblocks);
 584                goto error_out;
 585        }
 586
 587        spin_lock(&transaction->t_handle_lock);
 588        wanted = atomic_add_return(nblocks,
 589                                   &transaction->t_outstanding_credits);
 590
 591        if (wanted > journal->j_max_transaction_buffers) {
 592                jbd_debug(3, "denied handle %p %d blocks: "
 593                          "transaction too large\n", handle, nblocks);
 594                atomic_sub(nblocks, &transaction->t_outstanding_credits);
 595                goto unlock;
 596        }
 597
 598        if (wanted + (wanted >> JBD2_CONTROL_BLOCKS_SHIFT) >
 599            jbd2_log_space_left(journal)) {
 600                jbd_debug(3, "denied handle %p %d blocks: "
 601                          "insufficient log space\n", handle, nblocks);
 602                atomic_sub(nblocks, &transaction->t_outstanding_credits);
 603                goto unlock;
 604        }
 605
 606        trace_jbd2_handle_extend(journal->j_fs_dev->bd_dev,
 607                                 transaction->t_tid,
 608                                 handle->h_type, handle->h_line_no,
 609                                 handle->h_buffer_credits,
 610                                 nblocks);
 611
 612        handle->h_buffer_credits += nblocks;
 613        handle->h_requested_credits += nblocks;
 614        result = 0;
 615
 616        jbd_debug(3, "extended handle %p by %d\n", handle, nblocks);
 617unlock:
 618        spin_unlock(&transaction->t_handle_lock);
 619error_out:
 620        read_unlock(&journal->j_state_lock);
 621        return result;
 622}
 623
 624
 625/**
 626 * int jbd2_journal_restart() - restart a handle .
 627 * @handle:  handle to restart
 628 * @nblocks: nr credits requested
 629 *
 630 * Restart a handle for a multi-transaction filesystem
 631 * operation.
 632 *
 633 * If the jbd2_journal_extend() call above fails to grant new buffer credits
 634 * to a running handle, a call to jbd2_journal_restart will commit the
 635 * handle's transaction so far and reattach the handle to a new
 636 * transaction capable of guaranteeing the requested number of
 637 * credits. We preserve reserved handle if there's any attached to the
 638 * passed in handle.
 639 */
 640int jbd2__journal_restart(handle_t *handle, int nblocks, gfp_t gfp_mask)
 641{
 642        transaction_t *transaction = handle->h_transaction;
 643        journal_t *journal;
 644        tid_t           tid;
 645        int             need_to_start, ret;
 646
 647        /* If we've had an abort of any type, don't even think about
 648         * actually doing the restart! */
 649        if (is_handle_aborted(handle))
 650                return 0;
 651        journal = transaction->t_journal;
 652
 653        /*
 654         * First unlink the handle from its current transaction, and start the
 655         * commit on that.
 656         */
 657        J_ASSERT(atomic_read(&transaction->t_updates) > 0);
 658        J_ASSERT(journal_current_handle() == handle);
 659
 660        read_lock(&journal->j_state_lock);
 661        spin_lock(&transaction->t_handle_lock);
 662        atomic_sub(handle->h_buffer_credits,
 663                   &transaction->t_outstanding_credits);
 664        if (handle->h_rsv_handle) {
 665                sub_reserved_credits(journal,
 666                                     handle->h_rsv_handle->h_buffer_credits);
 667        }
 668        if (atomic_dec_and_test(&transaction->t_updates))
 669                wake_up(&journal->j_wait_updates);
 670        tid = transaction->t_tid;
 671        spin_unlock(&transaction->t_handle_lock);
 672        handle->h_transaction = NULL;
 673        current->journal_info = NULL;
 674
 675        jbd_debug(2, "restarting handle %p\n", handle);
 676        need_to_start = !tid_geq(journal->j_commit_request, tid);
 677        read_unlock(&journal->j_state_lock);
 678        if (need_to_start)
 679                jbd2_log_start_commit(journal, tid);
 680
 681        rwsem_release(&journal->j_trans_commit_map, 1, _THIS_IP_);
 682        handle->h_buffer_credits = nblocks;
 683        /*
 684         * Restore the original nofs context because the journal restart
 685         * is basically the same thing as journal stop and start.
 686         * start_this_handle will start a new nofs context.
 687         */
 688        memalloc_nofs_restore(handle->saved_alloc_context);
 689        ret = start_this_handle(journal, handle, gfp_mask);
 690        return ret;
 691}
 692EXPORT_SYMBOL(jbd2__journal_restart);
 693
 694
 695int jbd2_journal_restart(handle_t *handle, int nblocks)
 696{
 697        return jbd2__journal_restart(handle, nblocks, GFP_NOFS);
 698}
 699EXPORT_SYMBOL(jbd2_journal_restart);
 700
 701/**
 702 * void jbd2_journal_lock_updates () - establish a transaction barrier.
 703 * @journal:  Journal to establish a barrier on.
 704 *
 705 * This locks out any further updates from being started, and blocks
 706 * until all existing updates have completed, returning only once the
 707 * journal is in a quiescent state with no updates running.
 708 *
 709 * The journal lock should not be held on entry.
 710 */
 711void jbd2_journal_lock_updates(journal_t *journal)
 712{
 713        DEFINE_WAIT(wait);
 714
 715        jbd2_might_wait_for_commit(journal);
 716
 717        write_lock(&journal->j_state_lock);
 718        ++journal->j_barrier_count;
 719
 720        /* Wait until there are no reserved handles */
 721        if (atomic_read(&journal->j_reserved_credits)) {
 722                write_unlock(&journal->j_state_lock);
 723                wait_event(journal->j_wait_reserved,
 724                           atomic_read(&journal->j_reserved_credits) == 0);
 725                write_lock(&journal->j_state_lock);
 726        }
 727
 728        /* Wait until there are no running updates */
 729        while (1) {
 730                transaction_t *transaction = journal->j_running_transaction;
 731
 732                if (!transaction)
 733                        break;
 734
 735                spin_lock(&transaction->t_handle_lock);
 736                prepare_to_wait(&journal->j_wait_updates, &wait,
 737                                TASK_UNINTERRUPTIBLE);
 738                if (!atomic_read(&transaction->t_updates)) {
 739                        spin_unlock(&transaction->t_handle_lock);
 740                        finish_wait(&journal->j_wait_updates, &wait);
 741                        break;
 742                }
 743                spin_unlock(&transaction->t_handle_lock);
 744                write_unlock(&journal->j_state_lock);
 745                schedule();
 746                finish_wait(&journal->j_wait_updates, &wait);
 747                write_lock(&journal->j_state_lock);
 748        }
 749        write_unlock(&journal->j_state_lock);
 750
 751        /*
 752         * We have now established a barrier against other normal updates, but
 753         * we also need to barrier against other jbd2_journal_lock_updates() calls
 754         * to make sure that we serialise special journal-locked operations
 755         * too.
 756         */
 757        mutex_lock(&journal->j_barrier);
 758}
 759
 760/**
 761 * void jbd2_journal_unlock_updates (journal_t* journal) - release barrier
 762 * @journal:  Journal to release the barrier on.
 763 *
 764 * Release a transaction barrier obtained with jbd2_journal_lock_updates().
 765 *
 766 * Should be called without the journal lock held.
 767 */
 768void jbd2_journal_unlock_updates (journal_t *journal)
 769{
 770        J_ASSERT(journal->j_barrier_count != 0);
 771
 772        mutex_unlock(&journal->j_barrier);
 773        write_lock(&journal->j_state_lock);
 774        --journal->j_barrier_count;
 775        write_unlock(&journal->j_state_lock);
 776        wake_up(&journal->j_wait_transaction_locked);
 777}
 778
 779static void warn_dirty_buffer(struct buffer_head *bh)
 780{
 781        printk(KERN_WARNING
 782               "JBD2: Spotted dirty metadata buffer (dev = %pg, blocknr = %llu). "
 783               "There's a risk of filesystem corruption in case of system "
 784               "crash.\n",
 785               bh->b_bdev, (unsigned long long)bh->b_blocknr);
 786}
 787
 788/* Call t_frozen trigger and copy buffer data into jh->b_frozen_data. */
 789static void jbd2_freeze_jh_data(struct journal_head *jh)
 790{
 791        struct page *page;
 792        int offset;
 793        char *source;
 794        struct buffer_head *bh = jh2bh(jh);
 795
 796        J_EXPECT_JH(jh, buffer_uptodate(bh), "Possible IO failure.\n");
 797        page = bh->b_page;
 798        offset = offset_in_page(bh->b_data);
 799        source = kmap_atomic(page);
 800        /* Fire data frozen trigger just before we copy the data */
 801        jbd2_buffer_frozen_trigger(jh, source + offset, jh->b_triggers);
 802        memcpy(jh->b_frozen_data, source + offset, bh->b_size);
 803        kunmap_atomic(source);
 804
 805        /*
 806         * Now that the frozen data is saved off, we need to store any matching
 807         * triggers.
 808         */
 809        jh->b_frozen_triggers = jh->b_triggers;
 810}
 811
 812/*
 813 * If the buffer is already part of the current transaction, then there
 814 * is nothing we need to do.  If it is already part of a prior
 815 * transaction which we are still committing to disk, then we need to
 816 * make sure that we do not overwrite the old copy: we do copy-out to
 817 * preserve the copy going to disk.  We also account the buffer against
 818 * the handle's metadata buffer credits (unless the buffer is already
 819 * part of the transaction, that is).
 820 *
 821 */
 822static int
 823do_get_write_access(handle_t *handle, struct journal_head *jh,
 824                        int force_copy)
 825{
 826        struct buffer_head *bh;
 827        transaction_t *transaction = handle->h_transaction;
 828        journal_t *journal;
 829        int error;
 830        char *frozen_buffer = NULL;
 831        unsigned long start_lock, time_lock;
 832
 833        if (is_handle_aborted(handle))
 834                return -EROFS;
 835        journal = transaction->t_journal;
 836
 837        jbd_debug(5, "journal_head %p, force_copy %d\n", jh, force_copy);
 838
 839        JBUFFER_TRACE(jh, "entry");
 840repeat:
 841        bh = jh2bh(jh);
 842
 843        /* @@@ Need to check for errors here at some point. */
 844
 845        start_lock = jiffies;
 846        lock_buffer(bh);
 847        jbd_lock_bh_state(bh);
 848
 849        /* If it takes too long to lock the buffer, trace it */
 850        time_lock = jbd2_time_diff(start_lock, jiffies);
 851        if (time_lock > HZ/10)
 852                trace_jbd2_lock_buffer_stall(bh->b_bdev->bd_dev,
 853                        jiffies_to_msecs(time_lock));
 854
 855        /* We now hold the buffer lock so it is safe to query the buffer
 856         * state.  Is the buffer dirty?
 857         *
 858         * If so, there are two possibilities.  The buffer may be
 859         * non-journaled, and undergoing a quite legitimate writeback.
 860         * Otherwise, it is journaled, and we don't expect dirty buffers
 861         * in that state (the buffers should be marked JBD_Dirty
 862         * instead.)  So either the IO is being done under our own
 863         * control and this is a bug, or it's a third party IO such as
 864         * dump(8) (which may leave the buffer scheduled for read ---
 865         * ie. locked but not dirty) or tune2fs (which may actually have
 866         * the buffer dirtied, ugh.)  */
 867
 868        if (buffer_dirty(bh)) {
 869                /*
 870                 * First question: is this buffer already part of the current
 871                 * transaction or the existing committing transaction?
 872                 */
 873                if (jh->b_transaction) {
 874                        J_ASSERT_JH(jh,
 875                                jh->b_transaction == transaction ||
 876                                jh->b_transaction ==
 877                                        journal->j_committing_transaction);
 878                        if (jh->b_next_transaction)
 879                                J_ASSERT_JH(jh, jh->b_next_transaction ==
 880                                                        transaction);
 881                        warn_dirty_buffer(bh);
 882                }
 883                /*
 884                 * In any case we need to clean the dirty flag and we must
 885                 * do it under the buffer lock to be sure we don't race
 886                 * with running write-out.
 887                 */
 888                JBUFFER_TRACE(jh, "Journalling dirty buffer");
 889                clear_buffer_dirty(bh);
 890                set_buffer_jbddirty(bh);
 891        }
 892
 893        unlock_buffer(bh);
 894
 895        error = -EROFS;
 896        if (is_handle_aborted(handle)) {
 897                jbd_unlock_bh_state(bh);
 898                goto out;
 899        }
 900        error = 0;
 901
 902        /*
 903         * The buffer is already part of this transaction if b_transaction or
 904         * b_next_transaction points to it
 905         */
 906        if (jh->b_transaction == transaction ||
 907            jh->b_next_transaction == transaction)
 908                goto done;
 909
 910        /*
 911         * this is the first time this transaction is touching this buffer,
 912         * reset the modified flag
 913         */
 914       jh->b_modified = 0;
 915
 916        /*
 917         * If the buffer is not journaled right now, we need to make sure it
 918         * doesn't get written to disk before the caller actually commits the
 919         * new data
 920         */
 921        if (!jh->b_transaction) {
 922                JBUFFER_TRACE(jh, "no transaction");
 923                J_ASSERT_JH(jh, !jh->b_next_transaction);
 924                JBUFFER_TRACE(jh, "file as BJ_Reserved");
 925                /*
 926                 * Make sure all stores to jh (b_modified, b_frozen_data) are
 927                 * visible before attaching it to the running transaction.
 928                 * Paired with barrier in jbd2_write_access_granted()
 929                 */
 930                smp_wmb();
 931                spin_lock(&journal->j_list_lock);
 932                __jbd2_journal_file_buffer(jh, transaction, BJ_Reserved);
 933                spin_unlock(&journal->j_list_lock);
 934                goto done;
 935        }
 936        /*
 937         * If there is already a copy-out version of this buffer, then we don't
 938         * need to make another one
 939         */
 940        if (jh->b_frozen_data) {
 941                JBUFFER_TRACE(jh, "has frozen data");
 942                J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
 943                goto attach_next;
 944        }
 945
 946        JBUFFER_TRACE(jh, "owned by older transaction");
 947        J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
 948        J_ASSERT_JH(jh, jh->b_transaction == journal->j_committing_transaction);
 949
 950        /*
 951         * There is one case we have to be very careful about.  If the
 952         * committing transaction is currently writing this buffer out to disk
 953         * and has NOT made a copy-out, then we cannot modify the buffer
 954         * contents at all right now.  The essence of copy-out is that it is
 955         * the extra copy, not the primary copy, which gets journaled.  If the
 956         * primary copy is already going to disk then we cannot do copy-out
 957         * here.
 958         */
 959        if (buffer_shadow(bh)) {
 960                JBUFFER_TRACE(jh, "on shadow: sleep");
 961                jbd_unlock_bh_state(bh);
 962                wait_on_bit_io(&bh->b_state, BH_Shadow, TASK_UNINTERRUPTIBLE);
 963                goto repeat;
 964        }
 965
 966        /*
 967         * Only do the copy if the currently-owning transaction still needs it.
 968         * If buffer isn't on BJ_Metadata list, the committing transaction is
 969         * past that stage (here we use the fact that BH_Shadow is set under
 970         * bh_state lock together with refiling to BJ_Shadow list and at this
 971         * point we know the buffer doesn't have BH_Shadow set).
 972         *
 973         * Subtle point, though: if this is a get_undo_access, then we will be
 974         * relying on the frozen_data to contain the new value of the
 975         * committed_data record after the transaction, so we HAVE to force the
 976         * frozen_data copy in that case.
 977         */
 978        if (jh->b_jlist == BJ_Metadata || force_copy) {
 979                JBUFFER_TRACE(jh, "generate frozen data");
 980                if (!frozen_buffer) {
 981                        JBUFFER_TRACE(jh, "allocate memory for buffer");
 982                        jbd_unlock_bh_state(bh);
 983                        frozen_buffer = jbd2_alloc(jh2bh(jh)->b_size,
 984                                                   GFP_NOFS | __GFP_NOFAIL);
 985                        goto repeat;
 986                }
 987                jh->b_frozen_data = frozen_buffer;
 988                frozen_buffer = NULL;
 989                jbd2_freeze_jh_data(jh);
 990        }
 991attach_next:
 992        /*
 993         * Make sure all stores to jh (b_modified, b_frozen_data) are visible
 994         * before attaching it to the running transaction. Paired with barrier
 995         * in jbd2_write_access_granted()
 996         */
 997        smp_wmb();
 998        jh->b_next_transaction = transaction;
 999
1000done:
1001        jbd_unlock_bh_state(bh);
1002
1003        /*
1004         * If we are about to journal a buffer, then any revoke pending on it is
1005         * no longer valid
1006         */
1007        jbd2_journal_cancel_revoke(handle, jh);
1008
1009out:
1010        if (unlikely(frozen_buffer))    /* It's usually NULL */
1011                jbd2_free(frozen_buffer, bh->b_size);
1012
1013        JBUFFER_TRACE(jh, "exit");
1014        return error;
1015}
1016
1017/* Fast check whether buffer is already attached to the required transaction */
1018static bool jbd2_write_access_granted(handle_t *handle, struct buffer_head *bh,
1019                                                        bool undo)
1020{
1021        struct journal_head *jh;
1022        bool ret = false;
1023
1024        /* Dirty buffers require special handling... */
1025        if (buffer_dirty(bh))
1026                return false;
1027
1028        /*
1029         * RCU protects us from dereferencing freed pages. So the checks we do
1030         * are guaranteed not to oops. However the jh slab object can get freed
1031         * & reallocated while we work with it. So we have to be careful. When
1032         * we see jh attached to the running transaction, we know it must stay
1033         * so until the transaction is committed. Thus jh won't be freed and
1034         * will be attached to the same bh while we run.  However it can
1035         * happen jh gets freed, reallocated, and attached to the transaction
1036         * just after we get pointer to it from bh. So we have to be careful
1037         * and recheck jh still belongs to our bh before we return success.
1038         */
1039        rcu_read_lock();
1040        if (!buffer_jbd(bh))
1041                goto out;
1042        /* This should be bh2jh() but that doesn't work with inline functions */
1043        jh = READ_ONCE(bh->b_private);
1044        if (!jh)
1045                goto out;
1046        /* For undo access buffer must have data copied */
1047        if (undo && !jh->b_committed_data)
1048                goto out;
1049        if (jh->b_transaction != handle->h_transaction &&
1050            jh->b_next_transaction != handle->h_transaction)
1051                goto out;
1052        /*
1053         * There are two reasons for the barrier here:
1054         * 1) Make sure to fetch b_bh after we did previous checks so that we
1055         * detect when jh went through free, realloc, attach to transaction
1056         * while we were checking. Paired with implicit barrier in that path.
1057         * 2) So that access to bh done after jbd2_write_access_granted()
1058         * doesn't get reordered and see inconsistent state of concurrent
1059         * do_get_write_access().
1060         */
1061        smp_mb();
1062        if (unlikely(jh->b_bh != bh))
1063                goto out;
1064        ret = true;
1065out:
1066        rcu_read_unlock();
1067        return ret;
1068}
1069
1070/**
1071 * int jbd2_journal_get_write_access() - notify intent to modify a buffer for metadata (not data) update.
1072 * @handle: transaction to add buffer modifications to
1073 * @bh:     bh to be used for metadata writes
1074 *
1075 * Returns: error code or 0 on success.
1076 *
1077 * In full data journalling mode the buffer may be of type BJ_AsyncData,
1078 * because we're ``write()ing`` a buffer which is also part of a shared mapping.
1079 */
1080
1081int jbd2_journal_get_write_access(handle_t *handle, struct buffer_head *bh)
1082{
1083        struct journal_head *jh;
1084        int rc;
1085
1086        if (jbd2_write_access_granted(handle, bh, false))
1087                return 0;
1088
1089        jh = jbd2_journal_add_journal_head(bh);
1090        /* We do not want to get caught playing with fields which the
1091         * log thread also manipulates.  Make sure that the buffer
1092         * completes any outstanding IO before proceeding. */
1093        rc = do_get_write_access(handle, jh, 0);
1094        jbd2_journal_put_journal_head(jh);
1095        return rc;
1096}
1097
1098
1099/*
1100 * When the user wants to journal a newly created buffer_head
1101 * (ie. getblk() returned a new buffer and we are going to populate it
1102 * manually rather than reading off disk), then we need to keep the
1103 * buffer_head locked until it has been completely filled with new
1104 * data.  In this case, we should be able to make the assertion that
1105 * the bh is not already part of an existing transaction.
1106 *
1107 * The buffer should already be locked by the caller by this point.
1108 * There is no lock ranking violation: it was a newly created,
1109 * unlocked buffer beforehand. */
1110
1111/**
1112 * int jbd2_journal_get_create_access () - notify intent to use newly created bh
1113 * @handle: transaction to new buffer to
1114 * @bh: new buffer.
1115 *
1116 * Call this if you create a new bh.
1117 */
1118int jbd2_journal_get_create_access(handle_t *handle, struct buffer_head *bh)
1119{
1120        transaction_t *transaction = handle->h_transaction;
1121        journal_t *journal;
1122        struct journal_head *jh = jbd2_journal_add_journal_head(bh);
1123        int err;
1124
1125        jbd_debug(5, "journal_head %p\n", jh);
1126        err = -EROFS;
1127        if (is_handle_aborted(handle))
1128                goto out;
1129        journal = transaction->t_journal;
1130        err = 0;
1131
1132        JBUFFER_TRACE(jh, "entry");
1133        /*
1134         * The buffer may already belong to this transaction due to pre-zeroing
1135         * in the filesystem's new_block code.  It may also be on the previous,
1136         * committing transaction's lists, but it HAS to be in Forget state in
1137         * that case: the transaction must have deleted the buffer for it to be
1138         * reused here.
1139         */
1140        jbd_lock_bh_state(bh);
1141        J_ASSERT_JH(jh, (jh->b_transaction == transaction ||
1142                jh->b_transaction == NULL ||
1143                (jh->b_transaction == journal->j_committing_transaction &&
1144                          jh->b_jlist == BJ_Forget)));
1145
1146        J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
1147        J_ASSERT_JH(jh, buffer_locked(jh2bh(jh)));
1148
1149        if (jh->b_transaction == NULL) {
1150                /*
1151                 * Previous jbd2_journal_forget() could have left the buffer
1152                 * with jbddirty bit set because it was being committed. When
1153                 * the commit finished, we've filed the buffer for
1154                 * checkpointing and marked it dirty. Now we are reallocating
1155                 * the buffer so the transaction freeing it must have
1156                 * committed and so it's safe to clear the dirty bit.
1157                 */
1158                clear_buffer_dirty(jh2bh(jh));
1159                /* first access by this transaction */
1160                jh->b_modified = 0;
1161
1162                JBUFFER_TRACE(jh, "file as BJ_Reserved");
1163                spin_lock(&journal->j_list_lock);
1164                __jbd2_journal_file_buffer(jh, transaction, BJ_Reserved);
1165                spin_unlock(&journal->j_list_lock);
1166        } else if (jh->b_transaction == journal->j_committing_transaction) {
1167                /* first access by this transaction */
1168                jh->b_modified = 0;
1169
1170                JBUFFER_TRACE(jh, "set next transaction");
1171                spin_lock(&journal->j_list_lock);
1172                jh->b_next_transaction = transaction;
1173                spin_unlock(&journal->j_list_lock);
1174        }
1175        jbd_unlock_bh_state(bh);
1176
1177        /*
1178         * akpm: I added this.  ext3_alloc_branch can pick up new indirect
1179         * blocks which contain freed but then revoked metadata.  We need
1180         * to cancel the revoke in case we end up freeing it yet again
1181         * and the reallocating as data - this would cause a second revoke,
1182         * which hits an assertion error.
1183         */
1184        JBUFFER_TRACE(jh, "cancelling revoke");
1185        jbd2_journal_cancel_revoke(handle, jh);
1186out:
1187        jbd2_journal_put_journal_head(jh);
1188        return err;
1189}
1190
1191/**
1192 * int jbd2_journal_get_undo_access() -  Notify intent to modify metadata with
1193 *     non-rewindable consequences
1194 * @handle: transaction
1195 * @bh: buffer to undo
1196 *
1197 * Sometimes there is a need to distinguish between metadata which has
1198 * been committed to disk and that which has not.  The ext3fs code uses
1199 * this for freeing and allocating space, we have to make sure that we
1200 * do not reuse freed space until the deallocation has been committed,
1201 * since if we overwrote that space we would make the delete
1202 * un-rewindable in case of a crash.
1203 *
1204 * To deal with that, jbd2_journal_get_undo_access requests write access to a
1205 * buffer for parts of non-rewindable operations such as delete
1206 * operations on the bitmaps.  The journaling code must keep a copy of
1207 * the buffer's contents prior to the undo_access call until such time
1208 * as we know that the buffer has definitely been committed to disk.
1209 *
1210 * We never need to know which transaction the committed data is part
1211 * of, buffers touched here are guaranteed to be dirtied later and so
1212 * will be committed to a new transaction in due course, at which point
1213 * we can discard the old committed data pointer.
1214 *
1215 * Returns error number or 0 on success.
1216 */
1217int jbd2_journal_get_undo_access(handle_t *handle, struct buffer_head *bh)
1218{
1219        int err;
1220        struct journal_head *jh;
1221        char *committed_data = NULL;
1222
1223        JBUFFER_TRACE(jh, "entry");
1224        if (jbd2_write_access_granted(handle, bh, true))
1225                return 0;
1226
1227        jh = jbd2_journal_add_journal_head(bh);
1228        /*
1229         * Do this first --- it can drop the journal lock, so we want to
1230         * make sure that obtaining the committed_data is done
1231         * atomically wrt. completion of any outstanding commits.
1232         */
1233        err = do_get_write_access(handle, jh, 1);
1234        if (err)
1235                goto out;
1236
1237repeat:
1238        if (!jh->b_committed_data)
1239                committed_data = jbd2_alloc(jh2bh(jh)->b_size,
1240                                            GFP_NOFS|__GFP_NOFAIL);
1241
1242        jbd_lock_bh_state(bh);
1243        if (!jh->b_committed_data) {
1244                /* Copy out the current buffer contents into the
1245                 * preserved, committed copy. */
1246                JBUFFER_TRACE(jh, "generate b_committed data");
1247                if (!committed_data) {
1248                        jbd_unlock_bh_state(bh);
1249                        goto repeat;
1250                }
1251
1252                jh->b_committed_data = committed_data;
1253                committed_data = NULL;
1254                memcpy(jh->b_committed_data, bh->b_data, bh->b_size);
1255        }
1256        jbd_unlock_bh_state(bh);
1257out:
1258        jbd2_journal_put_journal_head(jh);
1259        if (unlikely(committed_data))
1260                jbd2_free(committed_data, bh->b_size);
1261        return err;
1262}
1263
1264/**
1265 * void jbd2_journal_set_triggers() - Add triggers for commit writeout
1266 * @bh: buffer to trigger on
1267 * @type: struct jbd2_buffer_trigger_type containing the trigger(s).
1268 *
1269 * Set any triggers on this journal_head.  This is always safe, because
1270 * triggers for a committing buffer will be saved off, and triggers for
1271 * a running transaction will match the buffer in that transaction.
1272 *
1273 * Call with NULL to clear the triggers.
1274 */
1275void jbd2_journal_set_triggers(struct buffer_head *bh,
1276                               struct jbd2_buffer_trigger_type *type)
1277{
1278        struct journal_head *jh = jbd2_journal_grab_journal_head(bh);
1279
1280        if (WARN_ON(!jh))
1281                return;
1282        jh->b_triggers = type;
1283        jbd2_journal_put_journal_head(jh);
1284}
1285
1286void jbd2_buffer_frozen_trigger(struct journal_head *jh, void *mapped_data,
1287                                struct jbd2_buffer_trigger_type *triggers)
1288{
1289        struct buffer_head *bh = jh2bh(jh);
1290
1291        if (!triggers || !triggers->t_frozen)
1292                return;
1293
1294        triggers->t_frozen(triggers, bh, mapped_data, bh->b_size);
1295}
1296
1297void jbd2_buffer_abort_trigger(struct journal_head *jh,
1298                               struct jbd2_buffer_trigger_type *triggers)
1299{
1300        if (!triggers || !triggers->t_abort)
1301                return;
1302
1303        triggers->t_abort(triggers, jh2bh(jh));
1304}
1305
1306/**
1307 * int jbd2_journal_dirty_metadata() -  mark a buffer as containing dirty metadata
1308 * @handle: transaction to add buffer to.
1309 * @bh: buffer to mark
1310 *
1311 * mark dirty metadata which needs to be journaled as part of the current
1312 * transaction.
1313 *
1314 * The buffer must have previously had jbd2_journal_get_write_access()
1315 * called so that it has a valid journal_head attached to the buffer
1316 * head.
1317 *
1318 * The buffer is placed on the transaction's metadata list and is marked
1319 * as belonging to the transaction.
1320 *
1321 * Returns error number or 0 on success.
1322 *
1323 * Special care needs to be taken if the buffer already belongs to the
1324 * current committing transaction (in which case we should have frozen
1325 * data present for that commit).  In that case, we don't relink the
1326 * buffer: that only gets done when the old transaction finally
1327 * completes its commit.
1328 */
1329int jbd2_journal_dirty_metadata(handle_t *handle, struct buffer_head *bh)
1330{
1331        transaction_t *transaction = handle->h_transaction;
1332        journal_t *journal;
1333        struct journal_head *jh;
1334        int ret = 0;
1335
1336        if (is_handle_aborted(handle))
1337                return -EROFS;
1338        if (!buffer_jbd(bh)) {
1339                ret = -EUCLEAN;
1340                goto out;
1341        }
1342        /*
1343         * We don't grab jh reference here since the buffer must be part
1344         * of the running transaction.
1345         */
1346        jh = bh2jh(bh);
1347        /*
1348         * This and the following assertions are unreliable since we may see jh
1349         * in inconsistent state unless we grab bh_state lock. But this is
1350         * crucial to catch bugs so let's do a reliable check until the
1351         * lockless handling is fully proven.
1352         */
1353        if (jh->b_transaction != transaction &&
1354            jh->b_next_transaction != transaction) {
1355                jbd_lock_bh_state(bh);
1356                J_ASSERT_JH(jh, jh->b_transaction == transaction ||
1357                                jh->b_next_transaction == transaction);
1358                jbd_unlock_bh_state(bh);
1359        }
1360        if (jh->b_modified == 1) {
1361                /* If it's in our transaction it must be in BJ_Metadata list. */
1362                if (jh->b_transaction == transaction &&
1363                    jh->b_jlist != BJ_Metadata) {
1364                        jbd_lock_bh_state(bh);
1365                        J_ASSERT_JH(jh, jh->b_transaction != transaction ||
1366                                        jh->b_jlist == BJ_Metadata);
1367                        jbd_unlock_bh_state(bh);
1368                }
1369                goto out;
1370        }
1371
1372        journal = transaction->t_journal;
1373        jbd_debug(5, "journal_head %p\n", jh);
1374        JBUFFER_TRACE(jh, "entry");
1375
1376        jbd_lock_bh_state(bh);
1377
1378        if (jh->b_modified == 0) {
1379                /*
1380                 * This buffer's got modified and becoming part
1381                 * of the transaction. This needs to be done
1382                 * once a transaction -bzzz
1383                 */
1384                jh->b_modified = 1;
1385                if (handle->h_buffer_credits <= 0) {
1386                        ret = -ENOSPC;
1387                        goto out_unlock_bh;
1388                }
1389                handle->h_buffer_credits--;
1390        }
1391
1392        /*
1393         * fastpath, to avoid expensive locking.  If this buffer is already
1394         * on the running transaction's metadata list there is nothing to do.
1395         * Nobody can take it off again because there is a handle open.
1396         * I _think_ we're OK here with SMP barriers - a mistaken decision will
1397         * result in this test being false, so we go in and take the locks.
1398         */
1399        if (jh->b_transaction == transaction && jh->b_jlist == BJ_Metadata) {
1400                JBUFFER_TRACE(jh, "fastpath");
1401                if (unlikely(jh->b_transaction !=
1402                             journal->j_running_transaction)) {
1403                        printk(KERN_ERR "JBD2: %s: "
1404                               "jh->b_transaction (%llu, %p, %u) != "
1405                               "journal->j_running_transaction (%p, %u)\n",
1406                               journal->j_devname,
1407                               (unsigned long long) bh->b_blocknr,
1408                               jh->b_transaction,
1409                               jh->b_transaction ? jh->b_transaction->t_tid : 0,
1410                               journal->j_running_transaction,
1411                               journal->j_running_transaction ?
1412                               journal->j_running_transaction->t_tid : 0);
1413                        ret = -EINVAL;
1414                }
1415                goto out_unlock_bh;
1416        }
1417
1418        set_buffer_jbddirty(bh);
1419
1420        /*
1421         * Metadata already on the current transaction list doesn't
1422         * need to be filed.  Metadata on another transaction's list must
1423         * be committing, and will be refiled once the commit completes:
1424         * leave it alone for now.
1425         */
1426        if (jh->b_transaction != transaction) {
1427                JBUFFER_TRACE(jh, "already on other transaction");
1428                if (unlikely(((jh->b_transaction !=
1429                               journal->j_committing_transaction)) ||
1430                             (jh->b_next_transaction != transaction))) {
1431                        printk(KERN_ERR "jbd2_journal_dirty_metadata: %s: "
1432                               "bad jh for block %llu: "
1433                               "transaction (%p, %u), "
1434                               "jh->b_transaction (%p, %u), "
1435                               "jh->b_next_transaction (%p, %u), jlist %u\n",
1436                               journal->j_devname,
1437                               (unsigned long long) bh->b_blocknr,
1438                               transaction, transaction->t_tid,
1439                               jh->b_transaction,
1440                               jh->b_transaction ?
1441                               jh->b_transaction->t_tid : 0,
1442                               jh->b_next_transaction,
1443                               jh->b_next_transaction ?
1444                               jh->b_next_transaction->t_tid : 0,
1445                               jh->b_jlist);
1446                        WARN_ON(1);
1447                        ret = -EINVAL;
1448                }
1449                /* And this case is illegal: we can't reuse another
1450                 * transaction's data buffer, ever. */
1451                goto out_unlock_bh;
1452        }
1453
1454        /* That test should have eliminated the following case: */
1455        J_ASSERT_JH(jh, jh->b_frozen_data == NULL);
1456
1457        JBUFFER_TRACE(jh, "file as BJ_Metadata");
1458        spin_lock(&journal->j_list_lock);
1459        __jbd2_journal_file_buffer(jh, transaction, BJ_Metadata);
1460        spin_unlock(&journal->j_list_lock);
1461out_unlock_bh:
1462        jbd_unlock_bh_state(bh);
1463out:
1464        JBUFFER_TRACE(jh, "exit");
1465        return ret;
1466}
1467
1468/**
1469 * void jbd2_journal_forget() - bforget() for potentially-journaled buffers.
1470 * @handle: transaction handle
1471 * @bh:     bh to 'forget'
1472 *
1473 * We can only do the bforget if there are no commits pending against the
1474 * buffer.  If the buffer is dirty in the current running transaction we
1475 * can safely unlink it.
1476 *
1477 * bh may not be a journalled buffer at all - it may be a non-JBD
1478 * buffer which came off the hashtable.  Check for this.
1479 *
1480 * Decrements bh->b_count by one.
1481 *
1482 * Allow this call even if the handle has aborted --- it may be part of
1483 * the caller's cleanup after an abort.
1484 */
1485int jbd2_journal_forget (handle_t *handle, struct buffer_head *bh)
1486{
1487        transaction_t *transaction = handle->h_transaction;
1488        journal_t *journal;
1489        struct journal_head *jh;
1490        int drop_reserve = 0;
1491        int err = 0;
1492        int was_modified = 0;
1493
1494        if (is_handle_aborted(handle))
1495                return -EROFS;
1496        journal = transaction->t_journal;
1497
1498        BUFFER_TRACE(bh, "entry");
1499
1500        jbd_lock_bh_state(bh);
1501
1502        if (!buffer_jbd(bh))
1503                goto not_jbd;
1504        jh = bh2jh(bh);
1505
1506        /* Critical error: attempting to delete a bitmap buffer, maybe?
1507         * Don't do any jbd operations, and return an error. */
1508        if (!J_EXPECT_JH(jh, !jh->b_committed_data,
1509                         "inconsistent data on disk")) {
1510                err = -EIO;
1511                goto not_jbd;
1512        }
1513
1514        /* keep track of whether or not this transaction modified us */
1515        was_modified = jh->b_modified;
1516
1517        /*
1518         * The buffer's going from the transaction, we must drop
1519         * all references -bzzz
1520         */
1521        jh->b_modified = 0;
1522
1523        if (jh->b_transaction == transaction) {
1524                J_ASSERT_JH(jh, !jh->b_frozen_data);
1525
1526                /* If we are forgetting a buffer which is already part
1527                 * of this transaction, then we can just drop it from
1528                 * the transaction immediately. */
1529                clear_buffer_dirty(bh);
1530                clear_buffer_jbddirty(bh);
1531
1532                JBUFFER_TRACE(jh, "belongs to current transaction: unfile");
1533
1534                /*
1535                 * we only want to drop a reference if this transaction
1536                 * modified the buffer
1537                 */
1538                if (was_modified)
1539                        drop_reserve = 1;
1540
1541                /*
1542                 * We are no longer going to journal this buffer.
1543                 * However, the commit of this transaction is still
1544                 * important to the buffer: the delete that we are now
1545                 * processing might obsolete an old log entry, so by
1546                 * committing, we can satisfy the buffer's checkpoint.
1547                 *
1548                 * So, if we have a checkpoint on the buffer, we should
1549                 * now refile the buffer on our BJ_Forget list so that
1550                 * we know to remove the checkpoint after we commit.
1551                 */
1552
1553                spin_lock(&journal->j_list_lock);
1554                if (jh->b_cp_transaction) {
1555                        __jbd2_journal_temp_unlink_buffer(jh);
1556                        __jbd2_journal_file_buffer(jh, transaction, BJ_Forget);
1557                } else {
1558                        __jbd2_journal_unfile_buffer(jh);
1559                        if (!buffer_jbd(bh)) {
1560                                spin_unlock(&journal->j_list_lock);
1561                                jbd_unlock_bh_state(bh);
1562                                __bforget(bh);
1563                                goto drop;
1564                        }
1565                }
1566                spin_unlock(&journal->j_list_lock);
1567        } else if (jh->b_transaction) {
1568                J_ASSERT_JH(jh, (jh->b_transaction ==
1569                                 journal->j_committing_transaction));
1570                /* However, if the buffer is still owned by a prior
1571                 * (committing) transaction, we can't drop it yet... */
1572                JBUFFER_TRACE(jh, "belongs to older transaction");
1573                /* ... but we CAN drop it from the new transaction if we
1574                 * have also modified it since the original commit. */
1575
1576                if (jh->b_next_transaction) {
1577                        J_ASSERT(jh->b_next_transaction == transaction);
1578                        spin_lock(&journal->j_list_lock);
1579                        jh->b_next_transaction = NULL;
1580                        spin_unlock(&journal->j_list_lock);
1581
1582                        /*
1583                         * only drop a reference if this transaction modified
1584                         * the buffer
1585                         */
1586                        if (was_modified)
1587                                drop_reserve = 1;
1588                }
1589        }
1590
1591not_jbd:
1592        jbd_unlock_bh_state(bh);
1593        __brelse(bh);
1594drop:
1595        if (drop_reserve) {
1596                /* no need to reserve log space for this block -bzzz */
1597                handle->h_buffer_credits++;
1598        }
1599        return err;
1600}
1601
1602/**
1603 * int jbd2_journal_stop() - complete a transaction
1604 * @handle: transaction to complete.
1605 *
1606 * All done for a particular handle.
1607 *
1608 * There is not much action needed here.  We just return any remaining
1609 * buffer credits to the transaction and remove the handle.  The only
1610 * complication is that we need to start a commit operation if the
1611 * filesystem is marked for synchronous update.
1612 *
1613 * jbd2_journal_stop itself will not usually return an error, but it may
1614 * do so in unusual circumstances.  In particular, expect it to
1615 * return -EIO if a jbd2_journal_abort has been executed since the
1616 * transaction began.
1617 */
1618int jbd2_journal_stop(handle_t *handle)
1619{
1620        transaction_t *transaction = handle->h_transaction;
1621        journal_t *journal;
1622        int err = 0, wait_for_commit = 0;
1623        tid_t tid;
1624        pid_t pid;
1625
1626        if (!transaction) {
1627                /*
1628                 * Handle is already detached from the transaction so
1629                 * there is nothing to do other than decrease a refcount,
1630                 * or free the handle if refcount drops to zero
1631                 */
1632                if (--handle->h_ref > 0) {
1633                        jbd_debug(4, "h_ref %d -> %d\n", handle->h_ref + 1,
1634                                                         handle->h_ref);
1635                        return err;
1636                } else {
1637                        if (handle->h_rsv_handle)
1638                                jbd2_free_handle(handle->h_rsv_handle);
1639                        goto free_and_exit;
1640                }
1641        }
1642        journal = transaction->t_journal;
1643
1644        J_ASSERT(journal_current_handle() == handle);
1645
1646        if (is_handle_aborted(handle))
1647                err = -EIO;
1648        else
1649                J_ASSERT(atomic_read(&transaction->t_updates) > 0);
1650
1651        if (--handle->h_ref > 0) {
1652                jbd_debug(4, "h_ref %d -> %d\n", handle->h_ref + 1,
1653                          handle->h_ref);
1654                return err;
1655        }
1656
1657        jbd_debug(4, "Handle %p going down\n", handle);
1658        trace_jbd2_handle_stats(journal->j_fs_dev->bd_dev,
1659                                transaction->t_tid,
1660                                handle->h_type, handle->h_line_no,
1661                                jiffies - handle->h_start_jiffies,
1662                                handle->h_sync, handle->h_requested_credits,
1663                                (handle->h_requested_credits -
1664                                 handle->h_buffer_credits));
1665
1666        /*
1667         * Implement synchronous transaction batching.  If the handle
1668         * was synchronous, don't force a commit immediately.  Let's
1669         * yield and let another thread piggyback onto this
1670         * transaction.  Keep doing that while new threads continue to
1671         * arrive.  It doesn't cost much - we're about to run a commit
1672         * and sleep on IO anyway.  Speeds up many-threaded, many-dir
1673         * operations by 30x or more...
1674         *
1675         * We try and optimize the sleep time against what the
1676         * underlying disk can do, instead of having a static sleep
1677         * time.  This is useful for the case where our storage is so
1678         * fast that it is more optimal to go ahead and force a flush
1679         * and wait for the transaction to be committed than it is to
1680         * wait for an arbitrary amount of time for new writers to
1681         * join the transaction.  We achieve this by measuring how
1682         * long it takes to commit a transaction, and compare it with
1683         * how long this transaction has been running, and if run time
1684         * < commit time then we sleep for the delta and commit.  This
1685         * greatly helps super fast disks that would see slowdowns as
1686         * more threads started doing fsyncs.
1687         *
1688         * But don't do this if this process was the most recent one
1689         * to perform a synchronous write.  We do this to detect the
1690         * case where a single process is doing a stream of sync
1691         * writes.  No point in waiting for joiners in that case.
1692         *
1693         * Setting max_batch_time to 0 disables this completely.
1694         */
1695        pid = current->pid;
1696        if (handle->h_sync && journal->j_last_sync_writer != pid &&
1697            journal->j_max_batch_time) {
1698                u64 commit_time, trans_time;
1699
1700                journal->j_last_sync_writer = pid;
1701
1702                read_lock(&journal->j_state_lock);
1703                commit_time = journal->j_average_commit_time;
1704                read_unlock(&journal->j_state_lock);
1705
1706                trans_time = ktime_to_ns(ktime_sub(ktime_get(),
1707                                                   transaction->t_start_time));
1708
1709                commit_time = max_t(u64, commit_time,
1710                                    1000*journal->j_min_batch_time);
1711                commit_time = min_t(u64, commit_time,
1712                                    1000*journal->j_max_batch_time);
1713
1714                if (trans_time < commit_time) {
1715                        ktime_t expires = ktime_add_ns(ktime_get(),
1716                                                       commit_time);
1717                        set_current_state(TASK_UNINTERRUPTIBLE);
1718                        schedule_hrtimeout(&expires, HRTIMER_MODE_ABS);
1719                }
1720        }
1721
1722        if (handle->h_sync)
1723                transaction->t_synchronous_commit = 1;
1724        current->journal_info = NULL;
1725        atomic_sub(handle->h_buffer_credits,
1726                   &transaction->t_outstanding_credits);
1727
1728        /*
1729         * If the handle is marked SYNC, we need to set another commit
1730         * going!  We also want to force a commit if the current
1731         * transaction is occupying too much of the log, or if the
1732         * transaction is too old now.
1733         */
1734        if (handle->h_sync ||
1735            (atomic_read(&transaction->t_outstanding_credits) >
1736             journal->j_max_transaction_buffers) ||
1737            time_after_eq(jiffies, transaction->t_expires)) {
1738                /* Do this even for aborted journals: an abort still
1739                 * completes the commit thread, it just doesn't write
1740                 * anything to disk. */
1741
1742                jbd_debug(2, "transaction too old, requesting commit for "
1743                                        "handle %p\n", handle);
1744                /* This is non-blocking */
1745                jbd2_log_start_commit(journal, transaction->t_tid);
1746
1747                /*
1748                 * Special case: JBD2_SYNC synchronous updates require us
1749                 * to wait for the commit to complete.
1750                 */
1751                if (handle->h_sync && !(current->flags & PF_MEMALLOC))
1752                        wait_for_commit = 1;
1753        }
1754
1755        /*
1756         * Once we drop t_updates, if it goes to zero the transaction
1757         * could start committing on us and eventually disappear.  So
1758         * once we do this, we must not dereference transaction
1759         * pointer again.
1760         */
1761        tid = transaction->t_tid;
1762        if (atomic_dec_and_test(&transaction->t_updates)) {
1763                wake_up(&journal->j_wait_updates);
1764                if (journal->j_barrier_count)
1765                        wake_up(&journal->j_wait_transaction_locked);
1766        }
1767
1768        rwsem_release(&journal->j_trans_commit_map, 1, _THIS_IP_);
1769
1770        if (wait_for_commit)
1771                err = jbd2_log_wait_commit(journal, tid);
1772
1773        if (handle->h_rsv_handle)
1774                jbd2_journal_free_reserved(handle->h_rsv_handle);
1775free_and_exit:
1776        /*
1777         * Scope of the GFP_NOFS context is over here and so we can restore the
1778         * original alloc context.
1779         */
1780        memalloc_nofs_restore(handle->saved_alloc_context);
1781        jbd2_free_handle(handle);
1782        return err;
1783}
1784
1785/*
1786 *
1787 * List management code snippets: various functions for manipulating the
1788 * transaction buffer lists.
1789 *
1790 */
1791
1792/*
1793 * Append a buffer to a transaction list, given the transaction's list head
1794 * pointer.
1795 *
1796 * j_list_lock is held.
1797 *
1798 * jbd_lock_bh_state(jh2bh(jh)) is held.
1799 */
1800
1801static inline void
1802__blist_add_buffer(struct journal_head **list, struct journal_head *jh)
1803{
1804        if (!*list) {
1805                jh->b_tnext = jh->b_tprev = jh;
1806                *list = jh;
1807        } else {
1808                /* Insert at the tail of the list to preserve order */
1809                struct journal_head *first = *list, *last = first->b_tprev;
1810                jh->b_tprev = last;
1811                jh->b_tnext = first;
1812                last->b_tnext = first->b_tprev = jh;
1813        }
1814}
1815
1816/*
1817 * Remove a buffer from a transaction list, given the transaction's list
1818 * head pointer.
1819 *
1820 * Called with j_list_lock held, and the journal may not be locked.
1821 *
1822 * jbd_lock_bh_state(jh2bh(jh)) is held.
1823 */
1824
1825static inline void
1826__blist_del_buffer(struct journal_head **list, struct journal_head *jh)
1827{
1828        if (*list == jh) {
1829                *list = jh->b_tnext;
1830                if (*list == jh)
1831                        *list = NULL;
1832        }
1833        jh->b_tprev->b_tnext = jh->b_tnext;
1834        jh->b_tnext->b_tprev = jh->b_tprev;
1835}
1836
1837/*
1838 * Remove a buffer from the appropriate transaction list.
1839 *
1840 * Note that this function can *change* the value of
1841 * bh->b_transaction->t_buffers, t_forget, t_shadow_list, t_log_list or
1842 * t_reserved_list.  If the caller is holding onto a copy of one of these
1843 * pointers, it could go bad.  Generally the caller needs to re-read the
1844 * pointer from the transaction_t.
1845 *
1846 * Called under j_list_lock.
1847 */
1848static void __jbd2_journal_temp_unlink_buffer(struct journal_head *jh)
1849{
1850        struct journal_head **list = NULL;
1851        transaction_t *transaction;
1852        struct buffer_head *bh = jh2bh(jh);
1853
1854        J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh));
1855        transaction = jh->b_transaction;
1856        if (transaction)
1857                assert_spin_locked(&transaction->t_journal->j_list_lock);
1858
1859        J_ASSERT_JH(jh, jh->b_jlist < BJ_Types);
1860        if (jh->b_jlist != BJ_None)
1861                J_ASSERT_JH(jh, transaction != NULL);
1862
1863        switch (jh->b_jlist) {
1864        case BJ_None:
1865                return;
1866        case BJ_Metadata:
1867                transaction->t_nr_buffers--;
1868                J_ASSERT_JH(jh, transaction->t_nr_buffers >= 0);
1869                list = &transaction->t_buffers;
1870                break;
1871        case BJ_Forget:
1872                list = &transaction->t_forget;
1873                break;
1874        case BJ_Shadow:
1875                list = &transaction->t_shadow_list;
1876                break;
1877        case BJ_Reserved:
1878                list = &transaction->t_reserved_list;
1879                break;
1880        }
1881
1882        __blist_del_buffer(list, jh);
1883        jh->b_jlist = BJ_None;
1884        if (transaction && is_journal_aborted(transaction->t_journal))
1885                clear_buffer_jbddirty(bh);
1886        else if (test_clear_buffer_jbddirty(bh))
1887                mark_buffer_dirty(bh);  /* Expose it to the VM */
1888}
1889
1890/*
1891 * Remove buffer from all transactions.
1892 *
1893 * Called with bh_state lock and j_list_lock
1894 *
1895 * jh and bh may be already freed when this function returns.
1896 */
1897static void __jbd2_journal_unfile_buffer(struct journal_head *jh)
1898{
1899        __jbd2_journal_temp_unlink_buffer(jh);
1900        jh->b_transaction = NULL;
1901        jbd2_journal_put_journal_head(jh);
1902}
1903
1904void jbd2_journal_unfile_buffer(journal_t *journal, struct journal_head *jh)
1905{
1906        struct buffer_head *bh = jh2bh(jh);
1907
1908        /* Get reference so that buffer cannot be freed before we unlock it */
1909        get_bh(bh);
1910        jbd_lock_bh_state(bh);
1911        spin_lock(&journal->j_list_lock);
1912        __jbd2_journal_unfile_buffer(jh);
1913        spin_unlock(&journal->j_list_lock);
1914        jbd_unlock_bh_state(bh);
1915        __brelse(bh);
1916}
1917
1918/*
1919 * Called from jbd2_journal_try_to_free_buffers().
1920 *
1921 * Called under jbd_lock_bh_state(bh)
1922 */
1923static void
1924__journal_try_to_free_buffer(journal_t *journal, struct buffer_head *bh)
1925{
1926        struct journal_head *jh;
1927
1928        jh = bh2jh(bh);
1929
1930        if (buffer_locked(bh) || buffer_dirty(bh))
1931                goto out;
1932
1933        if (jh->b_next_transaction != NULL || jh->b_transaction != NULL)
1934                goto out;
1935
1936        spin_lock(&journal->j_list_lock);
1937        if (jh->b_cp_transaction != NULL) {
1938                /* written-back checkpointed metadata buffer */
1939                JBUFFER_TRACE(jh, "remove from checkpoint list");
1940                __jbd2_journal_remove_checkpoint(jh);
1941        }
1942        spin_unlock(&journal->j_list_lock);
1943out:
1944        return;
1945}
1946
1947/**
1948 * int jbd2_journal_try_to_free_buffers() - try to free page buffers.
1949 * @journal: journal for operation
1950 * @page: to try and free
1951 * @gfp_mask: we use the mask to detect how hard should we try to release
1952 * buffers. If __GFP_DIRECT_RECLAIM and __GFP_FS is set, we wait for commit
1953 * code to release the buffers.
1954 *
1955 *
1956 * For all the buffers on this page,
1957 * if they are fully written out ordered data, move them onto BUF_CLEAN
1958 * so try_to_free_buffers() can reap them.
1959 *
1960 * This function returns non-zero if we wish try_to_free_buffers()
1961 * to be called. We do this if the page is releasable by try_to_free_buffers().
1962 * We also do it if the page has locked or dirty buffers and the caller wants
1963 * us to perform sync or async writeout.
1964 *
1965 * This complicates JBD locking somewhat.  We aren't protected by the
1966 * BKL here.  We wish to remove the buffer from its committing or
1967 * running transaction's ->t_datalist via __jbd2_journal_unfile_buffer.
1968 *
1969 * This may *change* the value of transaction_t->t_datalist, so anyone
1970 * who looks at t_datalist needs to lock against this function.
1971 *
1972 * Even worse, someone may be doing a jbd2_journal_dirty_data on this
1973 * buffer.  So we need to lock against that.  jbd2_journal_dirty_data()
1974 * will come out of the lock with the buffer dirty, which makes it
1975 * ineligible for release here.
1976 *
1977 * Who else is affected by this?  hmm...  Really the only contender
1978 * is do_get_write_access() - it could be looking at the buffer while
1979 * journal_try_to_free_buffer() is changing its state.  But that
1980 * cannot happen because we never reallocate freed data as metadata
1981 * while the data is part of a transaction.  Yes?
1982 *
1983 * Return 0 on failure, 1 on success
1984 */
1985int jbd2_journal_try_to_free_buffers(journal_t *journal,
1986                                struct page *page, gfp_t gfp_mask)
1987{
1988        struct buffer_head *head;
1989        struct buffer_head *bh;
1990        int ret = 0;
1991
1992        J_ASSERT(PageLocked(page));
1993
1994        head = page_buffers(page);
1995        bh = head;
1996        do {
1997                struct journal_head *jh;
1998
1999                /*
2000                 * We take our own ref against the journal_head here to avoid
2001                 * having to add tons of locking around each instance of
2002                 * jbd2_journal_put_journal_head().
2003                 */
2004                jh = jbd2_journal_grab_journal_head(bh);
2005                if (!jh)
2006                        continue;
2007
2008                jbd_lock_bh_state(bh);
2009                __journal_try_to_free_buffer(journal, bh);
2010                jbd2_journal_put_journal_head(jh);
2011                jbd_unlock_bh_state(bh);
2012                if (buffer_jbd(bh))
2013                        goto busy;
2014        } while ((bh = bh->b_this_page) != head);
2015
2016        ret = try_to_free_buffers(page);
2017
2018busy:
2019        return ret;
2020}
2021
2022/*
2023 * This buffer is no longer needed.  If it is on an older transaction's
2024 * checkpoint list we need to record it on this transaction's forget list
2025 * to pin this buffer (and hence its checkpointing transaction) down until
2026 * this transaction commits.  If the buffer isn't on a checkpoint list, we
2027 * release it.
2028 * Returns non-zero if JBD no longer has an interest in the buffer.
2029 *
2030 * Called under j_list_lock.
2031 *
2032 * Called under jbd_lock_bh_state(bh).
2033 */
2034static int __dispose_buffer(struct journal_head *jh, transaction_t *transaction)
2035{
2036        int may_free = 1;
2037        struct buffer_head *bh = jh2bh(jh);
2038
2039        if (jh->b_cp_transaction) {
2040                JBUFFER_TRACE(jh, "on running+cp transaction");
2041                __jbd2_journal_temp_unlink_buffer(jh);
2042                /*
2043                 * We don't want to write the buffer anymore, clear the
2044                 * bit so that we don't confuse checks in
2045                 * __journal_file_buffer
2046                 */
2047                clear_buffer_dirty(bh);
2048                __jbd2_journal_file_buffer(jh, transaction, BJ_Forget);
2049                may_free = 0;
2050        } else {
2051                JBUFFER_TRACE(jh, "on running transaction");
2052                __jbd2_journal_unfile_buffer(jh);
2053        }
2054        return may_free;
2055}
2056
2057/*
2058 * jbd2_journal_invalidatepage
2059 *
2060 * This code is tricky.  It has a number of cases to deal with.
2061 *
2062 * There are two invariants which this code relies on:
2063 *
2064 * i_size must be updated on disk before we start calling invalidatepage on the
2065 * data.
2066 *
2067 *  This is done in ext3 by defining an ext3_setattr method which
2068 *  updates i_size before truncate gets going.  By maintaining this
2069 *  invariant, we can be sure that it is safe to throw away any buffers
2070 *  attached to the current transaction: once the transaction commits,
2071 *  we know that the data will not be needed.
2072 *
2073 *  Note however that we can *not* throw away data belonging to the
2074 *  previous, committing transaction!
2075 *
2076 * Any disk blocks which *are* part of the previous, committing
2077 * transaction (and which therefore cannot be discarded immediately) are
2078 * not going to be reused in the new running transaction
2079 *
2080 *  The bitmap committed_data images guarantee this: any block which is
2081 *  allocated in one transaction and removed in the next will be marked
2082 *  as in-use in the committed_data bitmap, so cannot be reused until
2083 *  the next transaction to delete the block commits.  This means that
2084 *  leaving committing buffers dirty is quite safe: the disk blocks
2085 *  cannot be reallocated to a different file and so buffer aliasing is
2086 *  not possible.
2087 *
2088 *
2089 * The above applies mainly to ordered data mode.  In writeback mode we
2090 * don't make guarantees about the order in which data hits disk --- in
2091 * particular we don't guarantee that new dirty data is flushed before
2092 * transaction commit --- so it is always safe just to discard data
2093 * immediately in that mode.  --sct
2094 */
2095
2096/*
2097 * The journal_unmap_buffer helper function returns zero if the buffer
2098 * concerned remains pinned as an anonymous buffer belonging to an older
2099 * transaction.
2100 *
2101 * We're outside-transaction here.  Either or both of j_running_transaction
2102 * and j_committing_transaction may be NULL.
2103 */
2104static int journal_unmap_buffer(journal_t *journal, struct buffer_head *bh,
2105                                int partial_page)
2106{
2107        transaction_t *transaction;
2108        struct journal_head *jh;
2109        int may_free = 1;
2110
2111        BUFFER_TRACE(bh, "entry");
2112
2113        /*
2114         * It is safe to proceed here without the j_list_lock because the
2115         * buffers cannot be stolen by try_to_free_buffers as long as we are
2116         * holding the page lock. --sct
2117         */
2118
2119        if (!buffer_jbd(bh))
2120                goto zap_buffer_unlocked;
2121
2122        /* OK, we have data buffer in journaled mode */
2123        write_lock(&journal->j_state_lock);
2124        jbd_lock_bh_state(bh);
2125        spin_lock(&journal->j_list_lock);
2126
2127        jh = jbd2_journal_grab_journal_head(bh);
2128        if (!jh)
2129                goto zap_buffer_no_jh;
2130
2131        /*
2132         * We cannot remove the buffer from checkpoint lists until the
2133         * transaction adding inode to orphan list (let's call it T)
2134         * is committed.  Otherwise if the transaction changing the
2135         * buffer would be cleaned from the journal before T is
2136         * committed, a crash will cause that the correct contents of
2137         * the buffer will be lost.  On the other hand we have to
2138         * clear the buffer dirty bit at latest at the moment when the
2139         * transaction marking the buffer as freed in the filesystem
2140         * structures is committed because from that moment on the
2141         * block can be reallocated and used by a different page.
2142         * Since the block hasn't been freed yet but the inode has
2143         * already been added to orphan list, it is safe for us to add
2144         * the buffer to BJ_Forget list of the newest transaction.
2145         *
2146         * Also we have to clear buffer_mapped flag of a truncated buffer
2147         * because the buffer_head may be attached to the page straddling
2148         * i_size (can happen only when blocksize < pagesize) and thus the
2149         * buffer_head can be reused when the file is extended again. So we end
2150         * up keeping around invalidated buffers attached to transactions'
2151         * BJ_Forget list just to stop checkpointing code from cleaning up
2152         * the transaction this buffer was modified in.
2153         */
2154        transaction = jh->b_transaction;
2155        if (transaction == NULL) {
2156                /* First case: not on any transaction.  If it
2157                 * has no checkpoint link, then we can zap it:
2158                 * it's a writeback-mode buffer so we don't care
2159                 * if it hits disk safely. */
2160                if (!jh->b_cp_transaction) {
2161                        JBUFFER_TRACE(jh, "not on any transaction: zap");
2162                        goto zap_buffer;
2163                }
2164
2165                if (!buffer_dirty(bh)) {
2166                        /* bdflush has written it.  We can drop it now */
2167                        __jbd2_journal_remove_checkpoint(jh);
2168                        goto zap_buffer;
2169                }
2170
2171                /* OK, it must be in the journal but still not
2172                 * written fully to disk: it's metadata or
2173                 * journaled data... */
2174
2175                if (journal->j_running_transaction) {
2176                        /* ... and once the current transaction has
2177                         * committed, the buffer won't be needed any
2178                         * longer. */
2179                        JBUFFER_TRACE(jh, "checkpointed: add to BJ_Forget");
2180                        may_free = __dispose_buffer(jh,
2181                                        journal->j_running_transaction);
2182                        goto zap_buffer;
2183                } else {
2184                        /* There is no currently-running transaction. So the
2185                         * orphan record which we wrote for this file must have
2186                         * passed into commit.  We must attach this buffer to
2187                         * the committing transaction, if it exists. */
2188                        if (journal->j_committing_transaction) {
2189                                JBUFFER_TRACE(jh, "give to committing trans");
2190                                may_free = __dispose_buffer(jh,
2191                                        journal->j_committing_transaction);
2192                                goto zap_buffer;
2193                        } else {
2194                                /* The orphan record's transaction has
2195                                 * committed.  We can cleanse this buffer */
2196                                clear_buffer_jbddirty(bh);
2197                                __jbd2_journal_remove_checkpoint(jh);
2198                                goto zap_buffer;
2199                        }
2200                }
2201        } else if (transaction == journal->j_committing_transaction) {
2202                JBUFFER_TRACE(jh, "on committing transaction");
2203                /*
2204                 * The buffer is committing, we simply cannot touch
2205                 * it. If the page is straddling i_size we have to wait
2206                 * for commit and try again.
2207                 */
2208                if (partial_page) {
2209                        jbd2_journal_put_journal_head(jh);
2210                        spin_unlock(&journal->j_list_lock);
2211                        jbd_unlock_bh_state(bh);
2212                        write_unlock(&journal->j_state_lock);
2213                        return -EBUSY;
2214                }
2215                /*
2216                 * OK, buffer won't be reachable after truncate. We just set
2217                 * j_next_transaction to the running transaction (if there is
2218                 * one) and mark buffer as freed so that commit code knows it
2219                 * should clear dirty bits when it is done with the buffer.
2220                 */
2221                set_buffer_freed(bh);
2222                if (journal->j_running_transaction && buffer_jbddirty(bh))
2223                        jh->b_next_transaction = journal->j_running_transaction;
2224                jbd2_journal_put_journal_head(jh);
2225                spin_unlock(&journal->j_list_lock);
2226                jbd_unlock_bh_state(bh);
2227                write_unlock(&journal->j_state_lock);
2228                return 0;
2229        } else {
2230                /* Good, the buffer belongs to the running transaction.
2231                 * We are writing our own transaction's data, not any
2232                 * previous one's, so it is safe to throw it away
2233                 * (remember that we expect the filesystem to have set
2234                 * i_size already for this truncate so recovery will not
2235                 * expose the disk blocks we are discarding here.) */
2236                J_ASSERT_JH(jh, transaction == journal->j_running_transaction);
2237                JBUFFER_TRACE(jh, "on running transaction");
2238                may_free = __dispose_buffer(jh, transaction);
2239        }
2240
2241zap_buffer:
2242        /*
2243         * This is tricky. Although the buffer is truncated, it may be reused
2244         * if blocksize < pagesize and it is attached to the page straddling
2245         * EOF. Since the buffer might have been added to BJ_Forget list of the
2246         * running transaction, journal_get_write_access() won't clear
2247         * b_modified and credit accounting gets confused. So clear b_modified
2248         * here.
2249         */
2250        jh->b_modified = 0;
2251        jbd2_journal_put_journal_head(jh);
2252zap_buffer_no_jh:
2253        spin_unlock(&journal->j_list_lock);
2254        jbd_unlock_bh_state(bh);
2255        write_unlock(&journal->j_state_lock);
2256zap_buffer_unlocked:
2257        clear_buffer_dirty(bh);
2258        J_ASSERT_BH(bh, !buffer_jbddirty(bh));
2259        clear_buffer_mapped(bh);
2260        clear_buffer_req(bh);
2261        clear_buffer_new(bh);
2262        clear_buffer_delay(bh);
2263        clear_buffer_unwritten(bh);
2264        bh->b_bdev = NULL;
2265        return may_free;
2266}
2267
2268/**
2269 * void jbd2_journal_invalidatepage()
2270 * @journal: journal to use for flush...
2271 * @page:    page to flush
2272 * @offset:  start of the range to invalidate
2273 * @length:  length of the range to invalidate
2274 *
2275 * Reap page buffers containing data after in the specified range in page.
2276 * Can return -EBUSY if buffers are part of the committing transaction and
2277 * the page is straddling i_size. Caller then has to wait for current commit
2278 * and try again.
2279 */
2280int jbd2_journal_invalidatepage(journal_t *journal,
2281                                struct page *page,
2282                                unsigned int offset,
2283                                unsigned int length)
2284{
2285        struct buffer_head *head, *bh, *next;
2286        unsigned int stop = offset + length;
2287        unsigned int curr_off = 0;
2288        int partial_page = (offset || length < PAGE_SIZE);
2289        int may_free = 1;
2290        int ret = 0;
2291
2292        if (!PageLocked(page))
2293                BUG();
2294        if (!page_has_buffers(page))
2295                return 0;
2296
2297        BUG_ON(stop > PAGE_SIZE || stop < length);
2298
2299        /* We will potentially be playing with lists other than just the
2300         * data lists (especially for journaled data mode), so be
2301         * cautious in our locking. */
2302
2303        head = bh = page_buffers(page);
2304        do {
2305                unsigned int next_off = curr_off + bh->b_size;
2306                next = bh->b_this_page;
2307
2308                if (next_off > stop)
2309                        return 0;
2310
2311                if (offset <= curr_off) {
2312                        /* This block is wholly outside the truncation point */
2313                        lock_buffer(bh);
2314                        ret = journal_unmap_buffer(journal, bh, partial_page);
2315                        unlock_buffer(bh);
2316                        if (ret < 0)
2317                                return ret;
2318                        may_free &= ret;
2319                }
2320                curr_off = next_off;
2321                bh = next;
2322
2323        } while (bh != head);
2324
2325        if (!partial_page) {
2326                if (may_free && try_to_free_buffers(page))
2327                        J_ASSERT(!page_has_buffers(page));
2328        }
2329        return 0;
2330}
2331
2332/*
2333 * File a buffer on the given transaction list.
2334 */
2335void __jbd2_journal_file_buffer(struct journal_head *jh,
2336                        transaction_t *transaction, int jlist)
2337{
2338        struct journal_head **list = NULL;
2339        int was_dirty = 0;
2340        struct buffer_head *bh = jh2bh(jh);
2341
2342        J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh));
2343        assert_spin_locked(&transaction->t_journal->j_list_lock);
2344
2345        J_ASSERT_JH(jh, jh->b_jlist < BJ_Types);
2346        J_ASSERT_JH(jh, jh->b_transaction == transaction ||
2347                                jh->b_transaction == NULL);
2348
2349        if (jh->b_transaction && jh->b_jlist == jlist)
2350                return;
2351
2352        if (jlist == BJ_Metadata || jlist == BJ_Reserved ||
2353            jlist == BJ_Shadow || jlist == BJ_Forget) {
2354                /*
2355                 * For metadata buffers, we track dirty bit in buffer_jbddirty
2356                 * instead of buffer_dirty. We should not see a dirty bit set
2357                 * here because we clear it in do_get_write_access but e.g.
2358                 * tune2fs can modify the sb and set the dirty bit at any time
2359                 * so we try to gracefully handle that.
2360                 */
2361                if (buffer_dirty(bh))
2362                        warn_dirty_buffer(bh);
2363                if (test_clear_buffer_dirty(bh) ||
2364                    test_clear_buffer_jbddirty(bh))
2365                        was_dirty = 1;
2366        }
2367
2368        if (jh->b_transaction)
2369                __jbd2_journal_temp_unlink_buffer(jh);
2370        else
2371                jbd2_journal_grab_journal_head(bh);
2372        jh->b_transaction = transaction;
2373
2374        switch (jlist) {
2375        case BJ_None:
2376                J_ASSERT_JH(jh, !jh->b_committed_data);
2377                J_ASSERT_JH(jh, !jh->b_frozen_data);
2378                return;
2379        case BJ_Metadata:
2380                transaction->t_nr_buffers++;
2381                list = &transaction->t_buffers;
2382                break;
2383        case BJ_Forget:
2384                list = &transaction->t_forget;
2385                break;
2386        case BJ_Shadow:
2387                list = &transaction->t_shadow_list;
2388                break;
2389        case BJ_Reserved:
2390                list = &transaction->t_reserved_list;
2391                break;
2392        }
2393
2394        __blist_add_buffer(list, jh);
2395        jh->b_jlist = jlist;
2396
2397        if (was_dirty)
2398                set_buffer_jbddirty(bh);
2399}
2400
2401void jbd2_journal_file_buffer(struct journal_head *jh,
2402                                transaction_t *transaction, int jlist)
2403{
2404        jbd_lock_bh_state(jh2bh(jh));
2405        spin_lock(&transaction->t_journal->j_list_lock);
2406        __jbd2_journal_file_buffer(jh, transaction, jlist);
2407        spin_unlock(&transaction->t_journal->j_list_lock);
2408        jbd_unlock_bh_state(jh2bh(jh));
2409}
2410
2411/*
2412 * Remove a buffer from its current buffer list in preparation for
2413 * dropping it from its current transaction entirely.  If the buffer has
2414 * already started to be used by a subsequent transaction, refile the
2415 * buffer on that transaction's metadata list.
2416 *
2417 * Called under j_list_lock
2418 * Called under jbd_lock_bh_state(jh2bh(jh))
2419 *
2420 * jh and bh may be already free when this function returns
2421 */
2422void __jbd2_journal_refile_buffer(struct journal_head *jh)
2423{
2424        int was_dirty, jlist;
2425        struct buffer_head *bh = jh2bh(jh);
2426
2427        J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh));
2428        if (jh->b_transaction)
2429                assert_spin_locked(&jh->b_transaction->t_journal->j_list_lock);
2430
2431        /* If the buffer is now unused, just drop it. */
2432        if (jh->b_next_transaction == NULL) {
2433                __jbd2_journal_unfile_buffer(jh);
2434                return;
2435        }
2436
2437        /*
2438         * It has been modified by a later transaction: add it to the new
2439         * transaction's metadata list.
2440         */
2441
2442        was_dirty = test_clear_buffer_jbddirty(bh);
2443        __jbd2_journal_temp_unlink_buffer(jh);
2444        /*
2445         * We set b_transaction here because b_next_transaction will inherit
2446         * our jh reference and thus __jbd2_journal_file_buffer() must not
2447         * take a new one.
2448         */
2449        jh->b_transaction = jh->b_next_transaction;
2450        jh->b_next_transaction = NULL;
2451        if (buffer_freed(bh))
2452                jlist = BJ_Forget;
2453        else if (jh->b_modified)
2454                jlist = BJ_Metadata;
2455        else
2456                jlist = BJ_Reserved;
2457        __jbd2_journal_file_buffer(jh, jh->b_transaction, jlist);
2458        J_ASSERT_JH(jh, jh->b_transaction->t_state == T_RUNNING);
2459
2460        if (was_dirty)
2461                set_buffer_jbddirty(bh);
2462}
2463
2464/*
2465 * __jbd2_journal_refile_buffer() with necessary locking added. We take our
2466 * bh reference so that we can safely unlock bh.
2467 *
2468 * The jh and bh may be freed by this call.
2469 */
2470void jbd2_journal_refile_buffer(journal_t *journal, struct journal_head *jh)
2471{
2472        struct buffer_head *bh = jh2bh(jh);
2473
2474        /* Get reference so that buffer cannot be freed before we unlock it */
2475        get_bh(bh);
2476        jbd_lock_bh_state(bh);
2477        spin_lock(&journal->j_list_lock);
2478        __jbd2_journal_refile_buffer(jh);
2479        jbd_unlock_bh_state(bh);
2480        spin_unlock(&journal->j_list_lock);
2481        __brelse(bh);
2482}
2483
2484/*
2485 * File inode in the inode list of the handle's transaction
2486 */
2487static int jbd2_journal_file_inode(handle_t *handle, struct jbd2_inode *jinode,
2488                                   unsigned long flags)
2489{
2490        transaction_t *transaction = handle->h_transaction;
2491        journal_t *journal;
2492
2493        if (is_handle_aborted(handle))
2494                return -EROFS;
2495        journal = transaction->t_journal;
2496
2497        jbd_debug(4, "Adding inode %lu, tid:%d\n", jinode->i_vfs_inode->i_ino,
2498                        transaction->t_tid);
2499
2500        /*
2501         * First check whether inode isn't already on the transaction's
2502         * lists without taking the lock. Note that this check is safe
2503         * without the lock as we cannot race with somebody removing inode
2504         * from the transaction. The reason is that we remove inode from the
2505         * transaction only in journal_release_jbd_inode() and when we commit
2506         * the transaction. We are guarded from the first case by holding
2507         * a reference to the inode. We are safe against the second case
2508         * because if jinode->i_transaction == transaction, commit code
2509         * cannot touch the transaction because we hold reference to it,
2510         * and if jinode->i_next_transaction == transaction, commit code
2511         * will only file the inode where we want it.
2512         */
2513        if ((jinode->i_transaction == transaction ||
2514            jinode->i_next_transaction == transaction) &&
2515            (jinode->i_flags & flags) == flags)
2516                return 0;
2517
2518        spin_lock(&journal->j_list_lock);
2519        jinode->i_flags |= flags;
2520        /* Is inode already attached where we need it? */
2521        if (jinode->i_transaction == transaction ||
2522            jinode->i_next_transaction == transaction)
2523                goto done;
2524
2525        /*
2526         * We only ever set this variable to 1 so the test is safe. Since
2527         * t_need_data_flush is likely to be set, we do the test to save some
2528         * cacheline bouncing
2529         */
2530        if (!transaction->t_need_data_flush)
2531                transaction->t_need_data_flush = 1;
2532        /* On some different transaction's list - should be
2533         * the committing one */
2534        if (jinode->i_transaction) {
2535                J_ASSERT(jinode->i_next_transaction == NULL);
2536                J_ASSERT(jinode->i_transaction ==
2537                                        journal->j_committing_transaction);
2538                jinode->i_next_transaction = transaction;
2539                goto done;
2540        }
2541        /* Not on any transaction list... */
2542        J_ASSERT(!jinode->i_next_transaction);
2543        jinode->i_transaction = transaction;
2544        list_add(&jinode->i_list, &transaction->t_inode_list);
2545done:
2546        spin_unlock(&journal->j_list_lock);
2547
2548        return 0;
2549}
2550
2551int jbd2_journal_inode_add_write(handle_t *handle, struct jbd2_inode *jinode)
2552{
2553        return jbd2_journal_file_inode(handle, jinode,
2554                                       JI_WRITE_DATA | JI_WAIT_DATA);
2555}
2556
2557int jbd2_journal_inode_add_wait(handle_t *handle, struct jbd2_inode *jinode)
2558{
2559        return jbd2_journal_file_inode(handle, jinode, JI_WAIT_DATA);
2560}
2561
2562/*
2563 * File truncate and transaction commit interact with each other in a
2564 * non-trivial way.  If a transaction writing data block A is
2565 * committing, we cannot discard the data by truncate until we have
2566 * written them.  Otherwise if we crashed after the transaction with
2567 * write has committed but before the transaction with truncate has
2568 * committed, we could see stale data in block A.  This function is a
2569 * helper to solve this problem.  It starts writeout of the truncated
2570 * part in case it is in the committing transaction.
2571 *
2572 * Filesystem code must call this function when inode is journaled in
2573 * ordered mode before truncation happens and after the inode has been
2574 * placed on orphan list with the new inode size. The second condition
2575 * avoids the race that someone writes new data and we start
2576 * committing the transaction after this function has been called but
2577 * before a transaction for truncate is started (and furthermore it
2578 * allows us to optimize the case where the addition to orphan list
2579 * happens in the same transaction as write --- we don't have to write
2580 * any data in such case).
2581 */
2582int jbd2_journal_begin_ordered_truncate(journal_t *journal,
2583                                        struct jbd2_inode *jinode,
2584                                        loff_t new_size)
2585{
2586        transaction_t *inode_trans, *commit_trans;
2587        int ret = 0;
2588
2589        /* This is a quick check to avoid locking if not necessary */
2590        if (!jinode->i_transaction)
2591                goto out;
2592        /* Locks are here just to force reading of recent values, it is
2593         * enough that the transaction was not committing before we started
2594         * a transaction adding the inode to orphan list */
2595        read_lock(&journal->j_state_lock);
2596        commit_trans = journal->j_committing_transaction;
2597        read_unlock(&journal->j_state_lock);
2598        spin_lock(&journal->j_list_lock);
2599        inode_trans = jinode->i_transaction;
2600        spin_unlock(&journal->j_list_lock);
2601        if (inode_trans == commit_trans) {
2602                ret = filemap_fdatawrite_range(jinode->i_vfs_inode->i_mapping,
2603                        new_size, LLONG_MAX);
2604                if (ret)
2605                        jbd2_journal_abort(journal, ret);
2606        }
2607out:
2608        return ret;
2609}
2610