blob: 3c1c31321d9bdde030191cae31cadd9856d597fe [file] [log] [blame]
Dave Kleikamp470decc2006-10-11 01:20:57 -07001/*
Mingming Caof7f4bcc2006-10-11 01:20:59 -07002 * linux/fs/jbd2/commit.c
Dave Kleikamp470decc2006-10-11 01:20:57 -07003 *
4 * Written by Stephen C. Tweedie <sct@redhat.com>, 1998
5 *
6 * Copyright 1998 Red Hat corp --- All Rights Reserved
7 *
8 * This file is part of the Linux kernel and is made available under
9 * the terms of the GNU General Public License, version 2, or at your
10 * option, any later version, incorporated herein by reference.
11 *
12 * Journal commit routines for the generic filesystem journaling code;
13 * part of the ext2fs journaling system.
14 */
15
16#include <linux/time.h>
17#include <linux/fs.h>
Mingming Caof7f4bcc2006-10-11 01:20:59 -070018#include <linux/jbd2.h>
Dave Kleikamp470decc2006-10-11 01:20:57 -070019#include <linux/errno.h>
20#include <linux/slab.h>
21#include <linux/mm.h>
22#include <linux/pagemap.h>
Johann Lombardi8e85fb32008-01-28 23:58:27 -050023#include <linux/jiffies.h>
Girish Shilamkar818d2762008-01-28 23:58:27 -050024#include <linux/crc32.h>
Aneesh Kumar K.Vcd1aac32008-07-11 19:27:31 -040025#include <linux/writeback.h>
26#include <linux/backing-dev.h>
Theodore Ts'ofd984962009-01-05 21:34:13 -050027#include <linux/bio.h>
Theodore Ts'o0e3d2a62009-09-11 09:30:12 -040028#include <linux/blkdev.h>
Brian King39e3ac22010-10-27 21:25:12 -040029#include <linux/bitops.h>
Theodore Ts'o879c5e62009-06-17 11:47:48 -040030#include <trace/events/jbd2.h>
Dave Kleikamp470decc2006-10-11 01:20:57 -070031
32/*
Jan Karab34090e2013-06-04 12:08:56 -040033 * IO end handler for temporary buffer_heads handling writes to the journal.
Dave Kleikamp470decc2006-10-11 01:20:57 -070034 */
35static void journal_end_buffer_io_sync(struct buffer_head *bh, int uptodate)
36{
Jan Karab34090e2013-06-04 12:08:56 -040037 struct buffer_head *orig_bh = bh->b_private;
38
Dave Kleikamp470decc2006-10-11 01:20:57 -070039 BUFFER_TRACE(bh, "");
40 if (uptodate)
41 set_buffer_uptodate(bh);
42 else
43 clear_buffer_uptodate(bh);
Jan Karab34090e2013-06-04 12:08:56 -040044 if (orig_bh) {
45 clear_bit_unlock(BH_Shadow, &orig_bh->b_state);
Peter Zijlstra4e857c52014-03-17 18:06:10 +010046 smp_mb__after_atomic();
Jan Karab34090e2013-06-04 12:08:56 -040047 wake_up_bit(&orig_bh->b_state, BH_Shadow);
48 }
Dave Kleikamp470decc2006-10-11 01:20:57 -070049 unlock_buffer(bh);
50}
51
52/*
Jan Kara87c89c22008-07-11 19:27:31 -040053 * When an ext4 file is truncated, it is possible that some pages are not
54 * successfully freed, because they are attached to a committing transaction.
Dave Kleikamp470decc2006-10-11 01:20:57 -070055 * After the transaction commits, these pages are left on the LRU, with no
56 * ->mapping, and with attached buffers. These pages are trivially reclaimable
57 * by the VM, but their apparent absence upsets the VM accounting, and it makes
58 * the numbers in /proc/meminfo look odd.
59 *
60 * So here, we have a buffer which has just come off the forget list. Look to
61 * see if we can strip all buffers from the backing page.
62 *
63 * Called under lock_journal(), and possibly under journal_datalist_lock. The
64 * caller provided us with a ref against the buffer, and we drop that here.
65 */
66static void release_buffer_page(struct buffer_head *bh)
67{
68 struct page *page;
69
70 if (buffer_dirty(bh))
71 goto nope;
72 if (atomic_read(&bh->b_count) != 1)
73 goto nope;
74 page = bh->b_page;
75 if (!page)
76 goto nope;
77 if (page->mapping)
78 goto nope;
79
80 /* OK, it's a truncated page */
Nick Piggin529ae9a2008-08-02 12:01:03 +020081 if (!trylock_page(page))
Dave Kleikamp470decc2006-10-11 01:20:57 -070082 goto nope;
83
Kirill A. Shutemov09cbfea2016-04-01 15:29:47 +030084 get_page(page);
Dave Kleikamp470decc2006-10-11 01:20:57 -070085 __brelse(bh);
86 try_to_free_buffers(page);
87 unlock_page(page);
Kirill A. Shutemov09cbfea2016-04-01 15:29:47 +030088 put_page(page);
Dave Kleikamp470decc2006-10-11 01:20:57 -070089 return;
90
91nope:
92 __brelse(bh);
93}
94
Jan Karae5a120a2013-06-04 12:06:01 -040095static void jbd2_commit_block_csum_set(journal_t *j, struct buffer_head *bh)
Darrick J. Wong1f56c582012-05-27 08:10:25 -040096{
97 struct commit_header *h;
98 __u32 csum;
99
Darrick J. Wongdb9ee222014-08-27 18:40:07 -0400100 if (!jbd2_journal_has_csum_v2or3(j))
Darrick J. Wong1f56c582012-05-27 08:10:25 -0400101 return;
102
Jan Karae5a120a2013-06-04 12:06:01 -0400103 h = (struct commit_header *)(bh->b_data);
Darrick J. Wong1f56c582012-05-27 08:10:25 -0400104 h->h_chksum_type = 0;
105 h->h_chksum_size = 0;
106 h->h_chksum[0] = 0;
Jan Karae5a120a2013-06-04 12:06:01 -0400107 csum = jbd2_chksum(j, j->j_csum_seed, bh->b_data, j->j_blocksize);
Darrick J. Wong1f56c582012-05-27 08:10:25 -0400108 h->h_chksum[0] = cpu_to_be32(csum);
109}
110
Dave Kleikamp470decc2006-10-11 01:20:57 -0700111/*
Girish Shilamkar818d2762008-01-28 23:58:27 -0500112 * Done it all: now submit the commit record. We should have
Dave Kleikamp470decc2006-10-11 01:20:57 -0700113 * cleaned up our previous buffers by now, so if we are in abort
114 * mode we can now just skip the rest of the journal write
115 * entirely.
116 *
117 * Returns 1 if the journal needs to be aborted or 0 on success
118 */
Girish Shilamkar818d2762008-01-28 23:58:27 -0500119static int journal_submit_commit_record(journal_t *journal,
120 transaction_t *commit_transaction,
121 struct buffer_head **cbh,
122 __u32 crc32_sum)
Dave Kleikamp470decc2006-10-11 01:20:57 -0700123{
Girish Shilamkar818d2762008-01-28 23:58:27 -0500124 struct commit_header *tmp;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700125 struct buffer_head *bh;
Girish Shilamkar818d2762008-01-28 23:58:27 -0500126 int ret;
Arnd Bergmannabcfb5d2016-06-30 11:49:01 -0400127 struct timespec64 now = current_kernel_time64();
Dave Kleikamp470decc2006-10-11 01:20:57 -0700128
Zhang Huan6cba6112011-04-05 19:16:20 -0400129 *cbh = NULL;
130
Dave Kleikamp470decc2006-10-11 01:20:57 -0700131 if (is_journal_aborted(journal))
132 return 0;
133
Jan Kara32ab6712016-02-22 23:17:15 -0500134 bh = jbd2_journal_get_descriptor_buffer(commit_transaction,
135 JBD2_COMMIT_BLOCK);
Jan Karae5a120a2013-06-04 12:06:01 -0400136 if (!bh)
Dave Kleikamp470decc2006-10-11 01:20:57 -0700137 return 1;
138
Girish Shilamkar818d2762008-01-28 23:58:27 -0500139 tmp = (struct commit_header *)bh->b_data;
Theodore Ts'o736603a2008-07-11 19:27:31 -0400140 tmp->h_commit_sec = cpu_to_be64(now.tv_sec);
141 tmp->h_commit_nsec = cpu_to_be32(now.tv_nsec);
Girish Shilamkar818d2762008-01-28 23:58:27 -0500142
Darrick J. Wong56316a02015-10-17 16:18:45 -0400143 if (jbd2_has_feature_checksum(journal)) {
Girish Shilamkar818d2762008-01-28 23:58:27 -0500144 tmp->h_chksum_type = JBD2_CRC32_CHKSUM;
145 tmp->h_chksum_size = JBD2_CRC32_CHKSUM_SIZE;
146 tmp->h_chksum[0] = cpu_to_be32(crc32_sum);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700147 }
Jan Karae5a120a2013-06-04 12:06:01 -0400148 jbd2_commit_block_csum_set(journal, bh);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700149
Jan Karae5a120a2013-06-04 12:06:01 -0400150 BUFFER_TRACE(bh, "submit commit block");
Girish Shilamkar818d2762008-01-28 23:58:27 -0500151 lock_buffer(bh);
Theodore Ts'o45a90bf2008-10-06 12:04:02 -0400152 clear_buffer_dirty(bh);
Girish Shilamkar818d2762008-01-28 23:58:27 -0500153 set_buffer_uptodate(bh);
154 bh->b_end_io = journal_end_buffer_io_sync;
155
156 if (journal->j_flags & JBD2_BARRIER &&
Darrick J. Wong56316a02015-10-17 16:18:45 -0400157 !jbd2_has_feature_async_commit(journal))
Christoph Hellwig70fd7612016-11-01 07:40:10 -0600158 ret = submit_bh(REQ_OP_WRITE,
159 REQ_SYNC | REQ_PREFLUSH | REQ_FUA, bh);
Christoph Hellwig9c355752010-08-18 05:29:17 -0400160 else
Christoph Hellwig70fd7612016-11-01 07:40:10 -0600161 ret = submit_bh(REQ_OP_WRITE, REQ_SYNC, bh);
Christoph Hellwig9c355752010-08-18 05:29:17 -0400162
Girish Shilamkar818d2762008-01-28 23:58:27 -0500163 *cbh = bh;
164 return ret;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700165}
166
Girish Shilamkar818d2762008-01-28 23:58:27 -0500167/*
168 * This function along with journal_submit_commit_record
169 * allows to write the commit record asynchronously.
170 */
Theodore Ts'ofd984962009-01-05 21:34:13 -0500171static int journal_wait_on_commit_record(journal_t *journal,
172 struct buffer_head *bh)
Girish Shilamkar818d2762008-01-28 23:58:27 -0500173{
174 int ret = 0;
175
176 clear_buffer_dirty(bh);
177 wait_on_buffer(bh);
178
179 if (unlikely(!buffer_uptodate(bh)))
180 ret = -EIO;
181 put_bh(bh); /* One for getblk() */
Girish Shilamkar818d2762008-01-28 23:58:27 -0500182
183 return ret;
184}
185
186/*
Aneesh Kumar K.Vcd1aac32008-07-11 19:27:31 -0400187 * write the filemap data using writepage() address_space_operations.
188 * We don't do block allocation here even for delalloc. We don't
189 * use writepages() because with dealyed allocation we may be doing
190 * block allocation in writepages().
191 */
192static int journal_submit_inode_data_buffers(struct address_space *mapping)
193{
194 int ret;
195 struct writeback_control wbc = {
196 .sync_mode = WB_SYNC_ALL,
197 .nr_to_write = mapping->nrpages * 2,
198 .range_start = 0,
199 .range_end = i_size_read(mapping->host),
Aneesh Kumar K.Vcd1aac32008-07-11 19:27:31 -0400200 };
201
202 ret = generic_writepages(mapping, &wbc);
203 return ret;
204}
205
206/*
Jan Karac851ed52008-07-11 19:27:31 -0400207 * Submit all the data buffers of inode associated with the transaction to
208 * disk.
209 *
210 * We are in a committing transaction. Therefore no new inode can be added to
211 * our inode list. We use JI_COMMIT_RUNNING flag to protect inode we currently
212 * operate on from being released while we write out pages.
213 */
Aneesh Kumar K.Vcd1aac32008-07-11 19:27:31 -0400214static int journal_submit_data_buffers(journal_t *journal,
Jan Karac851ed52008-07-11 19:27:31 -0400215 transaction_t *commit_transaction)
216{
217 struct jbd2_inode *jinode;
218 int err, ret = 0;
219 struct address_space *mapping;
220
221 spin_lock(&journal->j_list_lock);
222 list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) {
Jan Kara41617e12016-04-24 00:56:07 -0400223 if (!(jinode->i_flags & JI_WRITE_DATA))
224 continue;
Jan Karac851ed52008-07-11 19:27:31 -0400225 mapping = jinode->i_vfs_inode->i_mapping;
Jan Karacb0d9d42016-02-22 23:20:30 -0500226 jinode->i_flags |= JI_COMMIT_RUNNING;
Jan Karac851ed52008-07-11 19:27:31 -0400227 spin_unlock(&journal->j_list_lock);
Aneesh Kumar K.Vcd1aac32008-07-11 19:27:31 -0400228 /*
229 * submit the inode data buffers. We use writepage
230 * instead of writepages. Because writepages can do
231 * block allocation with delalloc. We need to write
232 * only allocated blocks here.
233 */
Theodore Ts'o879c5e62009-06-17 11:47:48 -0400234 trace_jbd2_submit_inode_data(jinode->i_vfs_inode);
Aneesh Kumar K.Vcd1aac32008-07-11 19:27:31 -0400235 err = journal_submit_inode_data_buffers(mapping);
Jan Karac851ed52008-07-11 19:27:31 -0400236 if (!ret)
237 ret = err;
238 spin_lock(&journal->j_list_lock);
239 J_ASSERT(jinode->i_transaction == commit_transaction);
Jan Karacb0d9d42016-02-22 23:20:30 -0500240 jinode->i_flags &= ~JI_COMMIT_RUNNING;
241 smp_mb();
Jan Karac851ed52008-07-11 19:27:31 -0400242 wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING);
243 }
244 spin_unlock(&journal->j_list_lock);
245 return ret;
246}
247
248/*
249 * Wait for data submitted for writeout, refile inodes to proper
250 * transaction if needed.
251 *
252 */
253static int journal_finish_inode_data_buffers(journal_t *journal,
254 transaction_t *commit_transaction)
255{
256 struct jbd2_inode *jinode, *next_i;
257 int err, ret = 0;
258
Aneesh Kumar K.Vcd1aac32008-07-11 19:27:31 -0400259 /* For locking, see the comment in journal_submit_data_buffers() */
Jan Karac851ed52008-07-11 19:27:31 -0400260 spin_lock(&journal->j_list_lock);
261 list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) {
Jan Kara41617e12016-04-24 00:56:07 -0400262 if (!(jinode->i_flags & JI_WAIT_DATA))
263 continue;
Jan Karacb0d9d42016-02-22 23:20:30 -0500264 jinode->i_flags |= JI_COMMIT_RUNNING;
Jan Karac851ed52008-07-11 19:27:31 -0400265 spin_unlock(&journal->j_list_lock);
Jeff Layton76341ca2017-07-06 07:02:22 -0400266 err = filemap_fdatawait_keep_errors(
267 jinode->i_vfs_inode->i_mapping);
268 if (!ret)
269 ret = err;
Jan Karac851ed52008-07-11 19:27:31 -0400270 spin_lock(&journal->j_list_lock);
Jan Karacb0d9d42016-02-22 23:20:30 -0500271 jinode->i_flags &= ~JI_COMMIT_RUNNING;
272 smp_mb();
Jan Karac851ed52008-07-11 19:27:31 -0400273 wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING);
274 }
275
276 /* Now refile inode to proper lists */
277 list_for_each_entry_safe(jinode, next_i,
278 &commit_transaction->t_inode_list, i_list) {
279 list_del(&jinode->i_list);
280 if (jinode->i_next_transaction) {
281 jinode->i_transaction = jinode->i_next_transaction;
282 jinode->i_next_transaction = NULL;
283 list_add(&jinode->i_list,
284 &jinode->i_transaction->t_inode_list);
285 } else {
286 jinode->i_transaction = NULL;
287 }
288 }
289 spin_unlock(&journal->j_list_lock);
290
291 return ret;
292}
293
Girish Shilamkar818d2762008-01-28 23:58:27 -0500294static __u32 jbd2_checksum_data(__u32 crc32_sum, struct buffer_head *bh)
295{
296 struct page *page = bh->b_page;
297 char *addr;
298 __u32 checksum;
299
Cong Wang303a8f22011-11-25 23:14:31 +0800300 addr = kmap_atomic(page);
Girish Shilamkar818d2762008-01-28 23:58:27 -0500301 checksum = crc32_be(crc32_sum,
302 (void *)(addr + offset_in_page(bh->b_data)), bh->b_size);
Cong Wang303a8f22011-11-25 23:14:31 +0800303 kunmap_atomic(addr);
Girish Shilamkar818d2762008-01-28 23:58:27 -0500304
305 return checksum;
306}
307
Darrick J. Wongdb9ee222014-08-27 18:40:07 -0400308static void write_tag_block(journal_t *j, journal_block_tag_t *tag,
Mingming Cao18eba7a2006-10-11 01:21:13 -0700309 unsigned long long block)
Zach Brownb517bea2006-10-11 01:21:08 -0700310{
311 tag->t_blocknr = cpu_to_be32(block & (u32)~0);
Darrick J. Wong56316a02015-10-17 16:18:45 -0400312 if (jbd2_has_feature_64bit(j))
Zach Brownb517bea2006-10-11 01:21:08 -0700313 tag->t_blocknr_high = cpu_to_be32((block >> 31) >> 1);
314}
315
Darrick J. Wongc3900872012-05-27 08:12:12 -0400316static void jbd2_block_tag_csum_set(journal_t *j, journal_block_tag_t *tag,
317 struct buffer_head *bh, __u32 sequence)
318{
Darrick J. Wongdb9ee222014-08-27 18:40:07 -0400319 journal_block_tag3_t *tag3 = (journal_block_tag3_t *)tag;
Darrick J. Wongc3900872012-05-27 08:12:12 -0400320 struct page *page = bh->b_page;
321 __u8 *addr;
Darrick J. Wongeee06c52013-05-28 07:31:59 -0400322 __u32 csum32;
Darrick J. Wong18a6ea12013-08-28 14:59:58 -0400323 __be32 seq;
Darrick J. Wongc3900872012-05-27 08:12:12 -0400324
Darrick J. Wongdb9ee222014-08-27 18:40:07 -0400325 if (!jbd2_journal_has_csum_v2or3(j))
Darrick J. Wongc3900872012-05-27 08:12:12 -0400326 return;
327
Darrick J. Wong18a6ea12013-08-28 14:59:58 -0400328 seq = cpu_to_be32(sequence);
Cong Wang906adea2012-06-23 11:24:48 +0800329 addr = kmap_atomic(page);
Darrick J. Wong18a6ea12013-08-28 14:59:58 -0400330 csum32 = jbd2_chksum(j, j->j_csum_seed, (__u8 *)&seq, sizeof(seq));
Darrick J. Wongeee06c52013-05-28 07:31:59 -0400331 csum32 = jbd2_chksum(j, csum32, addr + offset_in_page(bh->b_data),
332 bh->b_size);
Cong Wang906adea2012-06-23 11:24:48 +0800333 kunmap_atomic(addr);
Darrick J. Wongc3900872012-05-27 08:12:12 -0400334
Darrick J. Wong56316a02015-10-17 16:18:45 -0400335 if (jbd2_has_feature_csum3(j))
Darrick J. Wongdb9ee222014-08-27 18:40:07 -0400336 tag3->t_checksum = cpu_to_be32(csum32);
337 else
338 tag->t_checksum = cpu_to_be16(csum32);
Darrick J. Wongc3900872012-05-27 08:12:12 -0400339}
Dave Kleikamp470decc2006-10-11 01:20:57 -0700340/*
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700341 * jbd2_journal_commit_transaction
Dave Kleikamp470decc2006-10-11 01:20:57 -0700342 *
343 * The primary function for committing a transaction to the log. This
344 * function is called by the journal thread to begin a complete commit.
345 */
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700346void jbd2_journal_commit_transaction(journal_t *journal)
Dave Kleikamp470decc2006-10-11 01:20:57 -0700347{
Johann Lombardi8e85fb32008-01-28 23:58:27 -0500348 struct transaction_stats_s stats;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700349 transaction_t *commit_transaction;
Jan Karae5a120a2013-06-04 12:06:01 -0400350 struct journal_head *jh;
351 struct buffer_head *descriptor;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700352 struct buffer_head **wbuf = journal->j_wbuf;
353 int bufs;
354 int flags;
355 int err;
Mingming Cao18eba7a2006-10-11 01:21:13 -0700356 unsigned long long blocknr;
Josef Bacike07f7182008-11-26 01:14:26 -0500357 ktime_t start_time;
358 u64 commit_time;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700359 char *tagp = NULL;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700360 journal_block_tag_t *tag = NULL;
361 int space_left = 0;
362 int first_tag = 0;
363 int tag_flag;
Dmitry Monakhov794446c2013-04-03 22:06:52 -0400364 int i;
Zach Brownb517bea2006-10-11 01:21:08 -0700365 int tag_bytes = journal_tag_bytes(journal);
Girish Shilamkar818d2762008-01-28 23:58:27 -0500366 struct buffer_head *cbh = NULL; /* For transactional checksums */
367 __u32 crc32_sum = ~0;
Jens Axboe82f04ab2011-03-17 11:01:52 +0100368 struct blk_plug plug;
Jan Kara33395782012-03-13 22:45:38 -0400369 /* Tail of the journal */
370 unsigned long first_block;
371 tid_t first_tid;
372 int update_tail;
Darrick J. Wong3caa4872012-05-27 08:10:22 -0400373 int csum_size = 0;
Jan Karaf5113ef2013-06-04 12:01:45 -0400374 LIST_HEAD(io_bufs);
Jan Karae5a120a2013-06-04 12:06:01 -0400375 LIST_HEAD(log_bufs);
Darrick J. Wong3caa4872012-05-27 08:10:22 -0400376
Darrick J. Wongdb9ee222014-08-27 18:40:07 -0400377 if (jbd2_journal_has_csum_v2or3(journal))
Darrick J. Wong3caa4872012-05-27 08:10:22 -0400378 csum_size = sizeof(struct jbd2_journal_block_tail);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700379
380 /*
381 * First job: lock down the current transaction and wait for
382 * all outstanding updates to complete.
383 */
384
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700385 /* Do we need to erase the effects of a prior jbd2_journal_flush? */
386 if (journal->j_flags & JBD2_FLUSHED) {
Dave Kleikamp470decc2006-10-11 01:20:57 -0700387 jbd_debug(3, "super block updated\n");
Tejun Heo6fa7aa52016-10-28 12:58:12 -0400388 mutex_lock_io(&journal->j_checkpoint_mutex);
Jan Kara79feb522012-03-13 22:22:54 -0400389 /*
390 * We hold j_checkpoint_mutex so tail cannot change under us.
391 * We don't need any special data guarantees for writing sb
392 * since journal is empty and it is ok for write to be
393 * flushed only with transaction commit.
394 */
395 jbd2_journal_update_sb_log_tail(journal,
396 journal->j_tail_sequence,
397 journal->j_tail,
Christoph Hellwig70fd7612016-11-01 07:40:10 -0600398 REQ_SYNC);
Jan Karaa78bb112012-03-13 15:43:04 -0400399 mutex_unlock(&journal->j_checkpoint_mutex);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700400 } else {
401 jbd_debug(3, "superblock not updated\n");
402 }
403
404 J_ASSERT(journal->j_running_transaction != NULL);
405 J_ASSERT(journal->j_committing_transaction == NULL);
406
407 commit_transaction = journal->j_running_transaction;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700408
Theodore Ts'o879c5e62009-06-17 11:47:48 -0400409 trace_jbd2_start_commit(journal, commit_transaction);
Eryu Guanf2a44522011-11-01 19:09:18 -0400410 jbd_debug(1, "JBD2: starting commit of transaction %d\n",
Dave Kleikamp470decc2006-10-11 01:20:57 -0700411 commit_transaction->t_tid);
412
Theodore Ts'oa931da62010-08-03 21:35:12 -0400413 write_lock(&journal->j_state_lock);
Paul Gortmaker3ca841c2013-06-12 22:46:35 -0400414 J_ASSERT(commit_transaction->t_state == T_RUNNING);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700415 commit_transaction->t_state = T_LOCKED;
416
Theodore Ts'o879c5e62009-06-17 11:47:48 -0400417 trace_jbd2_commit_locking(journal, commit_transaction);
Theodore Ts'obf699322009-09-30 00:32:06 -0400418 stats.run.rs_wait = commit_transaction->t_max_wait;
Theodore Ts'o9fff24a2013-02-06 22:30:23 -0500419 stats.run.rs_request_delay = 0;
Theodore Ts'obf699322009-09-30 00:32:06 -0400420 stats.run.rs_locked = jiffies;
Theodore Ts'o9fff24a2013-02-06 22:30:23 -0500421 if (commit_transaction->t_requested)
422 stats.run.rs_request_delay =
423 jbd2_time_diff(commit_transaction->t_requested,
424 stats.run.rs_locked);
Theodore Ts'obf699322009-09-30 00:32:06 -0400425 stats.run.rs_running = jbd2_time_diff(commit_transaction->t_start,
426 stats.run.rs_locked);
Johann Lombardi8e85fb32008-01-28 23:58:27 -0500427
Dave Kleikamp470decc2006-10-11 01:20:57 -0700428 spin_lock(&commit_transaction->t_handle_lock);
Theodore Ts'oa51dca92010-08-02 08:43:25 -0400429 while (atomic_read(&commit_transaction->t_updates)) {
Dave Kleikamp470decc2006-10-11 01:20:57 -0700430 DEFINE_WAIT(wait);
431
432 prepare_to_wait(&journal->j_wait_updates, &wait,
433 TASK_UNINTERRUPTIBLE);
Theodore Ts'oa51dca92010-08-02 08:43:25 -0400434 if (atomic_read(&commit_transaction->t_updates)) {
Dave Kleikamp470decc2006-10-11 01:20:57 -0700435 spin_unlock(&commit_transaction->t_handle_lock);
Theodore Ts'oa931da62010-08-03 21:35:12 -0400436 write_unlock(&journal->j_state_lock);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700437 schedule();
Theodore Ts'oa931da62010-08-03 21:35:12 -0400438 write_lock(&journal->j_state_lock);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700439 spin_lock(&commit_transaction->t_handle_lock);
440 }
441 finish_wait(&journal->j_wait_updates, &wait);
442 }
443 spin_unlock(&commit_transaction->t_handle_lock);
444
Theodore Ts'oa51dca92010-08-02 08:43:25 -0400445 J_ASSERT (atomic_read(&commit_transaction->t_outstanding_credits) <=
Dave Kleikamp470decc2006-10-11 01:20:57 -0700446 journal->j_max_transaction_buffers);
447
448 /*
449 * First thing we are allowed to do is to discard any remaining
450 * BJ_Reserved buffers. Note, it is _not_ permissible to assume
451 * that there are no such buffers: if a large filesystem
452 * operation like a truncate needs to split itself over multiple
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700453 * transactions, then it may try to do a jbd2_journal_restart() while
Dave Kleikamp470decc2006-10-11 01:20:57 -0700454 * there are still BJ_Reserved buffers outstanding. These must
455 * be released cleanly from the current transaction.
456 *
457 * In this case, the filesystem must still reserve write access
458 * again before modifying the buffer in the new transaction, but
459 * we do not require it to remember exactly which old buffers it
460 * has reserved. This is consistent with the existing behaviour
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700461 * that multiple jbd2_journal_get_write_access() calls to the same
Lucas De Marchi25985ed2011-03-30 22:57:33 -0300462 * buffer are perfectly permissible.
Dave Kleikamp470decc2006-10-11 01:20:57 -0700463 */
464 while (commit_transaction->t_reserved_list) {
465 jh = commit_transaction->t_reserved_list;
466 JBUFFER_TRACE(jh, "reserved, unused: refile");
467 /*
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700468 * A jbd2_journal_get_undo_access()+jbd2_journal_release_buffer() may
Dave Kleikamp470decc2006-10-11 01:20:57 -0700469 * leave undo-committed data.
470 */
471 if (jh->b_committed_data) {
472 struct buffer_head *bh = jh2bh(jh);
473
474 jbd_lock_bh_state(bh);
Mingming Caoaf1e76d2007-10-16 18:38:25 -0400475 jbd2_free(jh->b_committed_data, bh->b_size);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700476 jh->b_committed_data = NULL;
477 jbd_unlock_bh_state(bh);
478 }
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700479 jbd2_journal_refile_buffer(journal, jh);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700480 }
481
482 /*
483 * Now try to drop any written-back buffers from the journal's
484 * checkpoint lists. We do this *before* commit because it potentially
485 * frees some memory
486 */
487 spin_lock(&journal->j_list_lock);
Jan Kara841df7df2015-07-28 14:57:14 -0400488 __jbd2_journal_clean_checkpoint_list(journal, false);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700489 spin_unlock(&journal->j_list_lock);
490
Eryu Guanf2a44522011-11-01 19:09:18 -0400491 jbd_debug(3, "JBD2: commit phase 1\n");
Dave Kleikamp470decc2006-10-11 01:20:57 -0700492
493 /*
Yongqiang Yang1ba37262011-12-28 17:46:46 -0500494 * Clear revoked flag to reflect there is no revoked buffers
495 * in the next transaction which is going to be started.
496 */
497 jbd2_clear_buffer_revoked_flags(journal);
498
499 /*
Dave Kleikamp470decc2006-10-11 01:20:57 -0700500 * Switch to a new revoke table.
501 */
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700502 jbd2_journal_switch_revoke_table(journal);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700503
Jan Kara8f7d89f2013-06-04 12:35:11 -0400504 /*
505 * Reserved credits cannot be claimed anymore, free them
506 */
507 atomic_sub(atomic_read(&journal->j_reserved_credits),
508 &commit_transaction->t_outstanding_credits);
509
Theodore Ts'o879c5e62009-06-17 11:47:48 -0400510 trace_jbd2_commit_flushing(journal, commit_transaction);
Theodore Ts'obf699322009-09-30 00:32:06 -0400511 stats.run.rs_flushing = jiffies;
512 stats.run.rs_locked = jbd2_time_diff(stats.run.rs_locked,
513 stats.run.rs_flushing);
Johann Lombardi8e85fb32008-01-28 23:58:27 -0500514
Dave Kleikamp470decc2006-10-11 01:20:57 -0700515 commit_transaction->t_state = T_FLUSH;
516 journal->j_committing_transaction = commit_transaction;
517 journal->j_running_transaction = NULL;
Josef Bacike07f7182008-11-26 01:14:26 -0500518 start_time = ktime_get();
Dave Kleikamp470decc2006-10-11 01:20:57 -0700519 commit_transaction->t_log_start = journal->j_head;
520 wake_up(&journal->j_wait_transaction_locked);
Theodore Ts'oa931da62010-08-03 21:35:12 -0400521 write_unlock(&journal->j_state_lock);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700522
Paul Gortmakercfc7bc82013-06-12 22:56:35 -0400523 jbd_debug(3, "JBD2: commit phase 2a\n");
Dave Kleikamp470decc2006-10-11 01:20:57 -0700524
525 /*
Dave Kleikamp470decc2006-10-11 01:20:57 -0700526 * Now start flushing things to disk, in the order they appear
527 * on the transaction lists. Data blocks go first.
528 */
Aneesh Kumar K.Vcd1aac32008-07-11 19:27:31 -0400529 err = journal_submit_data_buffers(journal, commit_transaction);
Jan Karac851ed52008-07-11 19:27:31 -0400530 if (err)
531 jbd2_journal_abort(journal, err);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700532
Jens Axboe82f04ab2011-03-17 11:01:52 +0100533 blk_start_plug(&plug);
Jan Kara9bcf9762016-02-22 23:07:30 -0500534 jbd2_journal_write_revoke_records(commit_transaction, &log_bufs);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700535
Paul Gortmakercfc7bc82013-06-12 22:56:35 -0400536 jbd_debug(3, "JBD2: commit phase 2b\n");
Dave Kleikamp470decc2006-10-11 01:20:57 -0700537
538 /*
Dave Kleikamp470decc2006-10-11 01:20:57 -0700539 * Way to go: we have now written out all of the data for a
540 * transaction! Now comes the tricky part: we need to write out
541 * metadata. Loop over the transaction's entire buffer list:
542 */
Theodore Ts'oa931da62010-08-03 21:35:12 -0400543 write_lock(&journal->j_state_lock);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700544 commit_transaction->t_state = T_COMMIT;
Theodore Ts'oa931da62010-08-03 21:35:12 -0400545 write_unlock(&journal->j_state_lock);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700546
Theodore Ts'o879c5e62009-06-17 11:47:48 -0400547 trace_jbd2_commit_logging(journal, commit_transaction);
Theodore Ts'obf699322009-09-30 00:32:06 -0400548 stats.run.rs_logging = jiffies;
549 stats.run.rs_flushing = jbd2_time_diff(stats.run.rs_flushing,
550 stats.run.rs_logging);
Theodore Ts'oa51dca92010-08-02 08:43:25 -0400551 stats.run.rs_blocks =
552 atomic_read(&commit_transaction->t_outstanding_credits);
Theodore Ts'obf699322009-09-30 00:32:06 -0400553 stats.run.rs_blocks_logged = 0;
Johann Lombardi8e85fb32008-01-28 23:58:27 -0500554
Josef Bacik1dfc3222008-04-17 10:38:59 -0400555 J_ASSERT(commit_transaction->t_nr_buffers <=
Theodore Ts'oa51dca92010-08-02 08:43:25 -0400556 atomic_read(&commit_transaction->t_outstanding_credits));
Josef Bacik1dfc3222008-04-17 10:38:59 -0400557
Jan Kara87c89c22008-07-11 19:27:31 -0400558 err = 0;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700559 bufs = 0;
Jan Karae5a120a2013-06-04 12:06:01 -0400560 descriptor = NULL;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700561 while (commit_transaction->t_buffers) {
562
563 /* Find the next buffer to be journaled... */
564
565 jh = commit_transaction->t_buffers;
566
567 /* If we're in abort mode, we just un-journal the buffer and
Hidehiro Kawai7ad74452008-10-10 20:29:31 -0400568 release it. */
Dave Kleikamp470decc2006-10-11 01:20:57 -0700569
570 if (is_journal_aborted(journal)) {
Hidehiro Kawai7ad74452008-10-10 20:29:31 -0400571 clear_buffer_jbddirty(jh2bh(jh));
Dave Kleikamp470decc2006-10-11 01:20:57 -0700572 JBUFFER_TRACE(jh, "journal is aborting: refile");
Joel Beckere06c8222008-09-11 15:35:47 -0700573 jbd2_buffer_abort_trigger(jh,
574 jh->b_frozen_data ?
575 jh->b_frozen_triggers :
576 jh->b_triggers);
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700577 jbd2_journal_refile_buffer(journal, jh);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700578 /* If that was the last one, we need to clean up
579 * any descriptor buffers which may have been
580 * already allocated, even if we are now
581 * aborting. */
582 if (!commit_transaction->t_buffers)
583 goto start_journal_io;
584 continue;
585 }
586
587 /* Make sure we have a descriptor block in which to
588 record the metadata buffer. */
589
590 if (!descriptor) {
Dave Kleikamp470decc2006-10-11 01:20:57 -0700591 J_ASSERT (bufs == 0);
592
Eryu Guanf2a44522011-11-01 19:09:18 -0400593 jbd_debug(4, "JBD2: get descriptor\n");
Dave Kleikamp470decc2006-10-11 01:20:57 -0700594
Jan Kara32ab6712016-02-22 23:17:15 -0500595 descriptor = jbd2_journal_get_descriptor_buffer(
596 commit_transaction,
597 JBD2_DESCRIPTOR_BLOCK);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700598 if (!descriptor) {
Jan Karaa7fa2ba2007-10-16 18:38:25 -0400599 jbd2_journal_abort(journal, -EIO);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700600 continue;
601 }
602
Eryu Guanf2a44522011-11-01 19:09:18 -0400603 jbd_debug(4, "JBD2: got buffer %llu (%p)\n",
Jan Karae5a120a2013-06-04 12:06:01 -0400604 (unsigned long long)descriptor->b_blocknr,
605 descriptor->b_data);
Jan Karae5a120a2013-06-04 12:06:01 -0400606 tagp = &descriptor->b_data[sizeof(journal_header_t)];
607 space_left = descriptor->b_size -
608 sizeof(journal_header_t);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700609 first_tag = 1;
Jan Karae5a120a2013-06-04 12:06:01 -0400610 set_buffer_jwrite(descriptor);
611 set_buffer_dirty(descriptor);
612 wbuf[bufs++] = descriptor;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700613
614 /* Record it so that we can wait for IO
615 completion later */
Jan Karae5a120a2013-06-04 12:06:01 -0400616 BUFFER_TRACE(descriptor, "ph3: file as descriptor");
617 jbd2_file_log_bh(&log_bufs, descriptor);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700618 }
619
620 /* Where is the buffer to be written? */
621
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700622 err = jbd2_journal_next_log_block(journal, &blocknr);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700623 /* If the block mapping failed, just abandon the buffer
624 and repeat this loop: we'll fall into the
625 refile-on-abort condition above. */
626 if (err) {
Jan Karaa7fa2ba2007-10-16 18:38:25 -0400627 jbd2_journal_abort(journal, err);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700628 continue;
629 }
630
631 /*
632 * start_this_handle() uses t_outstanding_credits to determine
633 * the free space in the log, but this counter is changed
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700634 * by jbd2_journal_next_log_block() also.
Dave Kleikamp470decc2006-10-11 01:20:57 -0700635 */
Theodore Ts'oa51dca92010-08-02 08:43:25 -0400636 atomic_dec(&commit_transaction->t_outstanding_credits);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700637
638 /* Bump b_count to prevent truncate from stumbling over
639 the shadowed buffer! @@@ This can go if we ever get
Jan Karaf5113ef2013-06-04 12:01:45 -0400640 rid of the shadow pairing of buffers. */
Dave Kleikamp470decc2006-10-11 01:20:57 -0700641 atomic_inc(&jh2bh(jh)->b_count);
642
Dave Kleikamp470decc2006-10-11 01:20:57 -0700643 /*
Jan Karaf5113ef2013-06-04 12:01:45 -0400644 * Make a temporary IO buffer with which to write it out
645 * (this will requeue the metadata buffer to BJ_Shadow).
Dave Kleikamp470decc2006-10-11 01:20:57 -0700646 */
Jan Karaf5113ef2013-06-04 12:01:45 -0400647 set_bit(BH_JWrite, &jh2bh(jh)->b_state);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700648 JBUFFER_TRACE(jh, "ph3: write metadata");
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700649 flags = jbd2_journal_write_metadata_buffer(commit_transaction,
Jan Karaf5113ef2013-06-04 12:01:45 -0400650 jh, &wbuf[bufs], blocknr);
Theodore Ts'oe6ec1162009-12-01 09:04:42 -0500651 if (flags < 0) {
652 jbd2_journal_abort(journal, flags);
653 continue;
654 }
Jan Karaf5113ef2013-06-04 12:01:45 -0400655 jbd2_file_log_bh(&io_bufs, wbuf[bufs]);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700656
657 /* Record the new block's tag in the current descriptor
658 buffer */
659
660 tag_flag = 0;
661 if (flags & 1)
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700662 tag_flag |= JBD2_FLAG_ESCAPE;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700663 if (!first_tag)
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700664 tag_flag |= JBD2_FLAG_SAME_UUID;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700665
666 tag = (journal_block_tag_t *) tagp;
Darrick J. Wongdb9ee222014-08-27 18:40:07 -0400667 write_tag_block(journal, tag, jh2bh(jh)->b_blocknr);
Darrick J. Wong8f888ef2012-05-22 22:43:41 -0400668 tag->t_flags = cpu_to_be16(tag_flag);
Jan Karaf5113ef2013-06-04 12:01:45 -0400669 jbd2_block_tag_csum_set(journal, tag, wbuf[bufs],
Darrick J. Wongc3900872012-05-27 08:12:12 -0400670 commit_transaction->t_tid);
Zach Brownb517bea2006-10-11 01:21:08 -0700671 tagp += tag_bytes;
672 space_left -= tag_bytes;
Jan Karaf5113ef2013-06-04 12:01:45 -0400673 bufs++;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700674
675 if (first_tag) {
676 memcpy (tagp, journal->j_uuid, 16);
677 tagp += 16;
678 space_left -= 16;
679 first_tag = 0;
680 }
681
682 /* If there's no more to do, or if the descriptor is full,
683 let the IO rip! */
684
685 if (bufs == journal->j_wbufsize ||
686 commit_transaction->t_buffers == NULL ||
Darrick J. Wong3caa4872012-05-27 08:10:22 -0400687 space_left < tag_bytes + 16 + csum_size) {
Dave Kleikamp470decc2006-10-11 01:20:57 -0700688
Eryu Guanf2a44522011-11-01 19:09:18 -0400689 jbd_debug(4, "JBD2: Submit %d IOs\n", bufs);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700690
691 /* Write an end-of-descriptor marker before
692 submitting the IOs. "tag" still points to
693 the last tag we set up. */
694
Darrick J. Wong8f888ef2012-05-22 22:43:41 -0400695 tag->t_flags |= cpu_to_be16(JBD2_FLAG_LAST_TAG);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700696
Jan Kara1101cd42016-02-22 23:19:09 -0500697 jbd2_descriptor_block_csum_set(journal, descriptor);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700698start_journal_io:
699 for (i = 0; i < bufs; i++) {
700 struct buffer_head *bh = wbuf[i];
Girish Shilamkar818d2762008-01-28 23:58:27 -0500701 /*
702 * Compute checksum.
703 */
Darrick J. Wong56316a02015-10-17 16:18:45 -0400704 if (jbd2_has_feature_checksum(journal)) {
Girish Shilamkar818d2762008-01-28 23:58:27 -0500705 crc32_sum =
706 jbd2_checksum_data(crc32_sum, bh);
707 }
708
Dave Kleikamp470decc2006-10-11 01:20:57 -0700709 lock_buffer(bh);
710 clear_buffer_dirty(bh);
711 set_buffer_uptodate(bh);
712 bh->b_end_io = journal_end_buffer_io_sync;
Christoph Hellwig70fd7612016-11-01 07:40:10 -0600713 submit_bh(REQ_OP_WRITE, REQ_SYNC, bh);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700714 }
715 cond_resched();
Theodore Ts'obf699322009-09-30 00:32:06 -0400716 stats.run.rs_blocks_logged += bufs;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700717
718 /* Force a new descriptor to be generated next
719 time round the loop. */
720 descriptor = NULL;
721 bufs = 0;
722 }
723 }
724
Jan Karac851ed52008-07-11 19:27:31 -0400725 err = journal_finish_inode_data_buffers(journal, commit_transaction);
Hidehiro Kawaie9e34f42008-07-31 22:26:04 -0400726 if (err) {
Hidehiro Kawaie9e34f42008-07-31 22:26:04 -0400727 printk(KERN_WARNING
728 "JBD2: Detected IO errors while flushing file data "
Theodore Ts'o05496762008-09-16 14:36:17 -0400729 "on %s\n", journal->j_devname);
Hidehiro Kawai5bf56832008-10-10 22:12:43 -0400730 if (journal->j_flags & JBD2_ABORT_ON_SYNCDATA_ERR)
731 jbd2_journal_abort(journal, err);
Hidehiro Kawaie9e34f42008-07-31 22:26:04 -0400732 err = 0;
733 }
Jan Karac851ed52008-07-11 19:27:31 -0400734
Jan Kara33395782012-03-13 22:45:38 -0400735 /*
736 * Get current oldest transaction in the log before we issue flush
737 * to the filesystem device. After the flush we can be sure that
738 * blocks of all older transactions are checkpointed to persistent
739 * storage and we will be safe to update journal start in the
740 * superblock with the numbers we get here.
741 */
742 update_tail =
743 jbd2_journal_get_log_tail(journal, &first_tid, &first_block);
744
Jan Karabbd2be32011-05-24 11:59:18 -0400745 write_lock(&journal->j_state_lock);
Jan Kara33395782012-03-13 22:45:38 -0400746 if (update_tail) {
747 long freed = first_block - journal->j_tail;
748
749 if (first_block < journal->j_tail)
750 freed += journal->j_last - journal->j_first;
751 /* Update tail only if we free significant amount of space */
752 if (freed < journal->j_maxlen / 4)
753 update_tail = 0;
754 }
Jan Karabbd2be32011-05-24 11:59:18 -0400755 J_ASSERT(commit_transaction->t_state == T_COMMIT);
756 commit_transaction->t_state = T_COMMIT_DFLUSH;
757 write_unlock(&journal->j_state_lock);
Jan Kara33395782012-03-13 22:45:38 -0400758
Girish Shilamkar818d2762008-01-28 23:58:27 -0500759 /*
760 * If the journal is not located on the file system device,
761 * then we must flush the file system device before we issue
762 * the commit record
763 */
Jan Kara81be12c2011-05-24 11:52:40 -0400764 if (commit_transaction->t_need_data_flush &&
Girish Shilamkar818d2762008-01-28 23:58:27 -0500765 (journal->j_fs_dev != journal->j_dev) &&
766 (journal->j_flags & JBD2_BARRIER))
Shaohua Li99aa7842012-04-13 10:27:35 +0800767 blkdev_issue_flush(journal->j_fs_dev, GFP_NOFS, NULL);
Girish Shilamkar818d2762008-01-28 23:58:27 -0500768
769 /* Done it all: now write the commit record asynchronously. */
Darrick J. Wong56316a02015-10-17 16:18:45 -0400770 if (jbd2_has_feature_async_commit(journal)) {
Girish Shilamkar818d2762008-01-28 23:58:27 -0500771 err = journal_submit_commit_record(journal, commit_transaction,
Dave Kleikamp470decc2006-10-11 01:20:57 -0700772 &cbh, crc32_sum);
773 if (err)
774 __jbd2_journal_abort_hard(journal);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700775 }
776
Jens Axboe82f04ab2011-03-17 11:01:52 +0100777 blk_finish_plug(&plug);
778
Dave Kleikamp470decc2006-10-11 01:20:57 -0700779 /* Lo and behold: we have just managed to send a transaction to
780 the log. Before we can commit it, wait for the IO so far to
781 complete. Control buffers being written are on the
782 transaction's t_log_list queue, and metadata buffers are on
Jan Karaf5113ef2013-06-04 12:01:45 -0400783 the io_bufs list.
Dave Kleikamp470decc2006-10-11 01:20:57 -0700784
785 Wait for the buffers in reverse order. That way we are
786 less likely to be woken up until all IOs have completed, and
787 so we incur less scheduling load.
788 */
789
Eryu Guanf2a44522011-11-01 19:09:18 -0400790 jbd_debug(3, "JBD2: commit phase 3\n");
Dave Kleikamp470decc2006-10-11 01:20:57 -0700791
Jan Karaf5113ef2013-06-04 12:01:45 -0400792 while (!list_empty(&io_bufs)) {
793 struct buffer_head *bh = list_entry(io_bufs.prev,
794 struct buffer_head,
795 b_assoc_buffers);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700796
Jan Karaf5113ef2013-06-04 12:01:45 -0400797 wait_on_buffer(bh);
798 cond_resched();
Dave Kleikamp470decc2006-10-11 01:20:57 -0700799
800 if (unlikely(!buffer_uptodate(bh)))
801 err = -EIO;
Jan Karaf5113ef2013-06-04 12:01:45 -0400802 jbd2_unfile_log_bh(bh);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700803
804 /*
Jan Karaf5113ef2013-06-04 12:01:45 -0400805 * The list contains temporary buffer heads created by
806 * jbd2_journal_write_metadata_buffer().
Dave Kleikamp470decc2006-10-11 01:20:57 -0700807 */
808 BUFFER_TRACE(bh, "dumping temporary bh");
Dave Kleikamp470decc2006-10-11 01:20:57 -0700809 __brelse(bh);
810 J_ASSERT_BH(bh, atomic_read(&bh->b_count) == 0);
811 free_buffer_head(bh);
812
Jan Karaf5113ef2013-06-04 12:01:45 -0400813 /* We also have to refile the corresponding shadowed buffer */
Dave Kleikamp470decc2006-10-11 01:20:57 -0700814 jh = commit_transaction->t_shadow_list->b_tprev;
815 bh = jh2bh(jh);
Jan Karaf5113ef2013-06-04 12:01:45 -0400816 clear_buffer_jwrite(bh);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700817 J_ASSERT_BH(bh, buffer_jbddirty(bh));
Jan Karab34090e2013-06-04 12:08:56 -0400818 J_ASSERT_BH(bh, !buffer_shadow(bh));
Dave Kleikamp470decc2006-10-11 01:20:57 -0700819
820 /* The metadata is now released for reuse, but we need
821 to remember it against this transaction so that when
822 we finally commit, we can do any checkpointing
823 required. */
824 JBUFFER_TRACE(jh, "file as BJ_Forget");
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700825 jbd2_journal_file_buffer(jh, commit_transaction, BJ_Forget);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700826 JBUFFER_TRACE(jh, "brelse shadowed buffer");
827 __brelse(bh);
828 }
829
830 J_ASSERT (commit_transaction->t_shadow_list == NULL);
831
Eryu Guanf2a44522011-11-01 19:09:18 -0400832 jbd_debug(3, "JBD2: commit phase 4\n");
Dave Kleikamp470decc2006-10-11 01:20:57 -0700833
834 /* Here we wait for the revoke record and descriptor record buffers */
Jan Karae5a120a2013-06-04 12:06:01 -0400835 while (!list_empty(&log_bufs)) {
Dave Kleikamp470decc2006-10-11 01:20:57 -0700836 struct buffer_head *bh;
837
Jan Karae5a120a2013-06-04 12:06:01 -0400838 bh = list_entry(log_bufs.prev, struct buffer_head, b_assoc_buffers);
839 wait_on_buffer(bh);
840 cond_resched();
Dave Kleikamp470decc2006-10-11 01:20:57 -0700841
842 if (unlikely(!buffer_uptodate(bh)))
843 err = -EIO;
844
845 BUFFER_TRACE(bh, "ph5: control buffer writeout done: unfile");
846 clear_buffer_jwrite(bh);
Jan Karae5a120a2013-06-04 12:06:01 -0400847 jbd2_unfile_log_bh(bh);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700848 __brelse(bh); /* One for getblk */
849 /* AKPM: bforget here */
850 }
851
Hidehiro Kawai77e841d2008-10-12 16:39:16 -0400852 if (err)
853 jbd2_journal_abort(journal, err);
854
Eryu Guanf2a44522011-11-01 19:09:18 -0400855 jbd_debug(3, "JBD2: commit phase 5\n");
Jan Karabbd2be32011-05-24 11:59:18 -0400856 write_lock(&journal->j_state_lock);
857 J_ASSERT(commit_transaction->t_state == T_COMMIT_DFLUSH);
858 commit_transaction->t_state = T_COMMIT_JFLUSH;
859 write_unlock(&journal->j_state_lock);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700860
Darrick J. Wong56316a02015-10-17 16:18:45 -0400861 if (!jbd2_has_feature_async_commit(journal)) {
Girish Shilamkar818d2762008-01-28 23:58:27 -0500862 err = journal_submit_commit_record(journal, commit_transaction,
863 &cbh, crc32_sum);
864 if (err)
865 __jbd2_journal_abort_hard(journal);
866 }
Zhang Huan6cba6112011-04-05 19:16:20 -0400867 if (cbh)
Theodore Ts'ofd984962009-01-05 21:34:13 -0500868 err = journal_wait_on_commit_record(journal, cbh);
Darrick J. Wong56316a02015-10-17 16:18:45 -0400869 if (jbd2_has_feature_async_commit(journal) &&
Jan Karaf73bee42010-08-18 15:56:56 +0200870 journal->j_flags & JBD2_BARRIER) {
Shaohua Li99aa7842012-04-13 10:27:35 +0800871 blkdev_issue_flush(journal->j_dev, GFP_NOFS, NULL);
Jan Karaf73bee42010-08-18 15:56:56 +0200872 }
Dave Kleikamp470decc2006-10-11 01:20:57 -0700873
874 if (err)
Jan Karaa7fa2ba2007-10-16 18:38:25 -0400875 jbd2_journal_abort(journal, err);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700876
Jan Kara33395782012-03-13 22:45:38 -0400877 /*
878 * Now disk caches for filesystem device are flushed so we are safe to
879 * erase checkpointed transactions from the log by updating journal
880 * superblock.
881 */
882 if (update_tail)
883 jbd2_update_log_tail(journal, first_tid, first_block);
884
Dave Kleikamp470decc2006-10-11 01:20:57 -0700885 /* End of a transaction! Finally, we can do checkpoint
886 processing: any buffers committed as a result of this
887 transaction can be removed from any checkpoint list it was on
888 before. */
889
Eryu Guanf2a44522011-11-01 19:09:18 -0400890 jbd_debug(3, "JBD2: commit phase 6\n");
Dave Kleikamp470decc2006-10-11 01:20:57 -0700891
Jan Karac851ed52008-07-11 19:27:31 -0400892 J_ASSERT(list_empty(&commit_transaction->t_inode_list));
Dave Kleikamp470decc2006-10-11 01:20:57 -0700893 J_ASSERT(commit_transaction->t_buffers == NULL);
894 J_ASSERT(commit_transaction->t_checkpoint_list == NULL);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700895 J_ASSERT(commit_transaction->t_shadow_list == NULL);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700896
897restart_loop:
898 /*
899 * As there are other places (journal_unmap_buffer()) adding buffers
900 * to this list we have to be careful and hold the j_list_lock.
901 */
902 spin_lock(&journal->j_list_lock);
903 while (commit_transaction->t_forget) {
904 transaction_t *cp_transaction;
905 struct buffer_head *bh;
Jan Karade1b7942011-06-13 15:38:22 -0400906 int try_to_free = 0;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700907
908 jh = commit_transaction->t_forget;
909 spin_unlock(&journal->j_list_lock);
910 bh = jh2bh(jh);
Jan Karade1b7942011-06-13 15:38:22 -0400911 /*
912 * Get a reference so that bh cannot be freed before we are
913 * done with it.
914 */
915 get_bh(bh);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700916 jbd_lock_bh_state(bh);
dingdinghua23e2af32010-02-24 12:11:20 -0500917 J_ASSERT_JH(jh, jh->b_transaction == commit_transaction);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700918
919 /*
920 * If there is undo-protected committed data against
921 * this buffer, then we can remove it now. If it is a
922 * buffer needing such protection, the old frozen_data
923 * field now points to a committed version of the
924 * buffer, so rotate that field to the new committed
925 * data.
926 *
927 * Otherwise, we can just throw away the frozen data now.
Joel Beckere06c8222008-09-11 15:35:47 -0700928 *
929 * We also know that the frozen data has already fired
930 * its triggers if they exist, so we can clear that too.
Dave Kleikamp470decc2006-10-11 01:20:57 -0700931 */
932 if (jh->b_committed_data) {
Mingming Caoaf1e76d2007-10-16 18:38:25 -0400933 jbd2_free(jh->b_committed_data, bh->b_size);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700934 jh->b_committed_data = NULL;
935 if (jh->b_frozen_data) {
936 jh->b_committed_data = jh->b_frozen_data;
937 jh->b_frozen_data = NULL;
Joel Beckere06c8222008-09-11 15:35:47 -0700938 jh->b_frozen_triggers = NULL;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700939 }
940 } else if (jh->b_frozen_data) {
Mingming Caoaf1e76d2007-10-16 18:38:25 -0400941 jbd2_free(jh->b_frozen_data, bh->b_size);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700942 jh->b_frozen_data = NULL;
Joel Beckere06c8222008-09-11 15:35:47 -0700943 jh->b_frozen_triggers = NULL;
Dave Kleikamp470decc2006-10-11 01:20:57 -0700944 }
945
946 spin_lock(&journal->j_list_lock);
947 cp_transaction = jh->b_cp_transaction;
948 if (cp_transaction) {
949 JBUFFER_TRACE(jh, "remove from old cp transaction");
Johann Lombardi8e85fb32008-01-28 23:58:27 -0500950 cp_transaction->t_chp_stats.cs_dropped++;
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700951 __jbd2_journal_remove_checkpoint(jh);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700952 }
953
954 /* Only re-checkpoint the buffer_head if it is marked
955 * dirty. If the buffer was added to the BJ_Forget list
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700956 * by jbd2_journal_forget, it may no longer be dirty and
Dave Kleikamp470decc2006-10-11 01:20:57 -0700957 * there's no point in keeping a checkpoint record for
958 * it. */
959
Jan Karab794e7a2012-09-26 23:11:13 -0400960 /*
961 * A buffer which has been freed while still being journaled by
962 * a previous transaction.
963 */
964 if (buffer_freed(bh)) {
965 /*
966 * If the running transaction is the one containing
967 * "add to orphan" operation (b_next_transaction !=
968 * NULL), we have to wait for that transaction to
969 * commit before we can really get rid of the buffer.
970 * So just clear b_modified to not confuse transaction
971 * credit accounting and refile the buffer to
972 * BJ_Forget of the running transaction. If the just
973 * committed transaction contains "add to orphan"
974 * operation, we can completely invalidate the buffer
975 * now. We are rather through in that since the
976 * buffer may be still accessible when blocksize <
977 * pagesize and it is attached to the last partial
978 * page.
979 */
980 jh->b_modified = 0;
981 if (!jh->b_next_transaction) {
982 clear_buffer_freed(bh);
983 clear_buffer_jbddirty(bh);
984 clear_buffer_mapped(bh);
985 clear_buffer_new(bh);
986 clear_buffer_req(bh);
987 bh->b_bdev = NULL;
988 }
Dave Kleikamp470decc2006-10-11 01:20:57 -0700989 }
990
991 if (buffer_jbddirty(bh)) {
992 JBUFFER_TRACE(jh, "add to new checkpointing trans");
Mingming Caof7f4bcc2006-10-11 01:20:59 -0700993 __jbd2_journal_insert_checkpoint(jh, commit_transaction);
Hidehiro Kawai7ad74452008-10-10 20:29:31 -0400994 if (is_journal_aborted(journal))
995 clear_buffer_jbddirty(bh);
Dave Kleikamp470decc2006-10-11 01:20:57 -0700996 } else {
997 J_ASSERT_BH(bh, !buffer_dirty(bh));
Jan Karade1b7942011-06-13 15:38:22 -0400998 /*
999 * The buffer on BJ_Forget list and not jbddirty means
Dave Kleikamp470decc2006-10-11 01:20:57 -07001000 * it has been freed by this transaction and hence it
1001 * could not have been reallocated until this
1002 * transaction has committed. *BUT* it could be
1003 * reallocated once we have written all the data to
1004 * disk and before we process the buffer on BJ_Forget
Jan Karade1b7942011-06-13 15:38:22 -04001005 * list.
1006 */
1007 if (!jh->b_next_transaction)
1008 try_to_free = 1;
Dave Kleikamp470decc2006-10-11 01:20:57 -07001009 }
Jan Karade1b7942011-06-13 15:38:22 -04001010 JBUFFER_TRACE(jh, "refile or unfile buffer");
1011 __jbd2_journal_refile_buffer(jh);
1012 jbd_unlock_bh_state(bh);
1013 if (try_to_free)
1014 release_buffer_page(bh); /* Drops bh reference */
1015 else
1016 __brelse(bh);
Dave Kleikamp470decc2006-10-11 01:20:57 -07001017 cond_resched_lock(&journal->j_list_lock);
1018 }
1019 spin_unlock(&journal->j_list_lock);
1020 /*
Jan Karaf5a7a6b2008-01-28 23:58:27 -05001021 * This is a bit sleazy. We use j_list_lock to protect transition
1022 * of a transaction into T_FINISHED state and calling
1023 * __jbd2_journal_drop_transaction(). Otherwise we could race with
1024 * other checkpointing code processing the transaction...
Dave Kleikamp470decc2006-10-11 01:20:57 -07001025 */
Theodore Ts'oa931da62010-08-03 21:35:12 -04001026 write_lock(&journal->j_state_lock);
Dave Kleikamp470decc2006-10-11 01:20:57 -07001027 spin_lock(&journal->j_list_lock);
1028 /*
1029 * Now recheck if some buffers did not get attached to the transaction
1030 * while the lock was dropped...
1031 */
1032 if (commit_transaction->t_forget) {
1033 spin_unlock(&journal->j_list_lock);
Theodore Ts'oa931da62010-08-03 21:35:12 -04001034 write_unlock(&journal->j_state_lock);
Dave Kleikamp470decc2006-10-11 01:20:57 -07001035 goto restart_loop;
1036 }
1037
Theodore Ts'od4e839d2014-03-08 22:34:10 -05001038 /* Add the transaction to the checkpoint list
1039 * __journal_remove_checkpoint() can not destroy transaction
1040 * under us because it is not marked as T_FINISHED yet */
1041 if (journal->j_checkpoint_transactions == NULL) {
1042 journal->j_checkpoint_transactions = commit_transaction;
1043 commit_transaction->t_cpnext = commit_transaction;
1044 commit_transaction->t_cpprev = commit_transaction;
1045 } else {
1046 commit_transaction->t_cpnext =
1047 journal->j_checkpoint_transactions;
1048 commit_transaction->t_cpprev =
1049 commit_transaction->t_cpnext->t_cpprev;
1050 commit_transaction->t_cpnext->t_cpprev =
1051 commit_transaction;
1052 commit_transaction->t_cpprev->t_cpnext =
1053 commit_transaction;
1054 }
1055 spin_unlock(&journal->j_list_lock);
1056
Dave Kleikamp470decc2006-10-11 01:20:57 -07001057 /* Done with this transaction! */
1058
Eryu Guanf2a44522011-11-01 19:09:18 -04001059 jbd_debug(3, "JBD2: commit phase 7\n");
Dave Kleikamp470decc2006-10-11 01:20:57 -07001060
Jan Karabbd2be32011-05-24 11:59:18 -04001061 J_ASSERT(commit_transaction->t_state == T_COMMIT_JFLUSH);
Dave Kleikamp470decc2006-10-11 01:20:57 -07001062
Johann Lombardi8e85fb32008-01-28 23:58:27 -05001063 commit_transaction->t_start = jiffies;
Theodore Ts'obf699322009-09-30 00:32:06 -04001064 stats.run.rs_logging = jbd2_time_diff(stats.run.rs_logging,
1065 commit_transaction->t_start);
Johann Lombardi8e85fb32008-01-28 23:58:27 -05001066
1067 /*
Theodore Ts'obf699322009-09-30 00:32:06 -04001068 * File the transaction statistics
Johann Lombardi8e85fb32008-01-28 23:58:27 -05001069 */
Johann Lombardi8e85fb32008-01-28 23:58:27 -05001070 stats.ts_tid = commit_transaction->t_tid;
Theodore Ts'o8dd42042010-08-03 21:38:29 -04001071 stats.run.rs_handle_count =
1072 atomic_read(&commit_transaction->t_handle_count);
Theodore Ts'obf699322009-09-30 00:32:06 -04001073 trace_jbd2_run_stats(journal->j_fs_dev->bd_dev,
1074 commit_transaction->t_tid, &stats.run);
Theodore Ts'o42cf3452014-03-08 19:51:16 -05001075 stats.ts_requested = (commit_transaction->t_requested) ? 1 : 0;
Johann Lombardi8e85fb32008-01-28 23:58:27 -05001076
Dmitry Monakhov794446c2013-04-03 22:06:52 -04001077 commit_transaction->t_state = T_COMMIT_CALLBACK;
Dave Kleikamp470decc2006-10-11 01:20:57 -07001078 J_ASSERT(commit_transaction == journal->j_committing_transaction);
1079 journal->j_commit_sequence = commit_transaction->t_tid;
1080 journal->j_committing_transaction = NULL;
Josef Bacike07f7182008-11-26 01:14:26 -05001081 commit_time = ktime_to_ns(ktime_sub(ktime_get(), start_time));
Dave Kleikamp470decc2006-10-11 01:20:57 -07001082
Josef Bacike07f7182008-11-26 01:14:26 -05001083 /*
1084 * weight the commit time higher than the average time so we don't
1085 * react too strongly to vast changes in the commit time
1086 */
1087 if (likely(journal->j_average_commit_time))
1088 journal->j_average_commit_time = (commit_time +
1089 journal->j_average_commit_time*3) / 4;
1090 else
1091 journal->j_average_commit_time = commit_time;
Dmitry Monakhov794446c2013-04-03 22:06:52 -04001092
Theodore Ts'oa931da62010-08-03 21:35:12 -04001093 write_unlock(&journal->j_state_lock);
Theodore Ts'o6c20ec82008-10-28 21:08:20 -04001094
Aneesh Kumar K.Vfb684072008-11-06 17:50:21 -05001095 if (journal->j_commit_callback)
1096 journal->j_commit_callback(journal, commit_transaction);
1097
Theodore Ts'o879c5e62009-06-17 11:47:48 -04001098 trace_jbd2_end_commit(journal, commit_transaction);
Eryu Guanf2a44522011-11-01 19:09:18 -04001099 jbd_debug(1, "JBD2: commit %d complete, head %d\n",
Dave Kleikamp470decc2006-10-11 01:20:57 -07001100 journal->j_commit_sequence, journal->j_tail_sequence);
Dave Kleikamp470decc2006-10-11 01:20:57 -07001101
Dmitry Monakhov794446c2013-04-03 22:06:52 -04001102 write_lock(&journal->j_state_lock);
1103 spin_lock(&journal->j_list_lock);
1104 commit_transaction->t_state = T_FINISHED;
Theodore Ts'od4e839d2014-03-08 22:34:10 -05001105 /* Check if the transaction can be dropped now that we are finished */
Dmitry Monakhov794446c2013-04-03 22:06:52 -04001106 if (commit_transaction->t_checkpoint_list == NULL &&
1107 commit_transaction->t_checkpoint_io_list == NULL) {
1108 __jbd2_journal_drop_transaction(journal, commit_transaction);
1109 jbd2_journal_free_transaction(commit_transaction);
1110 }
1111 spin_unlock(&journal->j_list_lock);
1112 write_unlock(&journal->j_state_lock);
Dave Kleikamp470decc2006-10-11 01:20:57 -07001113 wake_up(&journal->j_wait_done_commit);
Theodore Ts'o42cf3452014-03-08 19:51:16 -05001114
1115 /*
1116 * Calculate overall stats
1117 */
1118 spin_lock(&journal->j_history_lock);
1119 journal->j_stats.ts_tid++;
1120 journal->j_stats.ts_requested += stats.ts_requested;
1121 journal->j_stats.run.rs_wait += stats.run.rs_wait;
1122 journal->j_stats.run.rs_request_delay += stats.run.rs_request_delay;
1123 journal->j_stats.run.rs_running += stats.run.rs_running;
1124 journal->j_stats.run.rs_locked += stats.run.rs_locked;
1125 journal->j_stats.run.rs_flushing += stats.run.rs_flushing;
1126 journal->j_stats.run.rs_logging += stats.run.rs_logging;
1127 journal->j_stats.run.rs_handle_count += stats.run.rs_handle_count;
1128 journal->j_stats.run.rs_blocks += stats.run.rs_blocks;
1129 journal->j_stats.run.rs_blocks_logged += stats.run.rs_blocks_logged;
1130 spin_unlock(&journal->j_history_lock);
Dave Kleikamp470decc2006-10-11 01:20:57 -07001131}