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