Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0+
0002 /*
0003  * linux/fs/jbd2/transaction.c
0004  *
0005  * Written by Stephen C. Tweedie <sct@redhat.com>, 1998
0006  *
0007  * Copyright 1998 Red Hat corp --- All Rights Reserved
0008  *
0009  * Generic filesystem transaction handling code; part of the ext2fs
0010  * journaling system.
0011  *
0012  * This file manages transactions (compound commits managed by the
0013  * journaling code) and handles (individual atomic operations by the
0014  * filesystem).
0015  */
0016 
0017 #include <linux/time.h>
0018 #include <linux/fs.h>
0019 #include <linux/jbd2.h>
0020 #include <linux/errno.h>
0021 #include <linux/slab.h>
0022 #include <linux/timer.h>
0023 #include <linux/mm.h>
0024 #include <linux/highmem.h>
0025 #include <linux/hrtimer.h>
0026 #include <linux/backing-dev.h>
0027 #include <linux/bug.h>
0028 #include <linux/module.h>
0029 #include <linux/sched/mm.h>
0030 
0031 #include <trace/events/jbd2.h>
0032 
0033 static void __jbd2_journal_temp_unlink_buffer(struct journal_head *jh);
0034 static void __jbd2_journal_unfile_buffer(struct journal_head *jh);
0035 
0036 static struct kmem_cache *transaction_cache;
0037 int __init jbd2_journal_init_transaction_cache(void)
0038 {
0039     J_ASSERT(!transaction_cache);
0040     transaction_cache = kmem_cache_create("jbd2_transaction_s",
0041                     sizeof(transaction_t),
0042                     0,
0043                     SLAB_HWCACHE_ALIGN|SLAB_TEMPORARY,
0044                     NULL);
0045     if (!transaction_cache) {
0046         pr_emerg("JBD2: failed to create transaction cache\n");
0047         return -ENOMEM;
0048     }
0049     return 0;
0050 }
0051 
0052 void jbd2_journal_destroy_transaction_cache(void)
0053 {
0054     kmem_cache_destroy(transaction_cache);
0055     transaction_cache = NULL;
0056 }
0057 
0058 void jbd2_journal_free_transaction(transaction_t *transaction)
0059 {
0060     if (unlikely(ZERO_OR_NULL_PTR(transaction)))
0061         return;
0062     kmem_cache_free(transaction_cache, transaction);
0063 }
0064 
0065 /*
0066  * Base amount of descriptor blocks we reserve for each transaction.
0067  */
0068 static int jbd2_descriptor_blocks_per_trans(journal_t *journal)
0069 {
0070     int tag_space = journal->j_blocksize - sizeof(journal_header_t);
0071     int tags_per_block;
0072 
0073     /* Subtract UUID */
0074     tag_space -= 16;
0075     if (jbd2_journal_has_csum_v2or3(journal))
0076         tag_space -= sizeof(struct jbd2_journal_block_tail);
0077     /* Commit code leaves a slack space of 16 bytes at the end of block */
0078     tags_per_block = (tag_space - 16) / journal_tag_bytes(journal);
0079     /*
0080      * Revoke descriptors are accounted separately so we need to reserve
0081      * space for commit block and normal transaction descriptor blocks.
0082      */
0083     return 1 + DIV_ROUND_UP(journal->j_max_transaction_buffers,
0084                 tags_per_block);
0085 }
0086 
0087 /*
0088  * jbd2_get_transaction: obtain a new transaction_t object.
0089  *
0090  * Simply initialise a new transaction. Initialize it in
0091  * RUNNING state and add it to the current journal (which should not
0092  * have an existing running transaction: we only make a new transaction
0093  * once we have started to commit the old one).
0094  *
0095  * Preconditions:
0096  *  The journal MUST be locked.  We don't perform atomic mallocs on the
0097  *  new transaction and we can't block without protecting against other
0098  *  processes trying to touch the journal while it is in transition.
0099  *
0100  */
0101 
0102 static void jbd2_get_transaction(journal_t *journal,
0103                 transaction_t *transaction)
0104 {
0105     transaction->t_journal = journal;
0106     transaction->t_state = T_RUNNING;
0107     transaction->t_start_time = ktime_get();
0108     transaction->t_tid = journal->j_transaction_sequence++;
0109     transaction->t_expires = jiffies + journal->j_commit_interval;
0110     atomic_set(&transaction->t_updates, 0);
0111     atomic_set(&transaction->t_outstanding_credits,
0112            jbd2_descriptor_blocks_per_trans(journal) +
0113            atomic_read(&journal->j_reserved_credits));
0114     atomic_set(&transaction->t_outstanding_revokes, 0);
0115     atomic_set(&transaction->t_handle_count, 0);
0116     INIT_LIST_HEAD(&transaction->t_inode_list);
0117     INIT_LIST_HEAD(&transaction->t_private_list);
0118 
0119     /* Set up the commit timer for the new transaction. */
0120     journal->j_commit_timer.expires = round_jiffies_up(transaction->t_expires);
0121     add_timer(&journal->j_commit_timer);
0122 
0123     J_ASSERT(journal->j_running_transaction == NULL);
0124     journal->j_running_transaction = transaction;
0125     transaction->t_max_wait = 0;
0126     transaction->t_start = jiffies;
0127     transaction->t_requested = 0;
0128 }
0129 
0130 /*
0131  * Handle management.
0132  *
0133  * A handle_t is an object which represents a single atomic update to a
0134  * filesystem, and which tracks all of the modifications which form part
0135  * of that one update.
0136  */
0137 
0138 /*
0139  * Update transaction's maximum wait time, if debugging is enabled.
0140  *
0141  * t_max_wait is carefully updated here with use of atomic compare exchange.
0142  * Note that there could be multiplre threads trying to do this simultaneously
0143  * hence using cmpxchg to avoid any use of locks in this case.
0144  * With this t_max_wait can be updated w/o enabling jbd2_journal_enable_debug.
0145  */
0146 static inline void update_t_max_wait(transaction_t *transaction,
0147                      unsigned long ts)
0148 {
0149     unsigned long oldts, newts;
0150 
0151     if (time_after(transaction->t_start, ts)) {
0152         newts = jbd2_time_diff(ts, transaction->t_start);
0153         oldts = READ_ONCE(transaction->t_max_wait);
0154         while (oldts < newts)
0155             oldts = cmpxchg(&transaction->t_max_wait, oldts, newts);
0156     }
0157 }
0158 
0159 /*
0160  * Wait until running transaction passes to T_FLUSH state and new transaction
0161  * can thus be started. Also starts the commit if needed. The function expects
0162  * running transaction to exist and releases j_state_lock.
0163  */
0164 static void wait_transaction_locked(journal_t *journal)
0165     __releases(journal->j_state_lock)
0166 {
0167     DEFINE_WAIT(wait);
0168     int need_to_start;
0169     tid_t tid = journal->j_running_transaction->t_tid;
0170 
0171     prepare_to_wait(&journal->j_wait_transaction_locked, &wait,
0172             TASK_UNINTERRUPTIBLE);
0173     need_to_start = !tid_geq(journal->j_commit_request, tid);
0174     read_unlock(&journal->j_state_lock);
0175     if (need_to_start)
0176         jbd2_log_start_commit(journal, tid);
0177     jbd2_might_wait_for_commit(journal);
0178     schedule();
0179     finish_wait(&journal->j_wait_transaction_locked, &wait);
0180 }
0181 
0182 /*
0183  * Wait until running transaction transitions from T_SWITCH to T_FLUSH
0184  * state and new transaction can thus be started. The function releases
0185  * j_state_lock.
0186  */
0187 static void wait_transaction_switching(journal_t *journal)
0188     __releases(journal->j_state_lock)
0189 {
0190     DEFINE_WAIT(wait);
0191 
0192     if (WARN_ON(!journal->j_running_transaction ||
0193             journal->j_running_transaction->t_state != T_SWITCH)) {
0194         read_unlock(&journal->j_state_lock);
0195         return;
0196     }
0197     prepare_to_wait(&journal->j_wait_transaction_locked, &wait,
0198             TASK_UNINTERRUPTIBLE);
0199     read_unlock(&journal->j_state_lock);
0200     /*
0201      * We don't call jbd2_might_wait_for_commit() here as there's no
0202      * waiting for outstanding handles happening anymore in T_SWITCH state
0203      * and handling of reserved handles actually relies on that for
0204      * correctness.
0205      */
0206     schedule();
0207     finish_wait(&journal->j_wait_transaction_locked, &wait);
0208 }
0209 
0210 static void sub_reserved_credits(journal_t *journal, int blocks)
0211 {
0212     atomic_sub(blocks, &journal->j_reserved_credits);
0213     wake_up(&journal->j_wait_reserved);
0214 }
0215 
0216 /*
0217  * Wait until we can add credits for handle to the running transaction.  Called
0218  * with j_state_lock held for reading. Returns 0 if handle joined the running
0219  * transaction. Returns 1 if we had to wait, j_state_lock is dropped, and
0220  * caller must retry.
0221  *
0222  * Note: because j_state_lock may be dropped depending on the return
0223  * value, we need to fake out sparse so ti doesn't complain about a
0224  * locking imbalance.  Callers of add_transaction_credits will need to
0225  * make a similar accomodation.
0226  */
0227 static int add_transaction_credits(journal_t *journal, int blocks,
0228                    int rsv_blocks)
0229 __must_hold(&journal->j_state_lock)
0230 {
0231     transaction_t *t = journal->j_running_transaction;
0232     int needed;
0233     int total = blocks + rsv_blocks;
0234 
0235     /*
0236      * If the current transaction is locked down for commit, wait
0237      * for the lock to be released.
0238      */
0239     if (t->t_state != T_RUNNING) {
0240         WARN_ON_ONCE(t->t_state >= T_FLUSH);
0241         wait_transaction_locked(journal);
0242         __acquire(&journal->j_state_lock); /* fake out sparse */
0243         return 1;
0244     }
0245 
0246     /*
0247      * If there is not enough space left in the log to write all
0248      * potential buffers requested by this operation, we need to
0249      * stall pending a log checkpoint to free some more log space.
0250      */
0251     needed = atomic_add_return(total, &t->t_outstanding_credits);
0252     if (needed > journal->j_max_transaction_buffers) {
0253         /*
0254          * If the current transaction is already too large,
0255          * then start to commit it: we can then go back and
0256          * attach this handle to a new transaction.
0257          */
0258         atomic_sub(total, &t->t_outstanding_credits);
0259 
0260         /*
0261          * Is the number of reserved credits in the current transaction too
0262          * big to fit this handle? Wait until reserved credits are freed.
0263          */
0264         if (atomic_read(&journal->j_reserved_credits) + total >
0265             journal->j_max_transaction_buffers) {
0266             read_unlock(&journal->j_state_lock);
0267             jbd2_might_wait_for_commit(journal);
0268             wait_event(journal->j_wait_reserved,
0269                    atomic_read(&journal->j_reserved_credits) + total <=
0270                    journal->j_max_transaction_buffers);
0271             __acquire(&journal->j_state_lock); /* fake out sparse */
0272             return 1;
0273         }
0274 
0275         wait_transaction_locked(journal);
0276         __acquire(&journal->j_state_lock); /* fake out sparse */
0277         return 1;
0278     }
0279 
0280     /*
0281      * The commit code assumes that it can get enough log space
0282      * without forcing a checkpoint.  This is *critical* for
0283      * correctness: a checkpoint of a buffer which is also
0284      * associated with a committing transaction creates a deadlock,
0285      * so commit simply cannot force through checkpoints.
0286      *
0287      * We must therefore ensure the necessary space in the journal
0288      * *before* starting to dirty potentially checkpointed buffers
0289      * in the new transaction.
0290      */
0291     if (jbd2_log_space_left(journal) < journal->j_max_transaction_buffers) {
0292         atomic_sub(total, &t->t_outstanding_credits);
0293         read_unlock(&journal->j_state_lock);
0294         jbd2_might_wait_for_commit(journal);
0295         write_lock(&journal->j_state_lock);
0296         if (jbd2_log_space_left(journal) <
0297                     journal->j_max_transaction_buffers)
0298             __jbd2_log_wait_for_space(journal);
0299         write_unlock(&journal->j_state_lock);
0300         __acquire(&journal->j_state_lock); /* fake out sparse */
0301         return 1;
0302     }
0303 
0304     /* No reservation? We are done... */
0305     if (!rsv_blocks)
0306         return 0;
0307 
0308     needed = atomic_add_return(rsv_blocks, &journal->j_reserved_credits);
0309     /* We allow at most half of a transaction to be reserved */
0310     if (needed > journal->j_max_transaction_buffers / 2) {
0311         sub_reserved_credits(journal, rsv_blocks);
0312         atomic_sub(total, &t->t_outstanding_credits);
0313         read_unlock(&journal->j_state_lock);
0314         jbd2_might_wait_for_commit(journal);
0315         wait_event(journal->j_wait_reserved,
0316              atomic_read(&journal->j_reserved_credits) + rsv_blocks
0317              <= journal->j_max_transaction_buffers / 2);
0318         __acquire(&journal->j_state_lock); /* fake out sparse */
0319         return 1;
0320     }
0321     return 0;
0322 }
0323 
0324 /*
0325  * start_this_handle: Given a handle, deal with any locking or stalling
0326  * needed to make sure that there is enough journal space for the handle
0327  * to begin.  Attach the handle to a transaction and set up the
0328  * transaction's buffer credits.
0329  */
0330 
0331 static int start_this_handle(journal_t *journal, handle_t *handle,
0332                  gfp_t gfp_mask)
0333 {
0334     transaction_t   *transaction, *new_transaction = NULL;
0335     int     blocks = handle->h_total_credits;
0336     int     rsv_blocks = 0;
0337     unsigned long ts = jiffies;
0338 
0339     if (handle->h_rsv_handle)
0340         rsv_blocks = handle->h_rsv_handle->h_total_credits;
0341 
0342     /*
0343      * Limit the number of reserved credits to 1/2 of maximum transaction
0344      * size and limit the number of total credits to not exceed maximum
0345      * transaction size per operation.
0346      */
0347     if ((rsv_blocks > journal->j_max_transaction_buffers / 2) ||
0348         (rsv_blocks + blocks > journal->j_max_transaction_buffers)) {
0349         printk(KERN_ERR "JBD2: %s wants too many credits "
0350                "credits:%d rsv_credits:%d max:%d\n",
0351                current->comm, blocks, rsv_blocks,
0352                journal->j_max_transaction_buffers);
0353         WARN_ON(1);
0354         return -ENOSPC;
0355     }
0356 
0357 alloc_transaction:
0358     /*
0359      * This check is racy but it is just an optimization of allocating new
0360      * transaction early if there are high chances we'll need it. If we
0361      * guess wrong, we'll retry or free unused transaction.
0362      */
0363     if (!data_race(journal->j_running_transaction)) {
0364         /*
0365          * If __GFP_FS is not present, then we may be being called from
0366          * inside the fs writeback layer, so we MUST NOT fail.
0367          */
0368         if ((gfp_mask & __GFP_FS) == 0)
0369             gfp_mask |= __GFP_NOFAIL;
0370         new_transaction = kmem_cache_zalloc(transaction_cache,
0371                             gfp_mask);
0372         if (!new_transaction)
0373             return -ENOMEM;
0374     }
0375 
0376     jbd2_debug(3, "New handle %p going live.\n", handle);
0377 
0378     /*
0379      * We need to hold j_state_lock until t_updates has been incremented,
0380      * for proper journal barrier handling
0381      */
0382 repeat:
0383     read_lock(&journal->j_state_lock);
0384     BUG_ON(journal->j_flags & JBD2_UNMOUNT);
0385     if (is_journal_aborted(journal) ||
0386         (journal->j_errno != 0 && !(journal->j_flags & JBD2_ACK_ERR))) {
0387         read_unlock(&journal->j_state_lock);
0388         jbd2_journal_free_transaction(new_transaction);
0389         return -EROFS;
0390     }
0391 
0392     /*
0393      * Wait on the journal's transaction barrier if necessary. Specifically
0394      * we allow reserved handles to proceed because otherwise commit could
0395      * deadlock on page writeback not being able to complete.
0396      */
0397     if (!handle->h_reserved && journal->j_barrier_count) {
0398         read_unlock(&journal->j_state_lock);
0399         wait_event(journal->j_wait_transaction_locked,
0400                 journal->j_barrier_count == 0);
0401         goto repeat;
0402     }
0403 
0404     if (!journal->j_running_transaction) {
0405         read_unlock(&journal->j_state_lock);
0406         if (!new_transaction)
0407             goto alloc_transaction;
0408         write_lock(&journal->j_state_lock);
0409         if (!journal->j_running_transaction &&
0410             (handle->h_reserved || !journal->j_barrier_count)) {
0411             jbd2_get_transaction(journal, new_transaction);
0412             new_transaction = NULL;
0413         }
0414         write_unlock(&journal->j_state_lock);
0415         goto repeat;
0416     }
0417 
0418     transaction = journal->j_running_transaction;
0419 
0420     if (!handle->h_reserved) {
0421         /* We may have dropped j_state_lock - restart in that case */
0422         if (add_transaction_credits(journal, blocks, rsv_blocks)) {
0423             /*
0424              * add_transaction_credits releases
0425              * j_state_lock on a non-zero return
0426              */
0427             __release(&journal->j_state_lock);
0428             goto repeat;
0429         }
0430     } else {
0431         /*
0432          * We have handle reserved so we are allowed to join T_LOCKED
0433          * transaction and we don't have to check for transaction size
0434          * and journal space. But we still have to wait while running
0435          * transaction is being switched to a committing one as it
0436          * won't wait for any handles anymore.
0437          */
0438         if (transaction->t_state == T_SWITCH) {
0439             wait_transaction_switching(journal);
0440             goto repeat;
0441         }
0442         sub_reserved_credits(journal, blocks);
0443         handle->h_reserved = 0;
0444     }
0445 
0446     /* OK, account for the buffers that this operation expects to
0447      * use and add the handle to the running transaction.
0448      */
0449     update_t_max_wait(transaction, ts);
0450     handle->h_transaction = transaction;
0451     handle->h_requested_credits = blocks;
0452     handle->h_revoke_credits_requested = handle->h_revoke_credits;
0453     handle->h_start_jiffies = jiffies;
0454     atomic_inc(&transaction->t_updates);
0455     atomic_inc(&transaction->t_handle_count);
0456     jbd2_debug(4, "Handle %p given %d credits (total %d, free %lu)\n",
0457           handle, blocks,
0458           atomic_read(&transaction->t_outstanding_credits),
0459           jbd2_log_space_left(journal));
0460     read_unlock(&journal->j_state_lock);
0461     current->journal_info = handle;
0462 
0463     rwsem_acquire_read(&journal->j_trans_commit_map, 0, 0, _THIS_IP_);
0464     jbd2_journal_free_transaction(new_transaction);
0465     /*
0466      * Ensure that no allocations done while the transaction is open are
0467      * going to recurse back to the fs layer.
0468      */
0469     handle->saved_alloc_context = memalloc_nofs_save();
0470     return 0;
0471 }
0472 
0473 /* Allocate a new handle.  This should probably be in a slab... */
0474 static handle_t *new_handle(int nblocks)
0475 {
0476     handle_t *handle = jbd2_alloc_handle(GFP_NOFS);
0477     if (!handle)
0478         return NULL;
0479     handle->h_total_credits = nblocks;
0480     handle->h_ref = 1;
0481 
0482     return handle;
0483 }
0484 
0485 handle_t *jbd2__journal_start(journal_t *journal, int nblocks, int rsv_blocks,
0486                   int revoke_records, gfp_t gfp_mask,
0487                   unsigned int type, unsigned int line_no)
0488 {
0489     handle_t *handle = journal_current_handle();
0490     int err;
0491 
0492     if (!journal)
0493         return ERR_PTR(-EROFS);
0494 
0495     if (handle) {
0496         J_ASSERT(handle->h_transaction->t_journal == journal);
0497         handle->h_ref++;
0498         return handle;
0499     }
0500 
0501     nblocks += DIV_ROUND_UP(revoke_records,
0502                 journal->j_revoke_records_per_block);
0503     handle = new_handle(nblocks);
0504     if (!handle)
0505         return ERR_PTR(-ENOMEM);
0506     if (rsv_blocks) {
0507         handle_t *rsv_handle;
0508 
0509         rsv_handle = new_handle(rsv_blocks);
0510         if (!rsv_handle) {
0511             jbd2_free_handle(handle);
0512             return ERR_PTR(-ENOMEM);
0513         }
0514         rsv_handle->h_reserved = 1;
0515         rsv_handle->h_journal = journal;
0516         handle->h_rsv_handle = rsv_handle;
0517     }
0518     handle->h_revoke_credits = revoke_records;
0519 
0520     err = start_this_handle(journal, handle, gfp_mask);
0521     if (err < 0) {
0522         if (handle->h_rsv_handle)
0523             jbd2_free_handle(handle->h_rsv_handle);
0524         jbd2_free_handle(handle);
0525         return ERR_PTR(err);
0526     }
0527     handle->h_type = type;
0528     handle->h_line_no = line_no;
0529     trace_jbd2_handle_start(journal->j_fs_dev->bd_dev,
0530                 handle->h_transaction->t_tid, type,
0531                 line_no, nblocks);
0532 
0533     return handle;
0534 }
0535 EXPORT_SYMBOL(jbd2__journal_start);
0536 
0537 
0538 /**
0539  * jbd2_journal_start() - Obtain a new handle.
0540  * @journal: Journal to start transaction on.
0541  * @nblocks: number of block buffer we might modify
0542  *
0543  * We make sure that the transaction can guarantee at least nblocks of
0544  * modified buffers in the log.  We block until the log can guarantee
0545  * that much space. Additionally, if rsv_blocks > 0, we also create another
0546  * handle with rsv_blocks reserved blocks in the journal. This handle is
0547  * stored in h_rsv_handle. It is not attached to any particular transaction
0548  * and thus doesn't block transaction commit. If the caller uses this reserved
0549  * handle, it has to set h_rsv_handle to NULL as otherwise jbd2_journal_stop()
0550  * on the parent handle will dispose the reserved one. Reserved handle has to
0551  * be converted to a normal handle using jbd2_journal_start_reserved() before
0552  * it can be used.
0553  *
0554  * Return a pointer to a newly allocated handle, or an ERR_PTR() value
0555  * on failure.
0556  */
0557 handle_t *jbd2_journal_start(journal_t *journal, int nblocks)
0558 {
0559     return jbd2__journal_start(journal, nblocks, 0, 0, GFP_NOFS, 0, 0);
0560 }
0561 EXPORT_SYMBOL(jbd2_journal_start);
0562 
0563 static void __jbd2_journal_unreserve_handle(handle_t *handle, transaction_t *t)
0564 {
0565     journal_t *journal = handle->h_journal;
0566 
0567     WARN_ON(!handle->h_reserved);
0568     sub_reserved_credits(journal, handle->h_total_credits);
0569     if (t)
0570         atomic_sub(handle->h_total_credits, &t->t_outstanding_credits);
0571 }
0572 
0573 void jbd2_journal_free_reserved(handle_t *handle)
0574 {
0575     journal_t *journal = handle->h_journal;
0576 
0577     /* Get j_state_lock to pin running transaction if it exists */
0578     read_lock(&journal->j_state_lock);
0579     __jbd2_journal_unreserve_handle(handle, journal->j_running_transaction);
0580     read_unlock(&journal->j_state_lock);
0581     jbd2_free_handle(handle);
0582 }
0583 EXPORT_SYMBOL(jbd2_journal_free_reserved);
0584 
0585 /**
0586  * jbd2_journal_start_reserved() - start reserved handle
0587  * @handle: handle to start
0588  * @type: for handle statistics
0589  * @line_no: for handle statistics
0590  *
0591  * Start handle that has been previously reserved with jbd2_journal_reserve().
0592  * This attaches @handle to the running transaction (or creates one if there's
0593  * not transaction running). Unlike jbd2_journal_start() this function cannot
0594  * block on journal commit, checkpointing, or similar stuff. It can block on
0595  * memory allocation or frozen journal though.
0596  *
0597  * Return 0 on success, non-zero on error - handle is freed in that case.
0598  */
0599 int jbd2_journal_start_reserved(handle_t *handle, unsigned int type,
0600                 unsigned int line_no)
0601 {
0602     journal_t *journal = handle->h_journal;
0603     int ret = -EIO;
0604 
0605     if (WARN_ON(!handle->h_reserved)) {
0606         /* Someone passed in normal handle? Just stop it. */
0607         jbd2_journal_stop(handle);
0608         return ret;
0609     }
0610     /*
0611      * Usefulness of mixing of reserved and unreserved handles is
0612      * questionable. So far nobody seems to need it so just error out.
0613      */
0614     if (WARN_ON(current->journal_info)) {
0615         jbd2_journal_free_reserved(handle);
0616         return ret;
0617     }
0618 
0619     handle->h_journal = NULL;
0620     /*
0621      * GFP_NOFS is here because callers are likely from writeback or
0622      * similarly constrained call sites
0623      */
0624     ret = start_this_handle(journal, handle, GFP_NOFS);
0625     if (ret < 0) {
0626         handle->h_journal = journal;
0627         jbd2_journal_free_reserved(handle);
0628         return ret;
0629     }
0630     handle->h_type = type;
0631     handle->h_line_no = line_no;
0632     trace_jbd2_handle_start(journal->j_fs_dev->bd_dev,
0633                 handle->h_transaction->t_tid, type,
0634                 line_no, handle->h_total_credits);
0635     return 0;
0636 }
0637 EXPORT_SYMBOL(jbd2_journal_start_reserved);
0638 
0639 /**
0640  * jbd2_journal_extend() - extend buffer credits.
0641  * @handle:  handle to 'extend'
0642  * @nblocks: nr blocks to try to extend by.
0643  * @revoke_records: number of revoke records to try to extend by.
0644  *
0645  * Some transactions, such as large extends and truncates, can be done
0646  * atomically all at once or in several stages.  The operation requests
0647  * a credit for a number of buffer modifications in advance, but can
0648  * extend its credit if it needs more.
0649  *
0650  * jbd2_journal_extend tries to give the running handle more buffer credits.
0651  * It does not guarantee that allocation - this is a best-effort only.
0652  * The calling process MUST be able to deal cleanly with a failure to
0653  * extend here.
0654  *
0655  * Return 0 on success, non-zero on failure.
0656  *
0657  * return code < 0 implies an error
0658  * return code > 0 implies normal transaction-full status.
0659  */
0660 int jbd2_journal_extend(handle_t *handle, int nblocks, int revoke_records)
0661 {
0662     transaction_t *transaction = handle->h_transaction;
0663     journal_t *journal;
0664     int result;
0665     int wanted;
0666 
0667     if (is_handle_aborted(handle))
0668         return -EROFS;
0669     journal = transaction->t_journal;
0670 
0671     result = 1;
0672 
0673     read_lock(&journal->j_state_lock);
0674 
0675     /* Don't extend a locked-down transaction! */
0676     if (transaction->t_state != T_RUNNING) {
0677         jbd2_debug(3, "denied handle %p %d blocks: "
0678               "transaction not running\n", handle, nblocks);
0679         goto error_out;
0680     }
0681 
0682     nblocks += DIV_ROUND_UP(
0683             handle->h_revoke_credits_requested + revoke_records,
0684             journal->j_revoke_records_per_block) -
0685         DIV_ROUND_UP(
0686             handle->h_revoke_credits_requested,
0687             journal->j_revoke_records_per_block);
0688     wanted = atomic_add_return(nblocks,
0689                    &transaction->t_outstanding_credits);
0690 
0691     if (wanted > journal->j_max_transaction_buffers) {
0692         jbd2_debug(3, "denied handle %p %d blocks: "
0693               "transaction too large\n", handle, nblocks);
0694         atomic_sub(nblocks, &transaction->t_outstanding_credits);
0695         goto error_out;
0696     }
0697 
0698     trace_jbd2_handle_extend(journal->j_fs_dev->bd_dev,
0699                  transaction->t_tid,
0700                  handle->h_type, handle->h_line_no,
0701                  handle->h_total_credits,
0702                  nblocks);
0703 
0704     handle->h_total_credits += nblocks;
0705     handle->h_requested_credits += nblocks;
0706     handle->h_revoke_credits += revoke_records;
0707     handle->h_revoke_credits_requested += revoke_records;
0708     result = 0;
0709 
0710     jbd2_debug(3, "extended handle %p by %d\n", handle, nblocks);
0711 error_out:
0712     read_unlock(&journal->j_state_lock);
0713     return result;
0714 }
0715 
0716 static void stop_this_handle(handle_t *handle)
0717 {
0718     transaction_t *transaction = handle->h_transaction;
0719     journal_t *journal = transaction->t_journal;
0720     int revokes;
0721 
0722     J_ASSERT(journal_current_handle() == handle);
0723     J_ASSERT(atomic_read(&transaction->t_updates) > 0);
0724     current->journal_info = NULL;
0725     /*
0726      * Subtract necessary revoke descriptor blocks from handle credits. We
0727      * take care to account only for revoke descriptor blocks the
0728      * transaction will really need as large sequences of transactions with
0729      * small numbers of revokes are relatively common.
0730      */
0731     revokes = handle->h_revoke_credits_requested - handle->h_revoke_credits;
0732     if (revokes) {
0733         int t_revokes, revoke_descriptors;
0734         int rr_per_blk = journal->j_revoke_records_per_block;
0735 
0736         WARN_ON_ONCE(DIV_ROUND_UP(revokes, rr_per_blk)
0737                 > handle->h_total_credits);
0738         t_revokes = atomic_add_return(revokes,
0739                 &transaction->t_outstanding_revokes);
0740         revoke_descriptors =
0741             DIV_ROUND_UP(t_revokes, rr_per_blk) -
0742             DIV_ROUND_UP(t_revokes - revokes, rr_per_blk);
0743         handle->h_total_credits -= revoke_descriptors;
0744     }
0745     atomic_sub(handle->h_total_credits,
0746            &transaction->t_outstanding_credits);
0747     if (handle->h_rsv_handle)
0748         __jbd2_journal_unreserve_handle(handle->h_rsv_handle,
0749                         transaction);
0750     if (atomic_dec_and_test(&transaction->t_updates))
0751         wake_up(&journal->j_wait_updates);
0752 
0753     rwsem_release(&journal->j_trans_commit_map, _THIS_IP_);
0754     /*
0755      * Scope of the GFP_NOFS context is over here and so we can restore the
0756      * original alloc context.
0757      */
0758     memalloc_nofs_restore(handle->saved_alloc_context);
0759 }
0760 
0761 /**
0762  * jbd2__journal_restart() - restart a handle .
0763  * @handle:  handle to restart
0764  * @nblocks: nr credits requested
0765  * @revoke_records: number of revoke record credits requested
0766  * @gfp_mask: memory allocation flags (for start_this_handle)
0767  *
0768  * Restart a handle for a multi-transaction filesystem
0769  * operation.
0770  *
0771  * If the jbd2_journal_extend() call above fails to grant new buffer credits
0772  * to a running handle, a call to jbd2_journal_restart will commit the
0773  * handle's transaction so far and reattach the handle to a new
0774  * transaction capable of guaranteeing the requested number of
0775  * credits. We preserve reserved handle if there's any attached to the
0776  * passed in handle.
0777  */
0778 int jbd2__journal_restart(handle_t *handle, int nblocks, int revoke_records,
0779               gfp_t gfp_mask)
0780 {
0781     transaction_t *transaction = handle->h_transaction;
0782     journal_t *journal;
0783     tid_t       tid;
0784     int     need_to_start;
0785     int     ret;
0786 
0787     /* If we've had an abort of any type, don't even think about
0788      * actually doing the restart! */
0789     if (is_handle_aborted(handle))
0790         return 0;
0791     journal = transaction->t_journal;
0792     tid = transaction->t_tid;
0793 
0794     /*
0795      * First unlink the handle from its current transaction, and start the
0796      * commit on that.
0797      */
0798     jbd2_debug(2, "restarting handle %p\n", handle);
0799     stop_this_handle(handle);
0800     handle->h_transaction = NULL;
0801 
0802     /*
0803      * TODO: If we use READ_ONCE / WRITE_ONCE for j_commit_request we can
0804      * get rid of pointless j_state_lock traffic like this.
0805      */
0806     read_lock(&journal->j_state_lock);
0807     need_to_start = !tid_geq(journal->j_commit_request, tid);
0808     read_unlock(&journal->j_state_lock);
0809     if (need_to_start)
0810         jbd2_log_start_commit(journal, tid);
0811     handle->h_total_credits = nblocks +
0812         DIV_ROUND_UP(revoke_records,
0813                  journal->j_revoke_records_per_block);
0814     handle->h_revoke_credits = revoke_records;
0815     ret = start_this_handle(journal, handle, gfp_mask);
0816     trace_jbd2_handle_restart(journal->j_fs_dev->bd_dev,
0817                  ret ? 0 : handle->h_transaction->t_tid,
0818                  handle->h_type, handle->h_line_no,
0819                  handle->h_total_credits);
0820     return ret;
0821 }
0822 EXPORT_SYMBOL(jbd2__journal_restart);
0823 
0824 
0825 int jbd2_journal_restart(handle_t *handle, int nblocks)
0826 {
0827     return jbd2__journal_restart(handle, nblocks, 0, GFP_NOFS);
0828 }
0829 EXPORT_SYMBOL(jbd2_journal_restart);
0830 
0831 /*
0832  * Waits for any outstanding t_updates to finish.
0833  * This is called with write j_state_lock held.
0834  */
0835 void jbd2_journal_wait_updates(journal_t *journal)
0836 {
0837     DEFINE_WAIT(wait);
0838 
0839     while (1) {
0840         /*
0841          * Note that the running transaction can get freed under us if
0842          * this transaction is getting committed in
0843          * jbd2_journal_commit_transaction() ->
0844          * jbd2_journal_free_transaction(). This can only happen when we
0845          * release j_state_lock -> schedule() -> acquire j_state_lock.
0846          * Hence we should everytime retrieve new j_running_transaction
0847          * value (after j_state_lock release acquire cycle), else it may
0848          * lead to use-after-free of old freed transaction.
0849          */
0850         transaction_t *transaction = journal->j_running_transaction;
0851 
0852         if (!transaction)
0853             break;
0854 
0855         prepare_to_wait(&journal->j_wait_updates, &wait,
0856                 TASK_UNINTERRUPTIBLE);
0857         if (!atomic_read(&transaction->t_updates)) {
0858             finish_wait(&journal->j_wait_updates, &wait);
0859             break;
0860         }
0861         write_unlock(&journal->j_state_lock);
0862         schedule();
0863         finish_wait(&journal->j_wait_updates, &wait);
0864         write_lock(&journal->j_state_lock);
0865     }
0866 }
0867 
0868 /**
0869  * jbd2_journal_lock_updates () - establish a transaction barrier.
0870  * @journal:  Journal to establish a barrier on.
0871  *
0872  * This locks out any further updates from being started, and blocks
0873  * until all existing updates have completed, returning only once the
0874  * journal is in a quiescent state with no updates running.
0875  *
0876  * The journal lock should not be held on entry.
0877  */
0878 void jbd2_journal_lock_updates(journal_t *journal)
0879 {
0880     jbd2_might_wait_for_commit(journal);
0881 
0882     write_lock(&journal->j_state_lock);
0883     ++journal->j_barrier_count;
0884 
0885     /* Wait until there are no reserved handles */
0886     if (atomic_read(&journal->j_reserved_credits)) {
0887         write_unlock(&journal->j_state_lock);
0888         wait_event(journal->j_wait_reserved,
0889                atomic_read(&journal->j_reserved_credits) == 0);
0890         write_lock(&journal->j_state_lock);
0891     }
0892 
0893     /* Wait until there are no running t_updates */
0894     jbd2_journal_wait_updates(journal);
0895 
0896     write_unlock(&journal->j_state_lock);
0897 
0898     /*
0899      * We have now established a barrier against other normal updates, but
0900      * we also need to barrier against other jbd2_journal_lock_updates() calls
0901      * to make sure that we serialise special journal-locked operations
0902      * too.
0903      */
0904     mutex_lock(&journal->j_barrier);
0905 }
0906 
0907 /**
0908  * jbd2_journal_unlock_updates () - release barrier
0909  * @journal:  Journal to release the barrier on.
0910  *
0911  * Release a transaction barrier obtained with jbd2_journal_lock_updates().
0912  *
0913  * Should be called without the journal lock held.
0914  */
0915 void jbd2_journal_unlock_updates (journal_t *journal)
0916 {
0917     J_ASSERT(journal->j_barrier_count != 0);
0918 
0919     mutex_unlock(&journal->j_barrier);
0920     write_lock(&journal->j_state_lock);
0921     --journal->j_barrier_count;
0922     write_unlock(&journal->j_state_lock);
0923     wake_up(&journal->j_wait_transaction_locked);
0924 }
0925 
0926 static void warn_dirty_buffer(struct buffer_head *bh)
0927 {
0928     printk(KERN_WARNING
0929            "JBD2: Spotted dirty metadata buffer (dev = %pg, blocknr = %llu). "
0930            "There's a risk of filesystem corruption in case of system "
0931            "crash.\n",
0932            bh->b_bdev, (unsigned long long)bh->b_blocknr);
0933 }
0934 
0935 /* Call t_frozen trigger and copy buffer data into jh->b_frozen_data. */
0936 static void jbd2_freeze_jh_data(struct journal_head *jh)
0937 {
0938     struct page *page;
0939     int offset;
0940     char *source;
0941     struct buffer_head *bh = jh2bh(jh);
0942 
0943     J_EXPECT_JH(jh, buffer_uptodate(bh), "Possible IO failure.\n");
0944     page = bh->b_page;
0945     offset = offset_in_page(bh->b_data);
0946     source = kmap_atomic(page);
0947     /* Fire data frozen trigger just before we copy the data */
0948     jbd2_buffer_frozen_trigger(jh, source + offset, jh->b_triggers);
0949     memcpy(jh->b_frozen_data, source + offset, bh->b_size);
0950     kunmap_atomic(source);
0951 
0952     /*
0953      * Now that the frozen data is saved off, we need to store any matching
0954      * triggers.
0955      */
0956     jh->b_frozen_triggers = jh->b_triggers;
0957 }
0958 
0959 /*
0960  * If the buffer is already part of the current transaction, then there
0961  * is nothing we need to do.  If it is already part of a prior
0962  * transaction which we are still committing to disk, then we need to
0963  * make sure that we do not overwrite the old copy: we do copy-out to
0964  * preserve the copy going to disk.  We also account the buffer against
0965  * the handle's metadata buffer credits (unless the buffer is already
0966  * part of the transaction, that is).
0967  *
0968  */
0969 static int
0970 do_get_write_access(handle_t *handle, struct journal_head *jh,
0971             int force_copy)
0972 {
0973     struct buffer_head *bh;
0974     transaction_t *transaction = handle->h_transaction;
0975     journal_t *journal;
0976     int error;
0977     char *frozen_buffer = NULL;
0978     unsigned long start_lock, time_lock;
0979 
0980     journal = transaction->t_journal;
0981 
0982     jbd2_debug(5, "journal_head %p, force_copy %d\n", jh, force_copy);
0983 
0984     JBUFFER_TRACE(jh, "entry");
0985 repeat:
0986     bh = jh2bh(jh);
0987 
0988     /* @@@ Need to check for errors here at some point. */
0989 
0990     start_lock = jiffies;
0991     lock_buffer(bh);
0992     spin_lock(&jh->b_state_lock);
0993 
0994     /* If it takes too long to lock the buffer, trace it */
0995     time_lock = jbd2_time_diff(start_lock, jiffies);
0996     if (time_lock > HZ/10)
0997         trace_jbd2_lock_buffer_stall(bh->b_bdev->bd_dev,
0998             jiffies_to_msecs(time_lock));
0999 
1000     /* We now hold the buffer lock so it is safe to query the buffer
1001      * state.  Is the buffer dirty?
1002      *
1003      * If so, there are two possibilities.  The buffer may be
1004      * non-journaled, and undergoing a quite legitimate writeback.
1005      * Otherwise, it is journaled, and we don't expect dirty buffers
1006      * in that state (the buffers should be marked JBD_Dirty
1007      * instead.)  So either the IO is being done under our own
1008      * control and this is a bug, or it's a third party IO such as
1009      * dump(8) (which may leave the buffer scheduled for read ---
1010      * ie. locked but not dirty) or tune2fs (which may actually have
1011      * the buffer dirtied, ugh.)  */
1012 
1013     if (buffer_dirty(bh)) {
1014         /*
1015          * First question: is this buffer already part of the current
1016          * transaction or the existing committing transaction?
1017          */
1018         if (jh->b_transaction) {
1019             J_ASSERT_JH(jh,
1020                 jh->b_transaction == transaction ||
1021                 jh->b_transaction ==
1022                     journal->j_committing_transaction);
1023             if (jh->b_next_transaction)
1024                 J_ASSERT_JH(jh, jh->b_next_transaction ==
1025                             transaction);
1026             warn_dirty_buffer(bh);
1027         }
1028         /*
1029          * In any case we need to clean the dirty flag and we must
1030          * do it under the buffer lock to be sure we don't race
1031          * with running write-out.
1032          */
1033         JBUFFER_TRACE(jh, "Journalling dirty buffer");
1034         clear_buffer_dirty(bh);
1035         set_buffer_jbddirty(bh);
1036     }
1037 
1038     unlock_buffer(bh);
1039 
1040     error = -EROFS;
1041     if (is_handle_aborted(handle)) {
1042         spin_unlock(&jh->b_state_lock);
1043         goto out;
1044     }
1045     error = 0;
1046 
1047     /*
1048      * The buffer is already part of this transaction if b_transaction or
1049      * b_next_transaction points to it
1050      */
1051     if (jh->b_transaction == transaction ||
1052         jh->b_next_transaction == transaction)
1053         goto done;
1054 
1055     /*
1056      * this is the first time this transaction is touching this buffer,
1057      * reset the modified flag
1058      */
1059     jh->b_modified = 0;
1060 
1061     /*
1062      * If the buffer is not journaled right now, we need to make sure it
1063      * doesn't get written to disk before the caller actually commits the
1064      * new data
1065      */
1066     if (!jh->b_transaction) {
1067         JBUFFER_TRACE(jh, "no transaction");
1068         J_ASSERT_JH(jh, !jh->b_next_transaction);
1069         JBUFFER_TRACE(jh, "file as BJ_Reserved");
1070         /*
1071          * Make sure all stores to jh (b_modified, b_frozen_data) are
1072          * visible before attaching it to the running transaction.
1073          * Paired with barrier in jbd2_write_access_granted()
1074          */
1075         smp_wmb();
1076         spin_lock(&journal->j_list_lock);
1077         __jbd2_journal_file_buffer(jh, transaction, BJ_Reserved);
1078         spin_unlock(&journal->j_list_lock);
1079         goto done;
1080     }
1081     /*
1082      * If there is already a copy-out version of this buffer, then we don't
1083      * need to make another one
1084      */
1085     if (jh->b_frozen_data) {
1086         JBUFFER_TRACE(jh, "has frozen data");
1087         J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
1088         goto attach_next;
1089     }
1090 
1091     JBUFFER_TRACE(jh, "owned by older transaction");
1092     J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
1093     J_ASSERT_JH(jh, jh->b_transaction == journal->j_committing_transaction);
1094 
1095     /*
1096      * There is one case we have to be very careful about.  If the
1097      * committing transaction is currently writing this buffer out to disk
1098      * and has NOT made a copy-out, then we cannot modify the buffer
1099      * contents at all right now.  The essence of copy-out is that it is
1100      * the extra copy, not the primary copy, which gets journaled.  If the
1101      * primary copy is already going to disk then we cannot do copy-out
1102      * here.
1103      */
1104     if (buffer_shadow(bh)) {
1105         JBUFFER_TRACE(jh, "on shadow: sleep");
1106         spin_unlock(&jh->b_state_lock);
1107         wait_on_bit_io(&bh->b_state, BH_Shadow, TASK_UNINTERRUPTIBLE);
1108         goto repeat;
1109     }
1110 
1111     /*
1112      * Only do the copy if the currently-owning transaction still needs it.
1113      * If buffer isn't on BJ_Metadata list, the committing transaction is
1114      * past that stage (here we use the fact that BH_Shadow is set under
1115      * bh_state lock together with refiling to BJ_Shadow list and at this
1116      * point we know the buffer doesn't have BH_Shadow set).
1117      *
1118      * Subtle point, though: if this is a get_undo_access, then we will be
1119      * relying on the frozen_data to contain the new value of the
1120      * committed_data record after the transaction, so we HAVE to force the
1121      * frozen_data copy in that case.
1122      */
1123     if (jh->b_jlist == BJ_Metadata || force_copy) {
1124         JBUFFER_TRACE(jh, "generate frozen data");
1125         if (!frozen_buffer) {
1126             JBUFFER_TRACE(jh, "allocate memory for buffer");
1127             spin_unlock(&jh->b_state_lock);
1128             frozen_buffer = jbd2_alloc(jh2bh(jh)->b_size,
1129                            GFP_NOFS | __GFP_NOFAIL);
1130             goto repeat;
1131         }
1132         jh->b_frozen_data = frozen_buffer;
1133         frozen_buffer = NULL;
1134         jbd2_freeze_jh_data(jh);
1135     }
1136 attach_next:
1137     /*
1138      * Make sure all stores to jh (b_modified, b_frozen_data) are visible
1139      * before attaching it to the running transaction. Paired with barrier
1140      * in jbd2_write_access_granted()
1141      */
1142     smp_wmb();
1143     jh->b_next_transaction = transaction;
1144 
1145 done:
1146     spin_unlock(&jh->b_state_lock);
1147 
1148     /*
1149      * If we are about to journal a buffer, then any revoke pending on it is
1150      * no longer valid
1151      */
1152     jbd2_journal_cancel_revoke(handle, jh);
1153 
1154 out:
1155     if (unlikely(frozen_buffer))    /* It's usually NULL */
1156         jbd2_free(frozen_buffer, bh->b_size);
1157 
1158     JBUFFER_TRACE(jh, "exit");
1159     return error;
1160 }
1161 
1162 /* Fast check whether buffer is already attached to the required transaction */
1163 static bool jbd2_write_access_granted(handle_t *handle, struct buffer_head *bh,
1164                             bool undo)
1165 {
1166     struct journal_head *jh;
1167     bool ret = false;
1168 
1169     /* Dirty buffers require special handling... */
1170     if (buffer_dirty(bh))
1171         return false;
1172 
1173     /*
1174      * RCU protects us from dereferencing freed pages. So the checks we do
1175      * are guaranteed not to oops. However the jh slab object can get freed
1176      * & reallocated while we work with it. So we have to be careful. When
1177      * we see jh attached to the running transaction, we know it must stay
1178      * so until the transaction is committed. Thus jh won't be freed and
1179      * will be attached to the same bh while we run.  However it can
1180      * happen jh gets freed, reallocated, and attached to the transaction
1181      * just after we get pointer to it from bh. So we have to be careful
1182      * and recheck jh still belongs to our bh before we return success.
1183      */
1184     rcu_read_lock();
1185     if (!buffer_jbd(bh))
1186         goto out;
1187     /* This should be bh2jh() but that doesn't work with inline functions */
1188     jh = READ_ONCE(bh->b_private);
1189     if (!jh)
1190         goto out;
1191     /* For undo access buffer must have data copied */
1192     if (undo && !jh->b_committed_data)
1193         goto out;
1194     if (READ_ONCE(jh->b_transaction) != handle->h_transaction &&
1195         READ_ONCE(jh->b_next_transaction) != handle->h_transaction)
1196         goto out;
1197     /*
1198      * There are two reasons for the barrier here:
1199      * 1) Make sure to fetch b_bh after we did previous checks so that we
1200      * detect when jh went through free, realloc, attach to transaction
1201      * while we were checking. Paired with implicit barrier in that path.
1202      * 2) So that access to bh done after jbd2_write_access_granted()
1203      * doesn't get reordered and see inconsistent state of concurrent
1204      * do_get_write_access().
1205      */
1206     smp_mb();
1207     if (unlikely(jh->b_bh != bh))
1208         goto out;
1209     ret = true;
1210 out:
1211     rcu_read_unlock();
1212     return ret;
1213 }
1214 
1215 /**
1216  * jbd2_journal_get_write_access() - notify intent to modify a buffer
1217  *                   for metadata (not data) update.
1218  * @handle: transaction to add buffer modifications to
1219  * @bh:     bh to be used for metadata writes
1220  *
1221  * Returns: error code or 0 on success.
1222  *
1223  * In full data journalling mode the buffer may be of type BJ_AsyncData,
1224  * because we're ``write()ing`` a buffer which is also part of a shared mapping.
1225  */
1226 
1227 int jbd2_journal_get_write_access(handle_t *handle, struct buffer_head *bh)
1228 {
1229     struct journal_head *jh;
1230     int rc;
1231 
1232     if (is_handle_aborted(handle))
1233         return -EROFS;
1234 
1235     if (jbd2_write_access_granted(handle, bh, false))
1236         return 0;
1237 
1238     jh = jbd2_journal_add_journal_head(bh);
1239     /* We do not want to get caught playing with fields which the
1240      * log thread also manipulates.  Make sure that the buffer
1241      * completes any outstanding IO before proceeding. */
1242     rc = do_get_write_access(handle, jh, 0);
1243     jbd2_journal_put_journal_head(jh);
1244     return rc;
1245 }
1246 
1247 
1248 /*
1249  * When the user wants to journal a newly created buffer_head
1250  * (ie. getblk() returned a new buffer and we are going to populate it
1251  * manually rather than reading off disk), then we need to keep the
1252  * buffer_head locked until it has been completely filled with new
1253  * data.  In this case, we should be able to make the assertion that
1254  * the bh is not already part of an existing transaction.
1255  *
1256  * The buffer should already be locked by the caller by this point.
1257  * There is no lock ranking violation: it was a newly created,
1258  * unlocked buffer beforehand. */
1259 
1260 /**
1261  * jbd2_journal_get_create_access () - notify intent to use newly created bh
1262  * @handle: transaction to new buffer to
1263  * @bh: new buffer.
1264  *
1265  * Call this if you create a new bh.
1266  */
1267 int jbd2_journal_get_create_access(handle_t *handle, struct buffer_head *bh)
1268 {
1269     transaction_t *transaction = handle->h_transaction;
1270     journal_t *journal;
1271     struct journal_head *jh = jbd2_journal_add_journal_head(bh);
1272     int err;
1273 
1274     jbd2_debug(5, "journal_head %p\n", jh);
1275     err = -EROFS;
1276     if (is_handle_aborted(handle))
1277         goto out;
1278     journal = transaction->t_journal;
1279     err = 0;
1280 
1281     JBUFFER_TRACE(jh, "entry");
1282     /*
1283      * The buffer may already belong to this transaction due to pre-zeroing
1284      * in the filesystem's new_block code.  It may also be on the previous,
1285      * committing transaction's lists, but it HAS to be in Forget state in
1286      * that case: the transaction must have deleted the buffer for it to be
1287      * reused here.
1288      */
1289     spin_lock(&jh->b_state_lock);
1290     J_ASSERT_JH(jh, (jh->b_transaction == transaction ||
1291         jh->b_transaction == NULL ||
1292         (jh->b_transaction == journal->j_committing_transaction &&
1293               jh->b_jlist == BJ_Forget)));
1294 
1295     J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
1296     J_ASSERT_JH(jh, buffer_locked(jh2bh(jh)));
1297 
1298     if (jh->b_transaction == NULL) {
1299         /*
1300          * Previous jbd2_journal_forget() could have left the buffer
1301          * with jbddirty bit set because it was being committed. When
1302          * the commit finished, we've filed the buffer for
1303          * checkpointing and marked it dirty. Now we are reallocating
1304          * the buffer so the transaction freeing it must have
1305          * committed and so it's safe to clear the dirty bit.
1306          */
1307         clear_buffer_dirty(jh2bh(jh));
1308         /* first access by this transaction */
1309         jh->b_modified = 0;
1310 
1311         JBUFFER_TRACE(jh, "file as BJ_Reserved");
1312         spin_lock(&journal->j_list_lock);
1313         __jbd2_journal_file_buffer(jh, transaction, BJ_Reserved);
1314         spin_unlock(&journal->j_list_lock);
1315     } else if (jh->b_transaction == journal->j_committing_transaction) {
1316         /* first access by this transaction */
1317         jh->b_modified = 0;
1318 
1319         JBUFFER_TRACE(jh, "set next transaction");
1320         spin_lock(&journal->j_list_lock);
1321         jh->b_next_transaction = transaction;
1322         spin_unlock(&journal->j_list_lock);
1323     }
1324     spin_unlock(&jh->b_state_lock);
1325 
1326     /*
1327      * akpm: I added this.  ext3_alloc_branch can pick up new indirect
1328      * blocks which contain freed but then revoked metadata.  We need
1329      * to cancel the revoke in case we end up freeing it yet again
1330      * and the reallocating as data - this would cause a second revoke,
1331      * which hits an assertion error.
1332      */
1333     JBUFFER_TRACE(jh, "cancelling revoke");
1334     jbd2_journal_cancel_revoke(handle, jh);
1335 out:
1336     jbd2_journal_put_journal_head(jh);
1337     return err;
1338 }
1339 
1340 /**
1341  * jbd2_journal_get_undo_access() -  Notify intent to modify metadata with
1342  *     non-rewindable consequences
1343  * @handle: transaction
1344  * @bh: buffer to undo
1345  *
1346  * Sometimes there is a need to distinguish between metadata which has
1347  * been committed to disk and that which has not.  The ext3fs code uses
1348  * this for freeing and allocating space, we have to make sure that we
1349  * do not reuse freed space until the deallocation has been committed,
1350  * since if we overwrote that space we would make the delete
1351  * un-rewindable in case of a crash.
1352  *
1353  * To deal with that, jbd2_journal_get_undo_access requests write access to a
1354  * buffer for parts of non-rewindable operations such as delete
1355  * operations on the bitmaps.  The journaling code must keep a copy of
1356  * the buffer's contents prior to the undo_access call until such time
1357  * as we know that the buffer has definitely been committed to disk.
1358  *
1359  * We never need to know which transaction the committed data is part
1360  * of, buffers touched here are guaranteed to be dirtied later and so
1361  * will be committed to a new transaction in due course, at which point
1362  * we can discard the old committed data pointer.
1363  *
1364  * Returns error number or 0 on success.
1365  */
1366 int jbd2_journal_get_undo_access(handle_t *handle, struct buffer_head *bh)
1367 {
1368     int err;
1369     struct journal_head *jh;
1370     char *committed_data = NULL;
1371 
1372     if (is_handle_aborted(handle))
1373         return -EROFS;
1374 
1375     if (jbd2_write_access_granted(handle, bh, true))
1376         return 0;
1377 
1378     jh = jbd2_journal_add_journal_head(bh);
1379     JBUFFER_TRACE(jh, "entry");
1380 
1381     /*
1382      * Do this first --- it can drop the journal lock, so we want to
1383      * make sure that obtaining the committed_data is done
1384      * atomically wrt. completion of any outstanding commits.
1385      */
1386     err = do_get_write_access(handle, jh, 1);
1387     if (err)
1388         goto out;
1389 
1390 repeat:
1391     if (!jh->b_committed_data)
1392         committed_data = jbd2_alloc(jh2bh(jh)->b_size,
1393                         GFP_NOFS|__GFP_NOFAIL);
1394 
1395     spin_lock(&jh->b_state_lock);
1396     if (!jh->b_committed_data) {
1397         /* Copy out the current buffer contents into the
1398          * preserved, committed copy. */
1399         JBUFFER_TRACE(jh, "generate b_committed data");
1400         if (!committed_data) {
1401             spin_unlock(&jh->b_state_lock);
1402             goto repeat;
1403         }
1404 
1405         jh->b_committed_data = committed_data;
1406         committed_data = NULL;
1407         memcpy(jh->b_committed_data, bh->b_data, bh->b_size);
1408     }
1409     spin_unlock(&jh->b_state_lock);
1410 out:
1411     jbd2_journal_put_journal_head(jh);
1412     if (unlikely(committed_data))
1413         jbd2_free(committed_data, bh->b_size);
1414     return err;
1415 }
1416 
1417 /**
1418  * jbd2_journal_set_triggers() - Add triggers for commit writeout
1419  * @bh: buffer to trigger on
1420  * @type: struct jbd2_buffer_trigger_type containing the trigger(s).
1421  *
1422  * Set any triggers on this journal_head.  This is always safe, because
1423  * triggers for a committing buffer will be saved off, and triggers for
1424  * a running transaction will match the buffer in that transaction.
1425  *
1426  * Call with NULL to clear the triggers.
1427  */
1428 void jbd2_journal_set_triggers(struct buffer_head *bh,
1429                    struct jbd2_buffer_trigger_type *type)
1430 {
1431     struct journal_head *jh = jbd2_journal_grab_journal_head(bh);
1432 
1433     if (WARN_ON_ONCE(!jh))
1434         return;
1435     jh->b_triggers = type;
1436     jbd2_journal_put_journal_head(jh);
1437 }
1438 
1439 void jbd2_buffer_frozen_trigger(struct journal_head *jh, void *mapped_data,
1440                 struct jbd2_buffer_trigger_type *triggers)
1441 {
1442     struct buffer_head *bh = jh2bh(jh);
1443 
1444     if (!triggers || !triggers->t_frozen)
1445         return;
1446 
1447     triggers->t_frozen(triggers, bh, mapped_data, bh->b_size);
1448 }
1449 
1450 void jbd2_buffer_abort_trigger(struct journal_head *jh,
1451                    struct jbd2_buffer_trigger_type *triggers)
1452 {
1453     if (!triggers || !triggers->t_abort)
1454         return;
1455 
1456     triggers->t_abort(triggers, jh2bh(jh));
1457 }
1458 
1459 /**
1460  * jbd2_journal_dirty_metadata() -  mark a buffer as containing dirty metadata
1461  * @handle: transaction to add buffer to.
1462  * @bh: buffer to mark
1463  *
1464  * mark dirty metadata which needs to be journaled as part of the current
1465  * transaction.
1466  *
1467  * The buffer must have previously had jbd2_journal_get_write_access()
1468  * called so that it has a valid journal_head attached to the buffer
1469  * head.
1470  *
1471  * The buffer is placed on the transaction's metadata list and is marked
1472  * as belonging to the transaction.
1473  *
1474  * Returns error number or 0 on success.
1475  *
1476  * Special care needs to be taken if the buffer already belongs to the
1477  * current committing transaction (in which case we should have frozen
1478  * data present for that commit).  In that case, we don't relink the
1479  * buffer: that only gets done when the old transaction finally
1480  * completes its commit.
1481  */
1482 int jbd2_journal_dirty_metadata(handle_t *handle, struct buffer_head *bh)
1483 {
1484     transaction_t *transaction = handle->h_transaction;
1485     journal_t *journal;
1486     struct journal_head *jh;
1487     int ret = 0;
1488 
1489     if (!buffer_jbd(bh))
1490         return -EUCLEAN;
1491 
1492     /*
1493      * We don't grab jh reference here since the buffer must be part
1494      * of the running transaction.
1495      */
1496     jh = bh2jh(bh);
1497     jbd2_debug(5, "journal_head %p\n", jh);
1498     JBUFFER_TRACE(jh, "entry");
1499 
1500     /*
1501      * This and the following assertions are unreliable since we may see jh
1502      * in inconsistent state unless we grab bh_state lock. But this is
1503      * crucial to catch bugs so let's do a reliable check until the
1504      * lockless handling is fully proven.
1505      */
1506     if (data_race(jh->b_transaction != transaction &&
1507         jh->b_next_transaction != transaction)) {
1508         spin_lock(&jh->b_state_lock);
1509         J_ASSERT_JH(jh, jh->b_transaction == transaction ||
1510                 jh->b_next_transaction == transaction);
1511         spin_unlock(&jh->b_state_lock);
1512     }
1513     if (jh->b_modified == 1) {
1514         /* If it's in our transaction it must be in BJ_Metadata list. */
1515         if (data_race(jh->b_transaction == transaction &&
1516             jh->b_jlist != BJ_Metadata)) {
1517             spin_lock(&jh->b_state_lock);
1518             if (jh->b_transaction == transaction &&
1519                 jh->b_jlist != BJ_Metadata)
1520                 pr_err("JBD2: assertion failure: h_type=%u "
1521                        "h_line_no=%u block_no=%llu jlist=%u\n",
1522                        handle->h_type, handle->h_line_no,
1523                        (unsigned long long) bh->b_blocknr,
1524                        jh->b_jlist);
1525             J_ASSERT_JH(jh, jh->b_transaction != transaction ||
1526                     jh->b_jlist == BJ_Metadata);
1527             spin_unlock(&jh->b_state_lock);
1528         }
1529         goto out;
1530     }
1531 
1532     journal = transaction->t_journal;
1533     spin_lock(&jh->b_state_lock);
1534 
1535     if (is_handle_aborted(handle)) {
1536         /*
1537          * Check journal aborting with @jh->b_state_lock locked,
1538          * since 'jh->b_transaction' could be replaced with
1539          * 'jh->b_next_transaction' during old transaction
1540          * committing if journal aborted, which may fail
1541          * assertion on 'jh->b_frozen_data == NULL'.
1542          */
1543         ret = -EROFS;
1544         goto out_unlock_bh;
1545     }
1546 
1547     if (jh->b_modified == 0) {
1548         /*
1549          * This buffer's got modified and becoming part
1550          * of the transaction. This needs to be done
1551          * once a transaction -bzzz
1552          */
1553         if (WARN_ON_ONCE(jbd2_handle_buffer_credits(handle) <= 0)) {
1554             ret = -ENOSPC;
1555             goto out_unlock_bh;
1556         }
1557         jh->b_modified = 1;
1558         handle->h_total_credits--;
1559     }
1560 
1561     /*
1562      * fastpath, to avoid expensive locking.  If this buffer is already
1563      * on the running transaction's metadata list there is nothing to do.
1564      * Nobody can take it off again because there is a handle open.
1565      * I _think_ we're OK here with SMP barriers - a mistaken decision will
1566      * result in this test being false, so we go in and take the locks.
1567      */
1568     if (jh->b_transaction == transaction && jh->b_jlist == BJ_Metadata) {
1569         JBUFFER_TRACE(jh, "fastpath");
1570         if (unlikely(jh->b_transaction !=
1571                  journal->j_running_transaction)) {
1572             printk(KERN_ERR "JBD2: %s: "
1573                    "jh->b_transaction (%llu, %p, %u) != "
1574                    "journal->j_running_transaction (%p, %u)\n",
1575                    journal->j_devname,
1576                    (unsigned long long) bh->b_blocknr,
1577                    jh->b_transaction,
1578                    jh->b_transaction ? jh->b_transaction->t_tid : 0,
1579                    journal->j_running_transaction,
1580                    journal->j_running_transaction ?
1581                    journal->j_running_transaction->t_tid : 0);
1582             ret = -EINVAL;
1583         }
1584         goto out_unlock_bh;
1585     }
1586 
1587     set_buffer_jbddirty(bh);
1588 
1589     /*
1590      * Metadata already on the current transaction list doesn't
1591      * need to be filed.  Metadata on another transaction's list must
1592      * be committing, and will be refiled once the commit completes:
1593      * leave it alone for now.
1594      */
1595     if (jh->b_transaction != transaction) {
1596         JBUFFER_TRACE(jh, "already on other transaction");
1597         if (unlikely(((jh->b_transaction !=
1598                    journal->j_committing_transaction)) ||
1599                  (jh->b_next_transaction != transaction))) {
1600             printk(KERN_ERR "jbd2_journal_dirty_metadata: %s: "
1601                    "bad jh for block %llu: "
1602                    "transaction (%p, %u), "
1603                    "jh->b_transaction (%p, %u), "
1604                    "jh->b_next_transaction (%p, %u), jlist %u\n",
1605                    journal->j_devname,
1606                    (unsigned long long) bh->b_blocknr,
1607                    transaction, transaction->t_tid,
1608                    jh->b_transaction,
1609                    jh->b_transaction ?
1610                    jh->b_transaction->t_tid : 0,
1611                    jh->b_next_transaction,
1612                    jh->b_next_transaction ?
1613                    jh->b_next_transaction->t_tid : 0,
1614                    jh->b_jlist);
1615             WARN_ON(1);
1616             ret = -EINVAL;
1617         }
1618         /* And this case is illegal: we can't reuse another
1619          * transaction's data buffer, ever. */
1620         goto out_unlock_bh;
1621     }
1622 
1623     /* That test should have eliminated the following case: */
1624     J_ASSERT_JH(jh, jh->b_frozen_data == NULL);
1625 
1626     JBUFFER_TRACE(jh, "file as BJ_Metadata");
1627     spin_lock(&journal->j_list_lock);
1628     __jbd2_journal_file_buffer(jh, transaction, BJ_Metadata);
1629     spin_unlock(&journal->j_list_lock);
1630 out_unlock_bh:
1631     spin_unlock(&jh->b_state_lock);
1632 out:
1633     JBUFFER_TRACE(jh, "exit");
1634     return ret;
1635 }
1636 
1637 /**
1638  * jbd2_journal_forget() - bforget() for potentially-journaled buffers.
1639  * @handle: transaction handle
1640  * @bh:     bh to 'forget'
1641  *
1642  * We can only do the bforget if there are no commits pending against the
1643  * buffer.  If the buffer is dirty in the current running transaction we
1644  * can safely unlink it.
1645  *
1646  * bh may not be a journalled buffer at all - it may be a non-JBD
1647  * buffer which came off the hashtable.  Check for this.
1648  *
1649  * Decrements bh->b_count by one.
1650  *
1651  * Allow this call even if the handle has aborted --- it may be part of
1652  * the caller's cleanup after an abort.
1653  */
1654 int jbd2_journal_forget(handle_t *handle, struct buffer_head *bh)
1655 {
1656     transaction_t *transaction = handle->h_transaction;
1657     journal_t *journal;
1658     struct journal_head *jh;
1659     int drop_reserve = 0;
1660     int err = 0;
1661     int was_modified = 0;
1662 
1663     if (is_handle_aborted(handle))
1664         return -EROFS;
1665     journal = transaction->t_journal;
1666 
1667     BUFFER_TRACE(bh, "entry");
1668 
1669     jh = jbd2_journal_grab_journal_head(bh);
1670     if (!jh) {
1671         __bforget(bh);
1672         return 0;
1673     }
1674 
1675     spin_lock(&jh->b_state_lock);
1676 
1677     /* Critical error: attempting to delete a bitmap buffer, maybe?
1678      * Don't do any jbd operations, and return an error. */
1679     if (!J_EXPECT_JH(jh, !jh->b_committed_data,
1680              "inconsistent data on disk")) {
1681         err = -EIO;
1682         goto drop;
1683     }
1684 
1685     /* keep track of whether or not this transaction modified us */
1686     was_modified = jh->b_modified;
1687 
1688     /*
1689      * The buffer's going from the transaction, we must drop
1690      * all references -bzzz
1691      */
1692     jh->b_modified = 0;
1693 
1694     if (jh->b_transaction == transaction) {
1695         J_ASSERT_JH(jh, !jh->b_frozen_data);
1696 
1697         /* If we are forgetting a buffer which is already part
1698          * of this transaction, then we can just drop it from
1699          * the transaction immediately. */
1700         clear_buffer_dirty(bh);
1701         clear_buffer_jbddirty(bh);
1702 
1703         JBUFFER_TRACE(jh, "belongs to current transaction: unfile");
1704 
1705         /*
1706          * we only want to drop a reference if this transaction
1707          * modified the buffer
1708          */
1709         if (was_modified)
1710             drop_reserve = 1;
1711 
1712         /*
1713          * We are no longer going to journal this buffer.
1714          * However, the commit of this transaction is still
1715          * important to the buffer: the delete that we are now
1716          * processing might obsolete an old log entry, so by
1717          * committing, we can satisfy the buffer's checkpoint.
1718          *
1719          * So, if we have a checkpoint on the buffer, we should
1720          * now refile the buffer on our BJ_Forget list so that
1721          * we know to remove the checkpoint after we commit.
1722          */
1723 
1724         spin_lock(&journal->j_list_lock);
1725         if (jh->b_cp_transaction) {
1726             __jbd2_journal_temp_unlink_buffer(jh);
1727             __jbd2_journal_file_buffer(jh, transaction, BJ_Forget);
1728         } else {
1729             __jbd2_journal_unfile_buffer(jh);
1730             jbd2_journal_put_journal_head(jh);
1731         }
1732         spin_unlock(&journal->j_list_lock);
1733     } else if (jh->b_transaction) {
1734         J_ASSERT_JH(jh, (jh->b_transaction ==
1735                  journal->j_committing_transaction));
1736         /* However, if the buffer is still owned by a prior
1737          * (committing) transaction, we can't drop it yet... */
1738         JBUFFER_TRACE(jh, "belongs to older transaction");
1739         /* ... but we CAN drop it from the new transaction through
1740          * marking the buffer as freed and set j_next_transaction to
1741          * the new transaction, so that not only the commit code
1742          * knows it should clear dirty bits when it is done with the
1743          * buffer, but also the buffer can be checkpointed only
1744          * after the new transaction commits. */
1745 
1746         set_buffer_freed(bh);
1747 
1748         if (!jh->b_next_transaction) {
1749             spin_lock(&journal->j_list_lock);
1750             jh->b_next_transaction = transaction;
1751             spin_unlock(&journal->j_list_lock);
1752         } else {
1753             J_ASSERT(jh->b_next_transaction == transaction);
1754 
1755             /*
1756              * only drop a reference if this transaction modified
1757              * the buffer
1758              */
1759             if (was_modified)
1760                 drop_reserve = 1;
1761         }
1762     } else {
1763         /*
1764          * Finally, if the buffer is not belongs to any
1765          * transaction, we can just drop it now if it has no
1766          * checkpoint.
1767          */
1768         spin_lock(&journal->j_list_lock);
1769         if (!jh->b_cp_transaction) {
1770             JBUFFER_TRACE(jh, "belongs to none transaction");
1771             spin_unlock(&journal->j_list_lock);
1772             goto drop;
1773         }
1774 
1775         /*
1776          * Otherwise, if the buffer has been written to disk,
1777          * it is safe to remove the checkpoint and drop it.
1778          */
1779         if (!buffer_dirty(bh)) {
1780             __jbd2_journal_remove_checkpoint(jh);
1781             spin_unlock(&journal->j_list_lock);
1782             goto drop;
1783         }
1784 
1785         /*
1786          * The buffer is still not written to disk, we should
1787          * attach this buffer to current transaction so that the
1788          * buffer can be checkpointed only after the current
1789          * transaction commits.
1790          */
1791         clear_buffer_dirty(bh);
1792         __jbd2_journal_file_buffer(jh, transaction, BJ_Forget);
1793         spin_unlock(&journal->j_list_lock);
1794     }
1795 drop:
1796     __brelse(bh);
1797     spin_unlock(&jh->b_state_lock);
1798     jbd2_journal_put_journal_head(jh);
1799     if (drop_reserve) {
1800         /* no need to reserve log space for this block -bzzz */
1801         handle->h_total_credits++;
1802     }
1803     return err;
1804 }
1805 
1806 /**
1807  * jbd2_journal_stop() - complete a transaction
1808  * @handle: transaction to complete.
1809  *
1810  * All done for a particular handle.
1811  *
1812  * There is not much action needed here.  We just return any remaining
1813  * buffer credits to the transaction and remove the handle.  The only
1814  * complication is that we need to start a commit operation if the
1815  * filesystem is marked for synchronous update.
1816  *
1817  * jbd2_journal_stop itself will not usually return an error, but it may
1818  * do so in unusual circumstances.  In particular, expect it to
1819  * return -EIO if a jbd2_journal_abort has been executed since the
1820  * transaction began.
1821  */
1822 int jbd2_journal_stop(handle_t *handle)
1823 {
1824     transaction_t *transaction = handle->h_transaction;
1825     journal_t *journal;
1826     int err = 0, wait_for_commit = 0;
1827     tid_t tid;
1828     pid_t pid;
1829 
1830     if (--handle->h_ref > 0) {
1831         jbd2_debug(4, "h_ref %d -> %d\n", handle->h_ref + 1,
1832                          handle->h_ref);
1833         if (is_handle_aborted(handle))
1834             return -EIO;
1835         return 0;
1836     }
1837     if (!transaction) {
1838         /*
1839          * Handle is already detached from the transaction so there is
1840          * nothing to do other than free the handle.
1841          */
1842         memalloc_nofs_restore(handle->saved_alloc_context);
1843         goto free_and_exit;
1844     }
1845     journal = transaction->t_journal;
1846     tid = transaction->t_tid;
1847 
1848     if (is_handle_aborted(handle))
1849         err = -EIO;
1850 
1851     jbd2_debug(4, "Handle %p going down\n", handle);
1852     trace_jbd2_handle_stats(journal->j_fs_dev->bd_dev,
1853                 tid, handle->h_type, handle->h_line_no,
1854                 jiffies - handle->h_start_jiffies,
1855                 handle->h_sync, handle->h_requested_credits,
1856                 (handle->h_requested_credits -
1857                  handle->h_total_credits));
1858 
1859     /*
1860      * Implement synchronous transaction batching.  If the handle
1861      * was synchronous, don't force a commit immediately.  Let's
1862      * yield and let another thread piggyback onto this
1863      * transaction.  Keep doing that while new threads continue to
1864      * arrive.  It doesn't cost much - we're about to run a commit
1865      * and sleep on IO anyway.  Speeds up many-threaded, many-dir
1866      * operations by 30x or more...
1867      *
1868      * We try and optimize the sleep time against what the
1869      * underlying disk can do, instead of having a static sleep
1870      * time.  This is useful for the case where our storage is so
1871      * fast that it is more optimal to go ahead and force a flush
1872      * and wait for the transaction to be committed than it is to
1873      * wait for an arbitrary amount of time for new writers to
1874      * join the transaction.  We achieve this by measuring how
1875      * long it takes to commit a transaction, and compare it with
1876      * how long this transaction has been running, and if run time
1877      * < commit time then we sleep for the delta and commit.  This
1878      * greatly helps super fast disks that would see slowdowns as
1879      * more threads started doing fsyncs.
1880      *
1881      * But don't do this if this process was the most recent one
1882      * to perform a synchronous write.  We do this to detect the
1883      * case where a single process is doing a stream of sync
1884      * writes.  No point in waiting for joiners in that case.
1885      *
1886      * Setting max_batch_time to 0 disables this completely.
1887      */
1888     pid = current->pid;
1889     if (handle->h_sync && journal->j_last_sync_writer != pid &&
1890         journal->j_max_batch_time) {
1891         u64 commit_time, trans_time;
1892 
1893         journal->j_last_sync_writer = pid;
1894 
1895         read_lock(&journal->j_state_lock);
1896         commit_time = journal->j_average_commit_time;
1897         read_unlock(&journal->j_state_lock);
1898 
1899         trans_time = ktime_to_ns(ktime_sub(ktime_get(),
1900                            transaction->t_start_time));
1901 
1902         commit_time = max_t(u64, commit_time,
1903                     1000*journal->j_min_batch_time);
1904         commit_time = min_t(u64, commit_time,
1905                     1000*journal->j_max_batch_time);
1906 
1907         if (trans_time < commit_time) {
1908             ktime_t expires = ktime_add_ns(ktime_get(),
1909                                commit_time);
1910             set_current_state(TASK_UNINTERRUPTIBLE);
1911             schedule_hrtimeout(&expires, HRTIMER_MODE_ABS);
1912         }
1913     }
1914 
1915     if (handle->h_sync)
1916         transaction->t_synchronous_commit = 1;
1917 
1918     /*
1919      * If the handle is marked SYNC, we need to set another commit
1920      * going!  We also want to force a commit if the transaction is too
1921      * old now.
1922      */
1923     if (handle->h_sync ||
1924         time_after_eq(jiffies, transaction->t_expires)) {
1925         /* Do this even for aborted journals: an abort still
1926          * completes the commit thread, it just doesn't write
1927          * anything to disk. */
1928 
1929         jbd2_debug(2, "transaction too old, requesting commit for "
1930                     "handle %p\n", handle);
1931         /* This is non-blocking */
1932         jbd2_log_start_commit(journal, tid);
1933 
1934         /*
1935          * Special case: JBD2_SYNC synchronous updates require us
1936          * to wait for the commit to complete.
1937          */
1938         if (handle->h_sync && !(current->flags & PF_MEMALLOC))
1939             wait_for_commit = 1;
1940     }
1941 
1942     /*
1943      * Once stop_this_handle() drops t_updates, the transaction could start
1944      * committing on us and eventually disappear.  So we must not
1945      * dereference transaction pointer again after calling
1946      * stop_this_handle().
1947      */
1948     stop_this_handle(handle);
1949 
1950     if (wait_for_commit)
1951         err = jbd2_log_wait_commit(journal, tid);
1952 
1953 free_and_exit:
1954     if (handle->h_rsv_handle)
1955         jbd2_free_handle(handle->h_rsv_handle);
1956     jbd2_free_handle(handle);
1957     return err;
1958 }
1959 
1960 /*
1961  *
1962  * List management code snippets: various functions for manipulating the
1963  * transaction buffer lists.
1964  *
1965  */
1966 
1967 /*
1968  * Append a buffer to a transaction list, given the transaction's list head
1969  * pointer.
1970  *
1971  * j_list_lock is held.
1972  *
1973  * jh->b_state_lock is held.
1974  */
1975 
1976 static inline void
1977 __blist_add_buffer(struct journal_head **list, struct journal_head *jh)
1978 {
1979     if (!*list) {
1980         jh->b_tnext = jh->b_tprev = jh;
1981         *list = jh;
1982     } else {
1983         /* Insert at the tail of the list to preserve order */
1984         struct journal_head *first = *list, *last = first->b_tprev;
1985         jh->b_tprev = last;
1986         jh->b_tnext = first;
1987         last->b_tnext = first->b_tprev = jh;
1988     }
1989 }
1990 
1991 /*
1992  * Remove a buffer from a transaction list, given the transaction's list
1993  * head pointer.
1994  *
1995  * Called with j_list_lock held, and the journal may not be locked.
1996  *
1997  * jh->b_state_lock is held.
1998  */
1999 
2000 static inline void
2001 __blist_del_buffer(struct journal_head **list, struct journal_head *jh)
2002 {
2003     if (*list == jh) {
2004         *list = jh->b_tnext;
2005         if (*list == jh)
2006             *list = NULL;
2007     }
2008     jh->b_tprev->b_tnext = jh->b_tnext;
2009     jh->b_tnext->b_tprev = jh->b_tprev;
2010 }
2011 
2012 /*
2013  * Remove a buffer from the appropriate transaction list.
2014  *
2015  * Note that this function can *change* the value of
2016  * bh->b_transaction->t_buffers, t_forget, t_shadow_list, t_log_list or
2017  * t_reserved_list.  If the caller is holding onto a copy of one of these
2018  * pointers, it could go bad.  Generally the caller needs to re-read the
2019  * pointer from the transaction_t.
2020  *
2021  * Called under j_list_lock.
2022  */
2023 static void __jbd2_journal_temp_unlink_buffer(struct journal_head *jh)
2024 {
2025     struct journal_head **list = NULL;
2026     transaction_t *transaction;
2027     struct buffer_head *bh = jh2bh(jh);
2028 
2029     lockdep_assert_held(&jh->b_state_lock);
2030     transaction = jh->b_transaction;
2031     if (transaction)
2032         assert_spin_locked(&transaction->t_journal->j_list_lock);
2033 
2034     J_ASSERT_JH(jh, jh->b_jlist < BJ_Types);
2035     if (jh->b_jlist != BJ_None)
2036         J_ASSERT_JH(jh, transaction != NULL);
2037 
2038     switch (jh->b_jlist) {
2039     case BJ_None:
2040         return;
2041     case BJ_Metadata:
2042         transaction->t_nr_buffers--;
2043         J_ASSERT_JH(jh, transaction->t_nr_buffers >= 0);
2044         list = &transaction->t_buffers;
2045         break;
2046     case BJ_Forget:
2047         list = &transaction->t_forget;
2048         break;
2049     case BJ_Shadow:
2050         list = &transaction->t_shadow_list;
2051         break;
2052     case BJ_Reserved:
2053         list = &transaction->t_reserved_list;
2054         break;
2055     }
2056 
2057     __blist_del_buffer(list, jh);
2058     jh->b_jlist = BJ_None;
2059     if (transaction && is_journal_aborted(transaction->t_journal))
2060         clear_buffer_jbddirty(bh);
2061     else if (test_clear_buffer_jbddirty(bh))
2062         mark_buffer_dirty(bh);  /* Expose it to the VM */
2063 }
2064 
2065 /*
2066  * Remove buffer from all transactions. The caller is responsible for dropping
2067  * the jh reference that belonged to the transaction.
2068  *
2069  * Called with bh_state lock and j_list_lock
2070  */
2071 static void __jbd2_journal_unfile_buffer(struct journal_head *jh)
2072 {
2073     J_ASSERT_JH(jh, jh->b_transaction != NULL);
2074     J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
2075 
2076     __jbd2_journal_temp_unlink_buffer(jh);
2077     jh->b_transaction = NULL;
2078 }
2079 
2080 void jbd2_journal_unfile_buffer(journal_t *journal, struct journal_head *jh)
2081 {
2082     struct buffer_head *bh = jh2bh(jh);
2083 
2084     /* Get reference so that buffer cannot be freed before we unlock it */
2085     get_bh(bh);
2086     spin_lock(&jh->b_state_lock);
2087     spin_lock(&journal->j_list_lock);
2088     __jbd2_journal_unfile_buffer(jh);
2089     spin_unlock(&journal->j_list_lock);
2090     spin_unlock(&jh->b_state_lock);
2091     jbd2_journal_put_journal_head(jh);
2092     __brelse(bh);
2093 }
2094 
2095 /*
2096  * Called from jbd2_journal_try_to_free_buffers().
2097  *
2098  * Called under jh->b_state_lock
2099  */
2100 static void
2101 __journal_try_to_free_buffer(journal_t *journal, struct buffer_head *bh)
2102 {
2103     struct journal_head *jh;
2104 
2105     jh = bh2jh(bh);
2106 
2107     if (buffer_locked(bh) || buffer_dirty(bh))
2108         goto out;
2109 
2110     if (jh->b_next_transaction != NULL || jh->b_transaction != NULL)
2111         goto out;
2112 
2113     spin_lock(&journal->j_list_lock);
2114     if (jh->b_cp_transaction != NULL) {
2115         /* written-back checkpointed metadata buffer */
2116         JBUFFER_TRACE(jh, "remove from checkpoint list");
2117         __jbd2_journal_remove_checkpoint(jh);
2118     }
2119     spin_unlock(&journal->j_list_lock);
2120 out:
2121     return;
2122 }
2123 
2124 /**
2125  * jbd2_journal_try_to_free_buffers() - try to free page buffers.
2126  * @journal: journal for operation
2127  * @folio: Folio to detach data from.
2128  *
2129  * For all the buffers on this page,
2130  * if they are fully written out ordered data, move them onto BUF_CLEAN
2131  * so try_to_free_buffers() can reap them.
2132  *
2133  * This function returns non-zero if we wish try_to_free_buffers()
2134  * to be called. We do this if the page is releasable by try_to_free_buffers().
2135  * We also do it if the page has locked or dirty buffers and the caller wants
2136  * us to perform sync or async writeout.
2137  *
2138  * This complicates JBD locking somewhat.  We aren't protected by the
2139  * BKL here.  We wish to remove the buffer from its committing or
2140  * running transaction's ->t_datalist via __jbd2_journal_unfile_buffer.
2141  *
2142  * This may *change* the value of transaction_t->t_datalist, so anyone
2143  * who looks at t_datalist needs to lock against this function.
2144  *
2145  * Even worse, someone may be doing a jbd2_journal_dirty_data on this
2146  * buffer.  So we need to lock against that.  jbd2_journal_dirty_data()
2147  * will come out of the lock with the buffer dirty, which makes it
2148  * ineligible for release here.
2149  *
2150  * Who else is affected by this?  hmm...  Really the only contender
2151  * is do_get_write_access() - it could be looking at the buffer while
2152  * journal_try_to_free_buffer() is changing its state.  But that
2153  * cannot happen because we never reallocate freed data as metadata
2154  * while the data is part of a transaction.  Yes?
2155  *
2156  * Return false on failure, true on success
2157  */
2158 bool jbd2_journal_try_to_free_buffers(journal_t *journal, struct folio *folio)
2159 {
2160     struct buffer_head *head;
2161     struct buffer_head *bh;
2162     bool ret = false;
2163 
2164     J_ASSERT(folio_test_locked(folio));
2165 
2166     head = folio_buffers(folio);
2167     bh = head;
2168     do {
2169         struct journal_head *jh;
2170 
2171         /*
2172          * We take our own ref against the journal_head here to avoid
2173          * having to add tons of locking around each instance of
2174          * jbd2_journal_put_journal_head().
2175          */
2176         jh = jbd2_journal_grab_journal_head(bh);
2177         if (!jh)
2178             continue;
2179 
2180         spin_lock(&jh->b_state_lock);
2181         __journal_try_to_free_buffer(journal, bh);
2182         spin_unlock(&jh->b_state_lock);
2183         jbd2_journal_put_journal_head(jh);
2184         if (buffer_jbd(bh))
2185             goto busy;
2186     } while ((bh = bh->b_this_page) != head);
2187 
2188     ret = try_to_free_buffers(folio);
2189 busy:
2190     return ret;
2191 }
2192 
2193 /*
2194  * This buffer is no longer needed.  If it is on an older transaction's
2195  * checkpoint list we need to record it on this transaction's forget list
2196  * to pin this buffer (and hence its checkpointing transaction) down until
2197  * this transaction commits.  If the buffer isn't on a checkpoint list, we
2198  * release it.
2199  * Returns non-zero if JBD no longer has an interest in the buffer.
2200  *
2201  * Called under j_list_lock.
2202  *
2203  * Called under jh->b_state_lock.
2204  */
2205 static int __dispose_buffer(struct journal_head *jh, transaction_t *transaction)
2206 {
2207     int may_free = 1;
2208     struct buffer_head *bh = jh2bh(jh);
2209 
2210     if (jh->b_cp_transaction) {
2211         JBUFFER_TRACE(jh, "on running+cp transaction");
2212         __jbd2_journal_temp_unlink_buffer(jh);
2213         /*
2214          * We don't want to write the buffer anymore, clear the
2215          * bit so that we don't confuse checks in
2216          * __journal_file_buffer
2217          */
2218         clear_buffer_dirty(bh);
2219         __jbd2_journal_file_buffer(jh, transaction, BJ_Forget);
2220         may_free = 0;
2221     } else {
2222         JBUFFER_TRACE(jh, "on running transaction");
2223         __jbd2_journal_unfile_buffer(jh);
2224         jbd2_journal_put_journal_head(jh);
2225     }
2226     return may_free;
2227 }
2228 
2229 /*
2230  * jbd2_journal_invalidate_folio
2231  *
2232  * This code is tricky.  It has a number of cases to deal with.
2233  *
2234  * There are two invariants which this code relies on:
2235  *
2236  * i_size must be updated on disk before we start calling invalidate_folio
2237  * on the data.
2238  *
2239  *  This is done in ext3 by defining an ext3_setattr method which
2240  *  updates i_size before truncate gets going.  By maintaining this
2241  *  invariant, we can be sure that it is safe to throw away any buffers
2242  *  attached to the current transaction: once the transaction commits,
2243  *  we know that the data will not be needed.
2244  *
2245  *  Note however that we can *not* throw away data belonging to the
2246  *  previous, committing transaction!
2247  *
2248  * Any disk blocks which *are* part of the previous, committing
2249  * transaction (and which therefore cannot be discarded immediately) are
2250  * not going to be reused in the new running transaction
2251  *
2252  *  The bitmap committed_data images guarantee this: any block which is
2253  *  allocated in one transaction and removed in the next will be marked
2254  *  as in-use in the committed_data bitmap, so cannot be reused until
2255  *  the next transaction to delete the block commits.  This means that
2256  *  leaving committing buffers dirty is quite safe: the disk blocks
2257  *  cannot be reallocated to a different file and so buffer aliasing is
2258  *  not possible.
2259  *
2260  *
2261  * The above applies mainly to ordered data mode.  In writeback mode we
2262  * don't make guarantees about the order in which data hits disk --- in
2263  * particular we don't guarantee that new dirty data is flushed before
2264  * transaction commit --- so it is always safe just to discard data
2265  * immediately in that mode.  --sct
2266  */
2267 
2268 /*
2269  * The journal_unmap_buffer helper function returns zero if the buffer
2270  * concerned remains pinned as an anonymous buffer belonging to an older
2271  * transaction.
2272  *
2273  * We're outside-transaction here.  Either or both of j_running_transaction
2274  * and j_committing_transaction may be NULL.
2275  */
2276 static int journal_unmap_buffer(journal_t *journal, struct buffer_head *bh,
2277                 int partial_page)
2278 {
2279     transaction_t *transaction;
2280     struct journal_head *jh;
2281     int may_free = 1;
2282 
2283     BUFFER_TRACE(bh, "entry");
2284 
2285     /*
2286      * It is safe to proceed here without the j_list_lock because the
2287      * buffers cannot be stolen by try_to_free_buffers as long as we are
2288      * holding the page lock. --sct
2289      */
2290 
2291     jh = jbd2_journal_grab_journal_head(bh);
2292     if (!jh)
2293         goto zap_buffer_unlocked;
2294 
2295     /* OK, we have data buffer in journaled mode */
2296     write_lock(&journal->j_state_lock);
2297     spin_lock(&jh->b_state_lock);
2298     spin_lock(&journal->j_list_lock);
2299 
2300     /*
2301      * We cannot remove the buffer from checkpoint lists until the
2302      * transaction adding inode to orphan list (let's call it T)
2303      * is committed.  Otherwise if the transaction changing the
2304      * buffer would be cleaned from the journal before T is
2305      * committed, a crash will cause that the correct contents of
2306      * the buffer will be lost.  On the other hand we have to
2307      * clear the buffer dirty bit at latest at the moment when the
2308      * transaction marking the buffer as freed in the filesystem
2309      * structures is committed because from that moment on the
2310      * block can be reallocated and used by a different page.
2311      * Since the block hasn't been freed yet but the inode has
2312      * already been added to orphan list, it is safe for us to add
2313      * the buffer to BJ_Forget list of the newest transaction.
2314      *
2315      * Also we have to clear buffer_mapped flag of a truncated buffer
2316      * because the buffer_head may be attached to the page straddling
2317      * i_size (can happen only when blocksize < pagesize) and thus the
2318      * buffer_head can be reused when the file is extended again. So we end
2319      * up keeping around invalidated buffers attached to transactions'
2320      * BJ_Forget list just to stop checkpointing code from cleaning up
2321      * the transaction this buffer was modified in.
2322      */
2323     transaction = jh->b_transaction;
2324     if (transaction == NULL) {
2325         /* First case: not on any transaction.  If it
2326          * has no checkpoint link, then we can zap it:
2327          * it's a writeback-mode buffer so we don't care
2328          * if it hits disk safely. */
2329         if (!jh->b_cp_transaction) {
2330             JBUFFER_TRACE(jh, "not on any transaction: zap");
2331             goto zap_buffer;
2332         }
2333 
2334         if (!buffer_dirty(bh)) {
2335             /* bdflush has written it.  We can drop it now */
2336             __jbd2_journal_remove_checkpoint(jh);
2337             goto zap_buffer;
2338         }
2339 
2340         /* OK, it must be in the journal but still not
2341          * written fully to disk: it's metadata or
2342          * journaled data... */
2343 
2344         if (journal->j_running_transaction) {
2345             /* ... and once the current transaction has
2346              * committed, the buffer won't be needed any
2347              * longer. */
2348             JBUFFER_TRACE(jh, "checkpointed: add to BJ_Forget");
2349             may_free = __dispose_buffer(jh,
2350                     journal->j_running_transaction);
2351             goto zap_buffer;
2352         } else {
2353             /* There is no currently-running transaction. So the
2354              * orphan record which we wrote for this file must have
2355              * passed into commit.  We must attach this buffer to
2356              * the committing transaction, if it exists. */
2357             if (journal->j_committing_transaction) {
2358                 JBUFFER_TRACE(jh, "give to committing trans");
2359                 may_free = __dispose_buffer(jh,
2360                     journal->j_committing_transaction);
2361                 goto zap_buffer;
2362             } else {
2363                 /* The orphan record's transaction has
2364                  * committed.  We can cleanse this buffer */
2365                 clear_buffer_jbddirty(bh);
2366                 __jbd2_journal_remove_checkpoint(jh);
2367                 goto zap_buffer;
2368             }
2369         }
2370     } else if (transaction == journal->j_committing_transaction) {
2371         JBUFFER_TRACE(jh, "on committing transaction");
2372         /*
2373          * The buffer is committing, we simply cannot touch
2374          * it. If the page is straddling i_size we have to wait
2375          * for commit and try again.
2376          */
2377         if (partial_page) {
2378             spin_unlock(&journal->j_list_lock);
2379             spin_unlock(&jh->b_state_lock);
2380             write_unlock(&journal->j_state_lock);
2381             jbd2_journal_put_journal_head(jh);
2382             return -EBUSY;
2383         }
2384         /*
2385          * OK, buffer won't be reachable after truncate. We just clear
2386          * b_modified to not confuse transaction credit accounting, and
2387          * set j_next_transaction to the running transaction (if there
2388          * is one) and mark buffer as freed so that commit code knows
2389          * it should clear dirty bits when it is done with the buffer.
2390          */
2391         set_buffer_freed(bh);
2392         if (journal->j_running_transaction && buffer_jbddirty(bh))
2393             jh->b_next_transaction = journal->j_running_transaction;
2394         jh->b_modified = 0;
2395         spin_unlock(&journal->j_list_lock);
2396         spin_unlock(&jh->b_state_lock);
2397         write_unlock(&journal->j_state_lock);
2398         jbd2_journal_put_journal_head(jh);
2399         return 0;
2400     } else {
2401         /* Good, the buffer belongs to the running transaction.
2402          * We are writing our own transaction's data, not any
2403          * previous one's, so it is safe to throw it away
2404          * (remember that we expect the filesystem to have set
2405          * i_size already for this truncate so recovery will not
2406          * expose the disk blocks we are discarding here.) */
2407         J_ASSERT_JH(jh, transaction == journal->j_running_transaction);
2408         JBUFFER_TRACE(jh, "on running transaction");
2409         may_free = __dispose_buffer(jh, transaction);
2410     }
2411 
2412 zap_buffer:
2413     /*
2414      * This is tricky. Although the buffer is truncated, it may be reused
2415      * if blocksize < pagesize and it is attached to the page straddling
2416      * EOF. Since the buffer might have been added to BJ_Forget list of the
2417      * running transaction, journal_get_write_access() won't clear
2418      * b_modified and credit accounting gets confused. So clear b_modified
2419      * here.
2420      */
2421     jh->b_modified = 0;
2422     spin_unlock(&journal->j_list_lock);
2423     spin_unlock(&jh->b_state_lock);
2424     write_unlock(&journal->j_state_lock);
2425     jbd2_journal_put_journal_head(jh);
2426 zap_buffer_unlocked:
2427     clear_buffer_dirty(bh);
2428     J_ASSERT_BH(bh, !buffer_jbddirty(bh));
2429     clear_buffer_mapped(bh);
2430     clear_buffer_req(bh);
2431     clear_buffer_new(bh);
2432     clear_buffer_delay(bh);
2433     clear_buffer_unwritten(bh);
2434     bh->b_bdev = NULL;
2435     return may_free;
2436 }
2437 
2438 /**
2439  * jbd2_journal_invalidate_folio()
2440  * @journal: journal to use for flush...
2441  * @folio:    folio to flush
2442  * @offset:  start of the range to invalidate
2443  * @length:  length of the range to invalidate
2444  *
2445  * Reap page buffers containing data after in the specified range in page.
2446  * Can return -EBUSY if buffers are part of the committing transaction and
2447  * the page is straddling i_size. Caller then has to wait for current commit
2448  * and try again.
2449  */
2450 int jbd2_journal_invalidate_folio(journal_t *journal, struct folio *folio,
2451                 size_t offset, size_t length)
2452 {
2453     struct buffer_head *head, *bh, *next;
2454     unsigned int stop = offset + length;
2455     unsigned int curr_off = 0;
2456     int partial_page = (offset || length < folio_size(folio));
2457     int may_free = 1;
2458     int ret = 0;
2459 
2460     if (!folio_test_locked(folio))
2461         BUG();
2462     head = folio_buffers(folio);
2463     if (!head)
2464         return 0;
2465 
2466     BUG_ON(stop > folio_size(folio) || stop < length);
2467 
2468     /* We will potentially be playing with lists other than just the
2469      * data lists (especially for journaled data mode), so be
2470      * cautious in our locking. */
2471 
2472     bh = head;
2473     do {
2474         unsigned int next_off = curr_off + bh->b_size;
2475         next = bh->b_this_page;
2476 
2477         if (next_off > stop)
2478             return 0;
2479 
2480         if (offset <= curr_off) {
2481             /* This block is wholly outside the truncation point */
2482             lock_buffer(bh);
2483             ret = journal_unmap_buffer(journal, bh, partial_page);
2484             unlock_buffer(bh);
2485             if (ret < 0)
2486                 return ret;
2487             may_free &= ret;
2488         }
2489         curr_off = next_off;
2490         bh = next;
2491 
2492     } while (bh != head);
2493 
2494     if (!partial_page) {
2495         if (may_free && try_to_free_buffers(folio))
2496             J_ASSERT(!folio_buffers(folio));
2497     }
2498     return 0;
2499 }
2500 
2501 /*
2502  * File a buffer on the given transaction list.
2503  */
2504 void __jbd2_journal_file_buffer(struct journal_head *jh,
2505             transaction_t *transaction, int jlist)
2506 {
2507     struct journal_head **list = NULL;
2508     int was_dirty = 0;
2509     struct buffer_head *bh = jh2bh(jh);
2510 
2511     lockdep_assert_held(&jh->b_state_lock);
2512     assert_spin_locked(&transaction->t_journal->j_list_lock);
2513 
2514     J_ASSERT_JH(jh, jh->b_jlist < BJ_Types);
2515     J_ASSERT_JH(jh, jh->b_transaction == transaction ||
2516                 jh->b_transaction == NULL);
2517 
2518     if (jh->b_transaction && jh->b_jlist == jlist)
2519         return;
2520 
2521     if (jlist == BJ_Metadata || jlist == BJ_Reserved ||
2522         jlist == BJ_Shadow || jlist == BJ_Forget) {
2523         /*
2524          * For metadata buffers, we track dirty bit in buffer_jbddirty
2525          * instead of buffer_dirty. We should not see a dirty bit set
2526          * here because we clear it in do_get_write_access but e.g.
2527          * tune2fs can modify the sb and set the dirty bit at any time
2528          * so we try to gracefully handle that.
2529          */
2530         if (buffer_dirty(bh))
2531             warn_dirty_buffer(bh);
2532         if (test_clear_buffer_dirty(bh) ||
2533             test_clear_buffer_jbddirty(bh))
2534             was_dirty = 1;
2535     }
2536 
2537     if (jh->b_transaction)
2538         __jbd2_journal_temp_unlink_buffer(jh);
2539     else
2540         jbd2_journal_grab_journal_head(bh);
2541     jh->b_transaction = transaction;
2542 
2543     switch (jlist) {
2544     case BJ_None:
2545         J_ASSERT_JH(jh, !jh->b_committed_data);
2546         J_ASSERT_JH(jh, !jh->b_frozen_data);
2547         return;
2548     case BJ_Metadata:
2549         transaction->t_nr_buffers++;
2550         list = &transaction->t_buffers;
2551         break;
2552     case BJ_Forget:
2553         list = &transaction->t_forget;
2554         break;
2555     case BJ_Shadow:
2556         list = &transaction->t_shadow_list;
2557         break;
2558     case BJ_Reserved:
2559         list = &transaction->t_reserved_list;
2560         break;
2561     }
2562 
2563     __blist_add_buffer(list, jh);
2564     jh->b_jlist = jlist;
2565 
2566     if (was_dirty)
2567         set_buffer_jbddirty(bh);
2568 }
2569 
2570 void jbd2_journal_file_buffer(struct journal_head *jh,
2571                 transaction_t *transaction, int jlist)
2572 {
2573     spin_lock(&jh->b_state_lock);
2574     spin_lock(&transaction->t_journal->j_list_lock);
2575     __jbd2_journal_file_buffer(jh, transaction, jlist);
2576     spin_unlock(&transaction->t_journal->j_list_lock);
2577     spin_unlock(&jh->b_state_lock);
2578 }
2579 
2580 /*
2581  * Remove a buffer from its current buffer list in preparation for
2582  * dropping it from its current transaction entirely.  If the buffer has
2583  * already started to be used by a subsequent transaction, refile the
2584  * buffer on that transaction's metadata list.
2585  *
2586  * Called under j_list_lock
2587  * Called under jh->b_state_lock
2588  *
2589  * When this function returns true, there's no next transaction to refile to
2590  * and the caller has to drop jh reference through
2591  * jbd2_journal_put_journal_head().
2592  */
2593 bool __jbd2_journal_refile_buffer(struct journal_head *jh)
2594 {
2595     int was_dirty, jlist;
2596     struct buffer_head *bh = jh2bh(jh);
2597 
2598     lockdep_assert_held(&jh->b_state_lock);
2599     if (jh->b_transaction)
2600         assert_spin_locked(&jh->b_transaction->t_journal->j_list_lock);
2601 
2602     /* If the buffer is now unused, just drop it. */
2603     if (jh->b_next_transaction == NULL) {
2604         __jbd2_journal_unfile_buffer(jh);
2605         return true;
2606     }
2607 
2608     /*
2609      * It has been modified by a later transaction: add it to the new
2610      * transaction's metadata list.
2611      */
2612 
2613     was_dirty = test_clear_buffer_jbddirty(bh);
2614     __jbd2_journal_temp_unlink_buffer(jh);
2615 
2616     /*
2617      * b_transaction must be set, otherwise the new b_transaction won't
2618      * be holding jh reference
2619      */
2620     J_ASSERT_JH(jh, jh->b_transaction != NULL);
2621 
2622     /*
2623      * We set b_transaction here because b_next_transaction will inherit
2624      * our jh reference and thus __jbd2_journal_file_buffer() must not
2625      * take a new one.
2626      */
2627     WRITE_ONCE(jh->b_transaction, jh->b_next_transaction);
2628     WRITE_ONCE(jh->b_next_transaction, NULL);
2629     if (buffer_freed(bh))
2630         jlist = BJ_Forget;
2631     else if (jh->b_modified)
2632         jlist = BJ_Metadata;
2633     else
2634         jlist = BJ_Reserved;
2635     __jbd2_journal_file_buffer(jh, jh->b_transaction, jlist);
2636     J_ASSERT_JH(jh, jh->b_transaction->t_state == T_RUNNING);
2637 
2638     if (was_dirty)
2639         set_buffer_jbddirty(bh);
2640     return false;
2641 }
2642 
2643 /*
2644  * __jbd2_journal_refile_buffer() with necessary locking added. We take our
2645  * bh reference so that we can safely unlock bh.
2646  *
2647  * The jh and bh may be freed by this call.
2648  */
2649 void jbd2_journal_refile_buffer(journal_t *journal, struct journal_head *jh)
2650 {
2651     bool drop;
2652 
2653     spin_lock(&jh->b_state_lock);
2654     spin_lock(&journal->j_list_lock);
2655     drop = __jbd2_journal_refile_buffer(jh);
2656     spin_unlock(&jh->b_state_lock);
2657     spin_unlock(&journal->j_list_lock);
2658     if (drop)
2659         jbd2_journal_put_journal_head(jh);
2660 }
2661 
2662 /*
2663  * File inode in the inode list of the handle's transaction
2664  */
2665 static int jbd2_journal_file_inode(handle_t *handle, struct jbd2_inode *jinode,
2666         unsigned long flags, loff_t start_byte, loff_t end_byte)
2667 {
2668     transaction_t *transaction = handle->h_transaction;
2669     journal_t *journal;
2670 
2671     if (is_handle_aborted(handle))
2672         return -EROFS;
2673     journal = transaction->t_journal;
2674 
2675     jbd2_debug(4, "Adding inode %lu, tid:%d\n", jinode->i_vfs_inode->i_ino,
2676             transaction->t_tid);
2677 
2678     spin_lock(&journal->j_list_lock);
2679     jinode->i_flags |= flags;
2680 
2681     if (jinode->i_dirty_end) {
2682         jinode->i_dirty_start = min(jinode->i_dirty_start, start_byte);
2683         jinode->i_dirty_end = max(jinode->i_dirty_end, end_byte);
2684     } else {
2685         jinode->i_dirty_start = start_byte;
2686         jinode->i_dirty_end = end_byte;
2687     }
2688 
2689     /* Is inode already attached where we need it? */
2690     if (jinode->i_transaction == transaction ||
2691         jinode->i_next_transaction == transaction)
2692         goto done;
2693 
2694     /*
2695      * We only ever set this variable to 1 so the test is safe. Since
2696      * t_need_data_flush is likely to be set, we do the test to save some
2697      * cacheline bouncing
2698      */
2699     if (!transaction->t_need_data_flush)
2700         transaction->t_need_data_flush = 1;
2701     /* On some different transaction's list - should be
2702      * the committing one */
2703     if (jinode->i_transaction) {
2704         J_ASSERT(jinode->i_next_transaction == NULL);
2705         J_ASSERT(jinode->i_transaction ==
2706                     journal->j_committing_transaction);
2707         jinode->i_next_transaction = transaction;
2708         goto done;
2709     }
2710     /* Not on any transaction list... */
2711     J_ASSERT(!jinode->i_next_transaction);
2712     jinode->i_transaction = transaction;
2713     list_add(&jinode->i_list, &transaction->t_inode_list);
2714 done:
2715     spin_unlock(&journal->j_list_lock);
2716 
2717     return 0;
2718 }
2719 
2720 int jbd2_journal_inode_ranged_write(handle_t *handle,
2721         struct jbd2_inode *jinode, loff_t start_byte, loff_t length)
2722 {
2723     return jbd2_journal_file_inode(handle, jinode,
2724             JI_WRITE_DATA | JI_WAIT_DATA, start_byte,
2725             start_byte + length - 1);
2726 }
2727 
2728 int jbd2_journal_inode_ranged_wait(handle_t *handle, struct jbd2_inode *jinode,
2729         loff_t start_byte, loff_t length)
2730 {
2731     return jbd2_journal_file_inode(handle, jinode, JI_WAIT_DATA,
2732             start_byte, start_byte + length - 1);
2733 }
2734 
2735 /*
2736  * File truncate and transaction commit interact with each other in a
2737  * non-trivial way.  If a transaction writing data block A is
2738  * committing, we cannot discard the data by truncate until we have
2739  * written them.  Otherwise if we crashed after the transaction with
2740  * write has committed but before the transaction with truncate has
2741  * committed, we could see stale data in block A.  This function is a
2742  * helper to solve this problem.  It starts writeout of the truncated
2743  * part in case it is in the committing transaction.
2744  *
2745  * Filesystem code must call this function when inode is journaled in
2746  * ordered mode before truncation happens and after the inode has been
2747  * placed on orphan list with the new inode size. The second condition
2748  * avoids the race that someone writes new data and we start
2749  * committing the transaction after this function has been called but
2750  * before a transaction for truncate is started (and furthermore it
2751  * allows us to optimize the case where the addition to orphan list
2752  * happens in the same transaction as write --- we don't have to write
2753  * any data in such case).
2754  */
2755 int jbd2_journal_begin_ordered_truncate(journal_t *journal,
2756                     struct jbd2_inode *jinode,
2757                     loff_t new_size)
2758 {
2759     transaction_t *inode_trans, *commit_trans;
2760     int ret = 0;
2761 
2762     /* This is a quick check to avoid locking if not necessary */
2763     if (!jinode->i_transaction)
2764         goto out;
2765     /* Locks are here just to force reading of recent values, it is
2766      * enough that the transaction was not committing before we started
2767      * a transaction adding the inode to orphan list */
2768     read_lock(&journal->j_state_lock);
2769     commit_trans = journal->j_committing_transaction;
2770     read_unlock(&journal->j_state_lock);
2771     spin_lock(&journal->j_list_lock);
2772     inode_trans = jinode->i_transaction;
2773     spin_unlock(&journal->j_list_lock);
2774     if (inode_trans == commit_trans) {
2775         ret = filemap_fdatawrite_range(jinode->i_vfs_inode->i_mapping,
2776             new_size, LLONG_MAX);
2777         if (ret)
2778             jbd2_journal_abort(journal, ret);
2779     }
2780 out:
2781     return ret;
2782 }