Line data Source code
1 : // SPDX-License-Identifier: GPL-2.0+
2 : /*
3 : * linux/fs/jbd2/commit.c
4 : *
5 : * Written by Stephen C. Tweedie <sct@redhat.com>, 1998
6 : *
7 : * Copyright 1998 Red Hat corp --- All Rights Reserved
8 : *
9 : * Journal commit routines for the generic filesystem journaling code;
10 : * part of the ext2fs journaling system.
11 : */
12 :
13 : #include <linux/time.h>
14 : #include <linux/fs.h>
15 : #include <linux/jbd2.h>
16 : #include <linux/errno.h>
17 : #include <linux/slab.h>
18 : #include <linux/mm.h>
19 : #include <linux/pagemap.h>
20 : #include <linux/jiffies.h>
21 : #include <linux/crc32.h>
22 : #include <linux/writeback.h>
23 : #include <linux/backing-dev.h>
24 : #include <linux/bio.h>
25 : #include <linux/blkdev.h>
26 : #include <linux/bitops.h>
27 : #include <trace/events/jbd2.h>
28 :
29 : /*
30 : * IO end handler for temporary buffer_heads handling writes to the journal.
31 : */
32 3525721 : static void journal_end_buffer_io_sync(struct buffer_head *bh, int uptodate)
33 : {
34 3525721 : struct buffer_head *orig_bh = bh->b_private;
35 :
36 3525721 : BUFFER_TRACE(bh, "");
37 3525721 : if (uptodate)
38 3525721 : set_buffer_uptodate(bh);
39 : else
40 0 : clear_buffer_uptodate(bh);
41 3525721 : if (orig_bh) {
42 3121499 : clear_bit_unlock(BH_Shadow, &orig_bh->b_state);
43 3121499 : smp_mb__after_atomic();
44 3121499 : wake_up_bit(&orig_bh->b_state, BH_Shadow);
45 : }
46 3525721 : unlock_buffer(bh);
47 3525721 : }
48 :
49 : /*
50 : * When an ext4 file is truncated, it is possible that some pages are not
51 : * successfully freed, because they are attached to a committing transaction.
52 : * After the transaction commits, these pages are left on the LRU, with no
53 : * ->mapping, and with attached buffers. These pages are trivially reclaimable
54 : * by the VM, but their apparent absence upsets the VM accounting, and it makes
55 : * the numbers in /proc/meminfo look odd.
56 : *
57 : * So here, we have a buffer which has just come off the forget list. Look to
58 : * see if we can strip all buffers from the backing page.
59 : *
60 : * Called under lock_journal(), and possibly under journal_datalist_lock. The
61 : * caller provided us with a ref against the buffer, and we drop that here.
62 : */
63 127164 : static void release_buffer_page(struct buffer_head *bh)
64 : {
65 127164 : struct folio *folio;
66 :
67 254328 : if (buffer_dirty(bh))
68 0 : goto nope;
69 127164 : if (atomic_read(&bh->b_count) != 1)
70 27275 : goto nope;
71 99889 : folio = bh->b_folio;
72 99889 : if (folio->mapping)
73 99889 : goto nope;
74 :
75 : /* OK, it's a truncated page */
76 0 : if (!folio_trylock(folio))
77 0 : goto nope;
78 :
79 0 : folio_get(folio);
80 0 : __brelse(bh);
81 0 : try_to_free_buffers(folio);
82 0 : folio_unlock(folio);
83 0 : folio_put(folio);
84 0 : return;
85 :
86 127164 : nope:
87 127164 : __brelse(bh);
88 : }
89 :
90 201294 : static void jbd2_commit_block_csum_set(journal_t *j, struct buffer_head *bh)
91 : {
92 201294 : struct commit_header *h;
93 201294 : __u32 csum;
94 :
95 201294 : if (!jbd2_journal_has_csum_v2or3(j))
96 : return;
97 :
98 200831 : h = (struct commit_header *)(bh->b_data);
99 200831 : h->h_chksum_type = 0;
100 200831 : h->h_chksum_size = 0;
101 200831 : h->h_chksum[0] = 0;
102 200831 : csum = jbd2_chksum(j, j->j_csum_seed, bh->b_data, j->j_blocksize);
103 200831 : h->h_chksum[0] = cpu_to_be32(csum);
104 : }
105 :
106 : /*
107 : * Done it all: now submit the commit record. We should have
108 : * cleaned up our previous buffers by now, so if we are in abort
109 : * mode we can now just skip the rest of the journal write
110 : * entirely.
111 : *
112 : * Returns 1 if the journal needs to be aborted or 0 on success
113 : */
114 201307 : static int journal_submit_commit_record(journal_t *journal,
115 : transaction_t *commit_transaction,
116 : struct buffer_head **cbh,
117 : __u32 crc32_sum)
118 : {
119 201307 : struct commit_header *tmp;
120 201307 : struct buffer_head *bh;
121 201307 : struct timespec64 now;
122 201307 : blk_opf_t write_flags = REQ_OP_WRITE | REQ_SYNC;
123 :
124 201307 : *cbh = NULL;
125 :
126 201307 : if (is_journal_aborted(journal))
127 : return 0;
128 :
129 201294 : bh = jbd2_journal_get_descriptor_buffer(commit_transaction,
130 : JBD2_COMMIT_BLOCK);
131 201294 : if (!bh)
132 : return 1;
133 :
134 201294 : tmp = (struct commit_header *)bh->b_data;
135 201294 : ktime_get_coarse_real_ts64(&now);
136 201294 : tmp->h_commit_sec = cpu_to_be64(now.tv_sec);
137 201294 : tmp->h_commit_nsec = cpu_to_be32(now.tv_nsec);
138 :
139 402588 : if (jbd2_has_feature_checksum(journal)) {
140 0 : tmp->h_chksum_type = JBD2_CRC32_CHKSUM;
141 0 : tmp->h_chksum_size = JBD2_CRC32_CHKSUM_SIZE;
142 0 : tmp->h_chksum[0] = cpu_to_be32(crc32_sum);
143 : }
144 201294 : jbd2_commit_block_csum_set(journal, bh);
145 :
146 201294 : BUFFER_TRACE(bh, "submit commit block");
147 201294 : lock_buffer(bh);
148 201294 : clear_buffer_dirty(bh);
149 201294 : set_buffer_uptodate(bh);
150 201294 : bh->b_end_io = journal_end_buffer_io_sync;
151 :
152 402588 : if (journal->j_flags & JBD2_BARRIER &&
153 : !jbd2_has_feature_async_commit(journal))
154 201294 : write_flags |= REQ_PREFLUSH | REQ_FUA;
155 :
156 201294 : submit_bh(write_flags, bh);
157 201294 : *cbh = bh;
158 201294 : return 0;
159 : }
160 :
161 : /*
162 : * This function along with journal_submit_commit_record
163 : * allows to write the commit record asynchronously.
164 : */
165 201294 : static int journal_wait_on_commit_record(journal_t *journal,
166 : struct buffer_head *bh)
167 : {
168 201294 : int ret = 0;
169 :
170 201294 : clear_buffer_dirty(bh);
171 201294 : wait_on_buffer(bh);
172 :
173 603882 : if (unlikely(!buffer_uptodate(bh)))
174 0 : ret = -EIO;
175 201294 : put_bh(bh); /* One for getblk() */
176 :
177 201294 : return ret;
178 : }
179 :
180 : /* Send all the data buffers related to an inode */
181 0 : int jbd2_submit_inode_data(journal_t *journal, struct jbd2_inode *jinode)
182 : {
183 0 : if (!jinode || !(jinode->i_flags & JI_WRITE_DATA))
184 : return 0;
185 :
186 0 : trace_jbd2_submit_inode_data(jinode->i_vfs_inode);
187 0 : return journal->j_submit_inode_data_buffers(jinode);
188 :
189 : }
190 : EXPORT_SYMBOL(jbd2_submit_inode_data);
191 :
192 0 : int jbd2_wait_inode_data(journal_t *journal, struct jbd2_inode *jinode)
193 : {
194 0 : if (!jinode || !(jinode->i_flags & JI_WAIT_DATA) ||
195 0 : !jinode->i_vfs_inode || !jinode->i_vfs_inode->i_mapping)
196 : return 0;
197 0 : return filemap_fdatawait_range_keep_errors(
198 : jinode->i_vfs_inode->i_mapping, jinode->i_dirty_start,
199 : jinode->i_dirty_end);
200 : }
201 : EXPORT_SYMBOL(jbd2_wait_inode_data);
202 :
203 : /*
204 : * Submit all the data buffers of inode associated with the transaction to
205 : * disk.
206 : *
207 : * We are in a committing transaction. Therefore no new inode can be added to
208 : * our inode list. We use JI_COMMIT_RUNNING flag to protect inode we currently
209 : * operate on from being released while we write out pages.
210 : */
211 201307 : static int journal_submit_data_buffers(journal_t *journal,
212 : transaction_t *commit_transaction)
213 : {
214 201307 : struct jbd2_inode *jinode;
215 201307 : int err, ret = 0;
216 :
217 201307 : spin_lock(&journal->j_list_lock);
218 361291 : list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) {
219 159984 : if (!(jinode->i_flags & JI_WRITE_DATA))
220 6 : continue;
221 159978 : jinode->i_flags |= JI_COMMIT_RUNNING;
222 159978 : spin_unlock(&journal->j_list_lock);
223 : /* submit the inode data buffers. */
224 159978 : trace_jbd2_submit_inode_data(jinode->i_vfs_inode);
225 159978 : if (journal->j_submit_inode_data_buffers) {
226 159978 : err = journal->j_submit_inode_data_buffers(jinode);
227 159978 : if (!ret)
228 159978 : ret = err;
229 : }
230 159978 : spin_lock(&journal->j_list_lock);
231 159978 : J_ASSERT(jinode->i_transaction == commit_transaction);
232 159978 : jinode->i_flags &= ~JI_COMMIT_RUNNING;
233 159978 : smp_mb();
234 159978 : wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING);
235 : }
236 201307 : spin_unlock(&journal->j_list_lock);
237 201307 : return ret;
238 : }
239 :
240 159983 : int jbd2_journal_finish_inode_data_buffers(struct jbd2_inode *jinode)
241 : {
242 159983 : struct address_space *mapping = jinode->i_vfs_inode->i_mapping;
243 :
244 159983 : return filemap_fdatawait_range_keep_errors(mapping,
245 : jinode->i_dirty_start,
246 : jinode->i_dirty_end);
247 : }
248 :
249 : /*
250 : * Wait for data submitted for writeout, refile inodes to proper
251 : * transaction if needed.
252 : *
253 : */
254 201307 : static int journal_finish_inode_data_buffers(journal_t *journal,
255 : transaction_t *commit_transaction)
256 : {
257 201307 : struct jbd2_inode *jinode, *next_i;
258 201307 : int err, ret = 0;
259 :
260 : /* For locking, see the comment in journal_submit_data_buffers() */
261 201307 : spin_lock(&journal->j_list_lock);
262 361290 : list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) {
263 159983 : if (!(jinode->i_flags & JI_WAIT_DATA))
264 0 : continue;
265 159983 : jinode->i_flags |= JI_COMMIT_RUNNING;
266 159983 : spin_unlock(&journal->j_list_lock);
267 : /* wait for the inode data buffers writeout. */
268 159983 : if (journal->j_finish_inode_data_buffers) {
269 159983 : err = journal->j_finish_inode_data_buffers(jinode);
270 159983 : if (!ret)
271 159983 : ret = err;
272 : }
273 159983 : spin_lock(&journal->j_list_lock);
274 159983 : jinode->i_flags &= ~JI_COMMIT_RUNNING;
275 159983 : smp_mb();
276 159983 : wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING);
277 : }
278 :
279 : /* Now refile inode to proper lists */
280 361290 : list_for_each_entry_safe(jinode, next_i,
281 : &commit_transaction->t_inode_list, i_list) {
282 159983 : list_del(&jinode->i_list);
283 159983 : if (jinode->i_next_transaction) {
284 57 : jinode->i_transaction = jinode->i_next_transaction;
285 57 : jinode->i_next_transaction = NULL;
286 57 : list_add(&jinode->i_list,
287 : &jinode->i_transaction->t_inode_list);
288 : } else {
289 159926 : jinode->i_transaction = NULL;
290 159926 : jinode->i_dirty_start = 0;
291 159926 : jinode->i_dirty_end = 0;
292 : }
293 : }
294 201307 : spin_unlock(&journal->j_list_lock);
295 :
296 201307 : return ret;
297 : }
298 :
299 0 : static __u32 jbd2_checksum_data(__u32 crc32_sum, struct buffer_head *bh)
300 : {
301 0 : struct page *page = bh->b_page;
302 0 : char *addr;
303 0 : __u32 checksum;
304 :
305 0 : addr = kmap_atomic(page);
306 0 : checksum = crc32_be(crc32_sum,
307 0 : (void *)(addr + offset_in_page(bh->b_data)), bh->b_size);
308 0 : kunmap_atomic(addr);
309 :
310 0 : return checksum;
311 : }
312 :
313 3121499 : static void write_tag_block(journal_t *j, journal_block_tag_t *tag,
314 : unsigned long long block)
315 : {
316 3121499 : tag->t_blocknr = cpu_to_be32(block & (u32)~0);
317 6242998 : if (jbd2_has_feature_64bit(j))
318 3119925 : tag->t_blocknr_high = cpu_to_be32((block >> 31) >> 1);
319 3121499 : }
320 :
321 3121499 : static void jbd2_block_tag_csum_set(journal_t *j, journal_block_tag_t *tag,
322 : struct buffer_head *bh, __u32 sequence)
323 : {
324 3121499 : journal_block_tag3_t *tag3 = (journal_block_tag3_t *)tag;
325 3121499 : struct page *page = bh->b_page;
326 3121499 : __u8 *addr;
327 3121499 : __u32 csum32;
328 3121499 : __be32 seq;
329 :
330 3121499 : if (!jbd2_journal_has_csum_v2or3(j))
331 10394 : return;
332 :
333 3111105 : seq = cpu_to_be32(sequence);
334 3111105 : addr = kmap_atomic(page);
335 3111105 : csum32 = jbd2_chksum(j, j->j_csum_seed, (__u8 *)&seq, sizeof(seq));
336 3111105 : csum32 = jbd2_chksum(j, csum32, addr + offset_in_page(bh->b_data),
337 3111105 : bh->b_size);
338 3111105 : kunmap_atomic(addr);
339 :
340 6222210 : if (jbd2_has_feature_csum3(j))
341 3111105 : tag3->t_checksum = cpu_to_be32(csum32);
342 : else
343 0 : tag->t_checksum = cpu_to_be16(csum32);
344 : }
345 : /*
346 : * jbd2_journal_commit_transaction
347 : *
348 : * The primary function for committing a transaction to the log. This
349 : * function is called by the journal thread to begin a complete commit.
350 : */
351 201307 : void jbd2_journal_commit_transaction(journal_t *journal)
352 : {
353 201307 : struct transaction_stats_s stats;
354 201307 : transaction_t *commit_transaction;
355 201307 : struct journal_head *jh;
356 201307 : struct buffer_head *descriptor;
357 201307 : struct buffer_head **wbuf = journal->j_wbuf;
358 201307 : int bufs;
359 201307 : int flags;
360 201307 : int err;
361 201307 : unsigned long long blocknr;
362 201307 : ktime_t start_time;
363 201307 : u64 commit_time;
364 201307 : char *tagp = NULL;
365 201307 : journal_block_tag_t *tag = NULL;
366 201307 : int space_left = 0;
367 201307 : int first_tag = 0;
368 201307 : int tag_flag;
369 201307 : int i;
370 201307 : int tag_bytes = journal_tag_bytes(journal);
371 201307 : struct buffer_head *cbh = NULL; /* For transactional checksums */
372 201307 : __u32 crc32_sum = ~0;
373 201307 : struct blk_plug plug;
374 : /* Tail of the journal */
375 201307 : unsigned long first_block;
376 201307 : tid_t first_tid;
377 201307 : int update_tail;
378 201307 : int csum_size = 0;
379 201307 : LIST_HEAD(io_bufs);
380 201307 : LIST_HEAD(log_bufs);
381 :
382 201307 : if (jbd2_journal_has_csum_v2or3(journal))
383 200844 : csum_size = sizeof(struct jbd2_journal_block_tail);
384 :
385 : /*
386 : * First job: lock down the current transaction and wait for
387 : * all outstanding updates to complete.
388 : */
389 :
390 : /* Do we need to erase the effects of a prior jbd2_journal_flush? */
391 201307 : if (journal->j_flags & JBD2_FLUSHED) {
392 1643 : jbd2_debug(3, "super block updated\n");
393 1643 : mutex_lock_io(&journal->j_checkpoint_mutex);
394 : /*
395 : * We hold j_checkpoint_mutex so tail cannot change under us.
396 : * We don't need any special data guarantees for writing sb
397 : * since journal is empty and it is ok for write to be
398 : * flushed only with transaction commit.
399 : */
400 1643 : jbd2_journal_update_sb_log_tail(journal,
401 : journal->j_tail_sequence,
402 : journal->j_tail,
403 : REQ_SYNC);
404 1643 : mutex_unlock(&journal->j_checkpoint_mutex);
405 : } else {
406 : jbd2_debug(3, "superblock not updated\n");
407 : }
408 :
409 201307 : J_ASSERT(journal->j_running_transaction != NULL);
410 201307 : J_ASSERT(journal->j_committing_transaction == NULL);
411 :
412 201307 : write_lock(&journal->j_state_lock);
413 201307 : journal->j_flags |= JBD2_FULL_COMMIT_ONGOING;
414 201307 : while (journal->j_flags & JBD2_FAST_COMMIT_ONGOING) {
415 0 : DEFINE_WAIT(wait);
416 :
417 0 : prepare_to_wait(&journal->j_fc_wait, &wait,
418 : TASK_UNINTERRUPTIBLE);
419 0 : write_unlock(&journal->j_state_lock);
420 0 : schedule();
421 0 : write_lock(&journal->j_state_lock);
422 0 : finish_wait(&journal->j_fc_wait, &wait);
423 : /*
424 : * TODO: by blocking fast commits here, we are increasing
425 : * fsync() latency slightly. Strictly speaking, we don't need
426 : * to block fast commits until the transaction enters T_FLUSH
427 : * state. So an optimization is possible where we block new fast
428 : * commits here and wait for existing ones to complete
429 : * just before we enter T_FLUSH. That way, the existing fast
430 : * commits and this full commit can proceed parallely.
431 : */
432 : }
433 201307 : write_unlock(&journal->j_state_lock);
434 :
435 201307 : commit_transaction = journal->j_running_transaction;
436 :
437 201307 : trace_jbd2_start_commit(journal, commit_transaction);
438 201307 : jbd2_debug(1, "JBD2: starting commit of transaction %d\n",
439 : commit_transaction->t_tid);
440 :
441 201307 : write_lock(&journal->j_state_lock);
442 201307 : journal->j_fc_off = 0;
443 201307 : J_ASSERT(commit_transaction->t_state == T_RUNNING);
444 201307 : commit_transaction->t_state = T_LOCKED;
445 :
446 201307 : trace_jbd2_commit_locking(journal, commit_transaction);
447 201307 : stats.run.rs_wait = commit_transaction->t_max_wait;
448 201307 : stats.run.rs_request_delay = 0;
449 201307 : stats.run.rs_locked = jiffies;
450 201307 : if (commit_transaction->t_requested)
451 402142 : stats.run.rs_request_delay =
452 : jbd2_time_diff(commit_transaction->t_requested,
453 : stats.run.rs_locked);
454 201307 : stats.run.rs_running = jbd2_time_diff(commit_transaction->t_start,
455 : stats.run.rs_locked);
456 :
457 : // waits for any t_updates to finish
458 201307 : jbd2_journal_wait_updates(journal);
459 :
460 201307 : commit_transaction->t_state = T_SWITCH;
461 :
462 201307 : J_ASSERT (atomic_read(&commit_transaction->t_outstanding_credits) <=
463 : journal->j_max_transaction_buffers);
464 :
465 : /*
466 : * First thing we are allowed to do is to discard any remaining
467 : * BJ_Reserved buffers. Note, it is _not_ permissible to assume
468 : * that there are no such buffers: if a large filesystem
469 : * operation like a truncate needs to split itself over multiple
470 : * transactions, then it may try to do a jbd2_journal_restart() while
471 : * there are still BJ_Reserved buffers outstanding. These must
472 : * be released cleanly from the current transaction.
473 : *
474 : * In this case, the filesystem must still reserve write access
475 : * again before modifying the buffer in the new transaction, but
476 : * we do not require it to remember exactly which old buffers it
477 : * has reserved. This is consistent with the existing behaviour
478 : * that multiple jbd2_journal_get_write_access() calls to the same
479 : * buffer are perfectly permissible.
480 : * We use journal->j_state_lock here to serialize processing of
481 : * t_reserved_list with eviction of buffers from journal_unmap_buffer().
482 : */
483 210711 : while (commit_transaction->t_reserved_list) {
484 9404 : jh = commit_transaction->t_reserved_list;
485 9404 : JBUFFER_TRACE(jh, "reserved, unused: refile");
486 : /*
487 : * A jbd2_journal_get_undo_access()+jbd2_journal_release_buffer() may
488 : * leave undo-committed data.
489 : */
490 9404 : if (jh->b_committed_data) {
491 0 : struct buffer_head *bh = jh2bh(jh);
492 :
493 0 : spin_lock(&jh->b_state_lock);
494 0 : jbd2_free(jh->b_committed_data, bh->b_size);
495 0 : jh->b_committed_data = NULL;
496 0 : spin_unlock(&jh->b_state_lock);
497 : }
498 9404 : jbd2_journal_refile_buffer(journal, jh);
499 : }
500 :
501 201307 : write_unlock(&journal->j_state_lock);
502 : /*
503 : * Now try to drop any written-back buffers from the journal's
504 : * checkpoint lists. We do this *before* commit because it potentially
505 : * frees some memory
506 : */
507 201307 : spin_lock(&journal->j_list_lock);
508 201307 : __jbd2_journal_clean_checkpoint_list(journal, false);
509 201307 : spin_unlock(&journal->j_list_lock);
510 :
511 201307 : jbd2_debug(3, "JBD2: commit phase 1\n");
512 :
513 : /*
514 : * Clear revoked flag to reflect there is no revoked buffers
515 : * in the next transaction which is going to be started.
516 : */
517 201307 : jbd2_clear_buffer_revoked_flags(journal);
518 :
519 : /*
520 : * Switch to a new revoke table.
521 : */
522 201307 : jbd2_journal_switch_revoke_table(journal);
523 :
524 201307 : write_lock(&journal->j_state_lock);
525 : /*
526 : * Reserved credits cannot be claimed anymore, free them
527 : */
528 201307 : atomic_sub(atomic_read(&journal->j_reserved_credits),
529 : &commit_transaction->t_outstanding_credits);
530 :
531 201307 : trace_jbd2_commit_flushing(journal, commit_transaction);
532 201307 : stats.run.rs_flushing = jiffies;
533 201307 : stats.run.rs_locked = jbd2_time_diff(stats.run.rs_locked,
534 : stats.run.rs_flushing);
535 :
536 201307 : commit_transaction->t_state = T_FLUSH;
537 201307 : journal->j_committing_transaction = commit_transaction;
538 201307 : journal->j_running_transaction = NULL;
539 201307 : start_time = ktime_get();
540 201307 : commit_transaction->t_log_start = journal->j_head;
541 201307 : wake_up_all(&journal->j_wait_transaction_locked);
542 201307 : write_unlock(&journal->j_state_lock);
543 :
544 201307 : jbd2_debug(3, "JBD2: commit phase 2a\n");
545 :
546 : /*
547 : * Now start flushing things to disk, in the order they appear
548 : * on the transaction lists. Data blocks go first.
549 : */
550 201307 : err = journal_submit_data_buffers(journal, commit_transaction);
551 201307 : if (err)
552 0 : jbd2_journal_abort(journal, err);
553 :
554 201307 : blk_start_plug(&plug);
555 201307 : jbd2_journal_write_revoke_records(commit_transaction, &log_bufs);
556 :
557 201307 : jbd2_debug(3, "JBD2: commit phase 2b\n");
558 :
559 : /*
560 : * Way to go: we have now written out all of the data for a
561 : * transaction! Now comes the tricky part: we need to write out
562 : * metadata. Loop over the transaction's entire buffer list:
563 : */
564 201307 : write_lock(&journal->j_state_lock);
565 201307 : commit_transaction->t_state = T_COMMIT;
566 201307 : write_unlock(&journal->j_state_lock);
567 :
568 201307 : trace_jbd2_commit_logging(journal, commit_transaction);
569 201307 : stats.run.rs_logging = jiffies;
570 201307 : stats.run.rs_flushing = jbd2_time_diff(stats.run.rs_flushing,
571 : stats.run.rs_logging);
572 201307 : stats.run.rs_blocks = commit_transaction->t_nr_buffers;
573 201307 : stats.run.rs_blocks_logged = 0;
574 :
575 201307 : J_ASSERT(commit_transaction->t_nr_buffers <=
576 : atomic_read(&commit_transaction->t_outstanding_credits));
577 :
578 : err = 0;
579 : bufs = 0;
580 : descriptor = NULL;
581 3323182 : while (commit_transaction->t_buffers) {
582 :
583 : /* Find the next buffer to be journaled... */
584 :
585 3121875 : jh = commit_transaction->t_buffers;
586 :
587 : /* If we're in abort mode, we just un-journal the buffer and
588 : release it. */
589 :
590 3121875 : if (is_journal_aborted(journal)) {
591 376 : clear_buffer_jbddirty(jh2bh(jh));
592 376 : JBUFFER_TRACE(jh, "journal is aborting: refile");
593 376 : jbd2_buffer_abort_trigger(jh,
594 376 : jh->b_frozen_data ?
595 : jh->b_frozen_triggers :
596 : jh->b_triggers);
597 376 : jbd2_journal_refile_buffer(journal, jh);
598 : /* If that was the last one, we need to clean up
599 : * any descriptor buffers which may have been
600 : * already allocated, even if we are now
601 : * aborting. */
602 376 : if (!commit_transaction->t_buffers)
603 13 : goto start_journal_io;
604 363 : continue;
605 : }
606 :
607 : /* Make sure we have a descriptor block in which to
608 : record the metadata buffer. */
609 :
610 3121499 : if (!descriptor) {
611 202928 : J_ASSERT (bufs == 0);
612 :
613 202928 : jbd2_debug(4, "JBD2: get descriptor\n");
614 :
615 202928 : descriptor = jbd2_journal_get_descriptor_buffer(
616 : commit_transaction,
617 : JBD2_DESCRIPTOR_BLOCK);
618 202928 : if (!descriptor) {
619 0 : jbd2_journal_abort(journal, -EIO);
620 0 : continue;
621 : }
622 :
623 202928 : jbd2_debug(4, "JBD2: got buffer %llu (%p)\n",
624 : (unsigned long long)descriptor->b_blocknr,
625 : descriptor->b_data);
626 202928 : tagp = &descriptor->b_data[sizeof(journal_header_t)];
627 202928 : space_left = descriptor->b_size -
628 : sizeof(journal_header_t);
629 202928 : first_tag = 1;
630 202928 : set_buffer_jwrite(descriptor);
631 202928 : set_buffer_dirty(descriptor);
632 202928 : wbuf[bufs++] = descriptor;
633 :
634 : /* Record it so that we can wait for IO
635 : completion later */
636 202928 : BUFFER_TRACE(descriptor, "ph3: file as descriptor");
637 202928 : jbd2_file_log_bh(&log_bufs, descriptor);
638 : }
639 :
640 : /* Where is the buffer to be written? */
641 :
642 3121499 : err = jbd2_journal_next_log_block(journal, &blocknr);
643 : /* If the block mapping failed, just abandon the buffer
644 : and repeat this loop: we'll fall into the
645 : refile-on-abort condition above. */
646 3121499 : if (err) {
647 0 : jbd2_journal_abort(journal, err);
648 0 : continue;
649 : }
650 :
651 : /*
652 : * start_this_handle() uses t_outstanding_credits to determine
653 : * the free space in the log.
654 : */
655 3121499 : atomic_dec(&commit_transaction->t_outstanding_credits);
656 :
657 : /* Bump b_count to prevent truncate from stumbling over
658 : the shadowed buffer! @@@ This can go if we ever get
659 : rid of the shadow pairing of buffers. */
660 3121499 : atomic_inc(&jh2bh(jh)->b_count);
661 :
662 : /*
663 : * Make a temporary IO buffer with which to write it out
664 : * (this will requeue the metadata buffer to BJ_Shadow).
665 : */
666 3121499 : set_bit(BH_JWrite, &jh2bh(jh)->b_state);
667 3121499 : JBUFFER_TRACE(jh, "ph3: write metadata");
668 3121499 : flags = jbd2_journal_write_metadata_buffer(commit_transaction,
669 3121499 : jh, &wbuf[bufs], blocknr);
670 3121499 : if (flags < 0) {
671 0 : jbd2_journal_abort(journal, flags);
672 0 : continue;
673 : }
674 3121499 : jbd2_file_log_bh(&io_bufs, wbuf[bufs]);
675 :
676 : /* Record the new block's tag in the current descriptor
677 : buffer */
678 :
679 3121499 : tag_flag = 0;
680 3121499 : if (flags & 1)
681 0 : tag_flag |= JBD2_FLAG_ESCAPE;
682 3121499 : if (!first_tag)
683 2918571 : tag_flag |= JBD2_FLAG_SAME_UUID;
684 :
685 3121499 : tag = (journal_block_tag_t *) tagp;
686 3121499 : write_tag_block(journal, tag, jh2bh(jh)->b_blocknr);
687 3121499 : tag->t_flags = cpu_to_be16(tag_flag);
688 3121499 : jbd2_block_tag_csum_set(journal, tag, wbuf[bufs],
689 : commit_transaction->t_tid);
690 3121499 : tagp += tag_bytes;
691 3121499 : space_left -= tag_bytes;
692 3121499 : bufs++;
693 :
694 3121499 : if (first_tag) {
695 405856 : memcpy (tagp, journal->j_uuid, 16);
696 202928 : tagp += 16;
697 202928 : space_left -= 16;
698 202928 : first_tag = 0;
699 : }
700 :
701 : /* If there's no more to do, or if the descriptor is full,
702 : let the IO rip! */
703 :
704 3121499 : if (bufs == journal->j_wbufsize ||
705 3121499 : commit_transaction->t_buffers == NULL ||
706 2921786 : space_left < tag_bytes + 16 + csum_size) {
707 :
708 202928 : jbd2_debug(4, "JBD2: Submit %d IOs\n", bufs);
709 :
710 : /* Write an end-of-descriptor marker before
711 : submitting the IOs. "tag" still points to
712 : the last tag we set up. */
713 :
714 202928 : tag->t_flags |= cpu_to_be16(JBD2_FLAG_LAST_TAG);
715 202941 : start_journal_io:
716 202941 : if (descriptor)
717 202928 : jbd2_descriptor_block_csum_set(journal,
718 : descriptor);
719 :
720 3527368 : for (i = 0; i < bufs; i++) {
721 3324427 : struct buffer_head *bh = wbuf[i];
722 : /*
723 : * Compute checksum.
724 : */
725 6648854 : if (jbd2_has_feature_checksum(journal)) {
726 0 : crc32_sum =
727 0 : jbd2_checksum_data(crc32_sum, bh);
728 : }
729 :
730 3324427 : lock_buffer(bh);
731 3324427 : clear_buffer_dirty(bh);
732 3324427 : set_buffer_uptodate(bh);
733 3324427 : bh->b_end_io = journal_end_buffer_io_sync;
734 3324427 : submit_bh(REQ_OP_WRITE | REQ_SYNC, bh);
735 : }
736 202941 : cond_resched();
737 :
738 : /* Force a new descriptor to be generated next
739 : time round the loop. */
740 202941 : descriptor = NULL;
741 202941 : bufs = 0;
742 : }
743 : }
744 :
745 201307 : err = journal_finish_inode_data_buffers(journal, commit_transaction);
746 201307 : if (err) {
747 0 : printk(KERN_WARNING
748 : "JBD2: Detected IO errors while flushing file data "
749 : "on %s\n", journal->j_devname);
750 0 : if (journal->j_flags & JBD2_ABORT_ON_SYNCDATA_ERR)
751 0 : jbd2_journal_abort(journal, err);
752 : err = 0;
753 : }
754 :
755 : /*
756 : * Get current oldest transaction in the log before we issue flush
757 : * to the filesystem device. After the flush we can be sure that
758 : * blocks of all older transactions are checkpointed to persistent
759 : * storage and we will be safe to update journal start in the
760 : * superblock with the numbers we get here.
761 : */
762 201307 : update_tail =
763 201307 : jbd2_journal_get_log_tail(journal, &first_tid, &first_block);
764 :
765 201307 : write_lock(&journal->j_state_lock);
766 201307 : if (update_tail) {
767 176361 : long freed = first_block - journal->j_tail;
768 :
769 176361 : if (first_block < journal->j_tail)
770 22149 : freed += journal->j_last - journal->j_first;
771 : /* Update tail only if we free significant amount of space */
772 176361 : if (freed < jbd2_journal_get_max_txn_bufs(journal))
773 176176 : update_tail = 0;
774 : }
775 201307 : J_ASSERT(commit_transaction->t_state == T_COMMIT);
776 201307 : commit_transaction->t_state = T_COMMIT_DFLUSH;
777 201307 : write_unlock(&journal->j_state_lock);
778 :
779 : /*
780 : * If the journal is not located on the file system device,
781 : * then we must flush the file system device before we issue
782 : * the commit record
783 : */
784 201307 : if (commit_transaction->t_need_data_flush &&
785 105970 : (journal->j_fs_dev != journal->j_dev) &&
786 0 : (journal->j_flags & JBD2_BARRIER))
787 0 : blkdev_issue_flush(journal->j_fs_dev);
788 :
789 : /* Done it all: now write the commit record asynchronously. */
790 402614 : if (jbd2_has_feature_async_commit(journal)) {
791 0 : err = journal_submit_commit_record(journal, commit_transaction,
792 : &cbh, crc32_sum);
793 0 : if (err)
794 0 : jbd2_journal_abort(journal, err);
795 : }
796 :
797 201307 : blk_finish_plug(&plug);
798 :
799 : /* Lo and behold: we have just managed to send a transaction to
800 : the log. Before we can commit it, wait for the IO so far to
801 : complete. Control buffers being written are on the
802 : transaction's t_log_list queue, and metadata buffers are on
803 : the io_bufs list.
804 :
805 : Wait for the buffers in reverse order. That way we are
806 : less likely to be woken up until all IOs have completed, and
807 : so we incur less scheduling load.
808 : */
809 :
810 201307 : jbd2_debug(3, "JBD2: commit phase 3\n");
811 :
812 3322806 : while (!list_empty(&io_bufs)) {
813 3121499 : struct buffer_head *bh = list_entry(io_bufs.prev,
814 : struct buffer_head,
815 : b_assoc_buffers);
816 :
817 3121499 : wait_on_buffer(bh);
818 3121499 : cond_resched();
819 :
820 6242998 : if (unlikely(!buffer_uptodate(bh)))
821 0 : err = -EIO;
822 3121499 : jbd2_unfile_log_bh(bh);
823 3121499 : stats.run.rs_blocks_logged++;
824 :
825 : /*
826 : * The list contains temporary buffer heads created by
827 : * jbd2_journal_write_metadata_buffer().
828 : */
829 3121499 : BUFFER_TRACE(bh, "dumping temporary bh");
830 3121499 : __brelse(bh);
831 3121499 : J_ASSERT_BH(bh, atomic_read(&bh->b_count) == 0);
832 3121499 : free_buffer_head(bh);
833 :
834 : /* We also have to refile the corresponding shadowed buffer */
835 3121499 : jh = commit_transaction->t_shadow_list->b_tprev;
836 3121499 : bh = jh2bh(jh);
837 3121499 : clear_buffer_jwrite(bh);
838 6242998 : J_ASSERT_BH(bh, buffer_jbddirty(bh));
839 6242998 : J_ASSERT_BH(bh, !buffer_shadow(bh));
840 :
841 : /* The metadata is now released for reuse, but we need
842 : to remember it against this transaction so that when
843 : we finally commit, we can do any checkpointing
844 : required. */
845 3121499 : JBUFFER_TRACE(jh, "file as BJ_Forget");
846 3121499 : jbd2_journal_file_buffer(jh, commit_transaction, BJ_Forget);
847 3121499 : JBUFFER_TRACE(jh, "brelse shadowed buffer");
848 3121499 : __brelse(bh);
849 : }
850 :
851 201307 : J_ASSERT (commit_transaction->t_shadow_list == NULL);
852 :
853 : jbd2_debug(3, "JBD2: commit phase 4\n");
854 :
855 : /* Here we wait for the revoke record and descriptor record buffers */
856 442409 : while (!list_empty(&log_bufs)) {
857 241102 : struct buffer_head *bh;
858 :
859 241102 : bh = list_entry(log_bufs.prev, struct buffer_head, b_assoc_buffers);
860 241102 : wait_on_buffer(bh);
861 241102 : cond_resched();
862 :
863 482204 : if (unlikely(!buffer_uptodate(bh)))
864 0 : err = -EIO;
865 :
866 241102 : BUFFER_TRACE(bh, "ph5: control buffer writeout done: unfile");
867 241102 : clear_buffer_jwrite(bh);
868 241102 : jbd2_unfile_log_bh(bh);
869 241102 : stats.run.rs_blocks_logged++;
870 241102 : __brelse(bh); /* One for getblk */
871 : /* AKPM: bforget here */
872 : }
873 :
874 201307 : if (err)
875 0 : jbd2_journal_abort(journal, err);
876 :
877 201307 : jbd2_debug(3, "JBD2: commit phase 5\n");
878 201307 : write_lock(&journal->j_state_lock);
879 201307 : J_ASSERT(commit_transaction->t_state == T_COMMIT_DFLUSH);
880 201307 : commit_transaction->t_state = T_COMMIT_JFLUSH;
881 201307 : write_unlock(&journal->j_state_lock);
882 :
883 402614 : if (!jbd2_has_feature_async_commit(journal)) {
884 201307 : err = journal_submit_commit_record(journal, commit_transaction,
885 : &cbh, crc32_sum);
886 201307 : if (err)
887 0 : jbd2_journal_abort(journal, err);
888 : }
889 201307 : if (cbh)
890 201294 : err = journal_wait_on_commit_record(journal, cbh);
891 201307 : stats.run.rs_blocks_logged++;
892 402614 : if (jbd2_has_feature_async_commit(journal) &&
893 0 : journal->j_flags & JBD2_BARRIER) {
894 0 : blkdev_issue_flush(journal->j_dev);
895 : }
896 :
897 201307 : if (err)
898 0 : jbd2_journal_abort(journal, err);
899 :
900 201307 : WARN_ON_ONCE(
901 : atomic_read(&commit_transaction->t_outstanding_credits) < 0);
902 :
903 : /*
904 : * Now disk caches for filesystem device are flushed so we are safe to
905 : * erase checkpointed transactions from the log by updating journal
906 : * superblock.
907 : */
908 201307 : if (update_tail)
909 185 : jbd2_update_log_tail(journal, first_tid, first_block);
910 :
911 : /* End of a transaction! Finally, we can do checkpoint
912 : processing: any buffers committed as a result of this
913 : transaction can be removed from any checkpoint list it was on
914 : before. */
915 :
916 201307 : jbd2_debug(3, "JBD2: commit phase 6\n");
917 :
918 201307 : J_ASSERT(list_empty(&commit_transaction->t_inode_list));
919 201307 : J_ASSERT(commit_transaction->t_buffers == NULL);
920 201307 : J_ASSERT(commit_transaction->t_checkpoint_list == NULL);
921 201307 : J_ASSERT(commit_transaction->t_shadow_list == NULL);
922 :
923 201307 : restart_loop:
924 : /*
925 : * As there are other places (journal_unmap_buffer()) adding buffers
926 : * to this list we have to be careful and hold the j_list_lock.
927 : */
928 201307 : spin_lock(&journal->j_list_lock);
929 3449970 : while (commit_transaction->t_forget) {
930 3248663 : transaction_t *cp_transaction;
931 3248663 : struct buffer_head *bh;
932 3248663 : int try_to_free = 0;
933 3248663 : bool drop_ref;
934 :
935 3248663 : jh = commit_transaction->t_forget;
936 3248663 : spin_unlock(&journal->j_list_lock);
937 3248663 : bh = jh2bh(jh);
938 : /*
939 : * Get a reference so that bh cannot be freed before we are
940 : * done with it.
941 : */
942 3248663 : get_bh(bh);
943 3248663 : spin_lock(&jh->b_state_lock);
944 3248663 : J_ASSERT_JH(jh, jh->b_transaction == commit_transaction);
945 :
946 : /*
947 : * If there is undo-protected committed data against
948 : * this buffer, then we can remove it now. If it is a
949 : * buffer needing such protection, the old frozen_data
950 : * field now points to a committed version of the
951 : * buffer, so rotate that field to the new committed
952 : * data.
953 : *
954 : * Otherwise, we can just throw away the frozen data now.
955 : *
956 : * We also know that the frozen data has already fired
957 : * its triggers if they exist, so we can clear that too.
958 : */
959 3248663 : if (jh->b_committed_data) {
960 0 : jbd2_free(jh->b_committed_data, bh->b_size);
961 0 : jh->b_committed_data = NULL;
962 0 : if (jh->b_frozen_data) {
963 0 : jh->b_committed_data = jh->b_frozen_data;
964 0 : jh->b_frozen_data = NULL;
965 0 : jh->b_frozen_triggers = NULL;
966 : }
967 3248663 : } else if (jh->b_frozen_data) {
968 21377 : jbd2_free(jh->b_frozen_data, bh->b_size);
969 21377 : jh->b_frozen_data = NULL;
970 21377 : jh->b_frozen_triggers = NULL;
971 : }
972 :
973 3248663 : spin_lock(&journal->j_list_lock);
974 3248663 : cp_transaction = jh->b_cp_transaction;
975 3248663 : if (cp_transaction) {
976 923098 : JBUFFER_TRACE(jh, "remove from old cp transaction");
977 923098 : cp_transaction->t_chp_stats.cs_dropped++;
978 923098 : __jbd2_journal_remove_checkpoint(jh);
979 : }
980 :
981 : /* Only re-checkpoint the buffer_head if it is marked
982 : * dirty. If the buffer was added to the BJ_Forget list
983 : * by jbd2_journal_forget, it may no longer be dirty and
984 : * there's no point in keeping a checkpoint record for
985 : * it. */
986 :
987 : /*
988 : * A buffer which has been freed while still being journaled
989 : * by a previous transaction, refile the buffer to BJ_Forget of
990 : * the running transaction. If the just committed transaction
991 : * contains "add to orphan" operation, we can completely
992 : * invalidate the buffer now. We are rather through in that
993 : * since the buffer may be still accessible when blocksize <
994 : * pagesize and it is attached to the last partial page.
995 : */
996 6497326 : if (buffer_freed(bh) && !jh->b_next_transaction) {
997 2172 : struct address_space *mapping;
998 :
999 2172 : clear_buffer_freed(bh);
1000 2172 : clear_buffer_jbddirty(bh);
1001 :
1002 : /*
1003 : * Block device buffers need to stay mapped all the
1004 : * time, so it is enough to clear buffer_jbddirty and
1005 : * buffer_freed bits. For the file mapping buffers (i.e.
1006 : * journalled data) we need to unmap buffer and clear
1007 : * more bits. We also need to be careful about the check
1008 : * because the data page mapping can get cleared under
1009 : * our hands. Note that if mapping == NULL, we don't
1010 : * need to make buffer unmapped because the page is
1011 : * already detached from the mapping and buffers cannot
1012 : * get reused.
1013 : */
1014 2172 : mapping = READ_ONCE(bh->b_folio->mapping);
1015 2172 : if (mapping && !sb_is_blkdev_sb(mapping->host->i_sb)) {
1016 0 : clear_buffer_mapped(bh);
1017 0 : clear_buffer_new(bh);
1018 0 : clear_buffer_req(bh);
1019 0 : bh->b_bdev = NULL;
1020 : }
1021 : }
1022 :
1023 6497326 : if (buffer_jbddirty(bh)) {
1024 3121499 : JBUFFER_TRACE(jh, "add to new checkpointing trans");
1025 3121499 : __jbd2_journal_insert_checkpoint(jh, commit_transaction);
1026 3121499 : if (is_journal_aborted(journal))
1027 0 : clear_buffer_jbddirty(bh);
1028 : } else {
1029 254328 : J_ASSERT_BH(bh, !buffer_dirty(bh));
1030 : /*
1031 : * The buffer on BJ_Forget list and not jbddirty means
1032 : * it has been freed by this transaction and hence it
1033 : * could not have been reallocated until this
1034 : * transaction has committed. *BUT* it could be
1035 : * reallocated once we have written all the data to
1036 : * disk and before we process the buffer on BJ_Forget
1037 : * list.
1038 : */
1039 127164 : if (!jh->b_next_transaction)
1040 127164 : try_to_free = 1;
1041 : }
1042 3248663 : JBUFFER_TRACE(jh, "refile or unfile buffer");
1043 3248663 : drop_ref = __jbd2_journal_refile_buffer(jh);
1044 3248663 : spin_unlock(&jh->b_state_lock);
1045 3248663 : if (drop_ref)
1046 2956514 : jbd2_journal_put_journal_head(jh);
1047 3248663 : if (try_to_free)
1048 127164 : release_buffer_page(bh); /* Drops bh reference */
1049 : else
1050 3121499 : __brelse(bh);
1051 3248663 : cond_resched_lock(&journal->j_list_lock);
1052 : }
1053 201307 : spin_unlock(&journal->j_list_lock);
1054 : /*
1055 : * This is a bit sleazy. We use j_list_lock to protect transition
1056 : * of a transaction into T_FINISHED state and calling
1057 : * __jbd2_journal_drop_transaction(). Otherwise we could race with
1058 : * other checkpointing code processing the transaction...
1059 : */
1060 201307 : write_lock(&journal->j_state_lock);
1061 201307 : spin_lock(&journal->j_list_lock);
1062 : /*
1063 : * Now recheck if some buffers did not get attached to the transaction
1064 : * while the lock was dropped...
1065 : */
1066 201307 : if (commit_transaction->t_forget) {
1067 0 : spin_unlock(&journal->j_list_lock);
1068 0 : write_unlock(&journal->j_state_lock);
1069 0 : goto restart_loop;
1070 : }
1071 :
1072 : /* Add the transaction to the checkpoint list
1073 : * __journal_remove_checkpoint() can not destroy transaction
1074 : * under us because it is not marked as T_FINISHED yet */
1075 201307 : if (journal->j_checkpoint_transactions == NULL) {
1076 86172 : journal->j_checkpoint_transactions = commit_transaction;
1077 86172 : commit_transaction->t_cpnext = commit_transaction;
1078 86172 : commit_transaction->t_cpprev = commit_transaction;
1079 : } else {
1080 115135 : commit_transaction->t_cpnext =
1081 : journal->j_checkpoint_transactions;
1082 115135 : commit_transaction->t_cpprev =
1083 115135 : commit_transaction->t_cpnext->t_cpprev;
1084 115135 : commit_transaction->t_cpnext->t_cpprev =
1085 : commit_transaction;
1086 115135 : commit_transaction->t_cpprev->t_cpnext =
1087 : commit_transaction;
1088 : }
1089 201307 : spin_unlock(&journal->j_list_lock);
1090 :
1091 : /* Done with this transaction! */
1092 :
1093 201307 : jbd2_debug(3, "JBD2: commit phase 7\n");
1094 :
1095 201307 : J_ASSERT(commit_transaction->t_state == T_COMMIT_JFLUSH);
1096 :
1097 201307 : commit_transaction->t_start = jiffies;
1098 201307 : stats.run.rs_logging = jbd2_time_diff(stats.run.rs_logging,
1099 : commit_transaction->t_start);
1100 :
1101 : /*
1102 : * File the transaction statistics
1103 : */
1104 201307 : stats.ts_tid = commit_transaction->t_tid;
1105 201307 : stats.run.rs_handle_count =
1106 201307 : atomic_read(&commit_transaction->t_handle_count);
1107 201307 : trace_jbd2_run_stats(journal->j_fs_dev->bd_dev,
1108 : commit_transaction->t_tid, &stats.run);
1109 201307 : stats.ts_requested = (commit_transaction->t_requested) ? 1 : 0;
1110 :
1111 201307 : commit_transaction->t_state = T_COMMIT_CALLBACK;
1112 201307 : J_ASSERT(commit_transaction == journal->j_committing_transaction);
1113 201307 : journal->j_commit_sequence = commit_transaction->t_tid;
1114 201307 : journal->j_committing_transaction = NULL;
1115 201307 : commit_time = ktime_to_ns(ktime_sub(ktime_get(), start_time));
1116 :
1117 : /*
1118 : * weight the commit time higher than the average time so we don't
1119 : * react too strongly to vast changes in the commit time
1120 : */
1121 201307 : if (likely(journal->j_average_commit_time))
1122 199760 : journal->j_average_commit_time = (commit_time +
1123 199760 : journal->j_average_commit_time*3) / 4;
1124 : else
1125 1547 : journal->j_average_commit_time = commit_time;
1126 :
1127 201307 : write_unlock(&journal->j_state_lock);
1128 :
1129 201307 : if (journal->j_commit_callback)
1130 201307 : journal->j_commit_callback(journal, commit_transaction);
1131 201307 : if (journal->j_fc_cleanup_callback)
1132 0 : journal->j_fc_cleanup_callback(journal, 1, commit_transaction->t_tid);
1133 :
1134 201307 : trace_jbd2_end_commit(journal, commit_transaction);
1135 201307 : jbd2_debug(1, "JBD2: commit %d complete, head %d\n",
1136 : journal->j_commit_sequence, journal->j_tail_sequence);
1137 :
1138 201307 : write_lock(&journal->j_state_lock);
1139 201307 : journal->j_flags &= ~JBD2_FULL_COMMIT_ONGOING;
1140 201307 : journal->j_flags &= ~JBD2_FAST_COMMIT_ONGOING;
1141 201307 : spin_lock(&journal->j_list_lock);
1142 201307 : commit_transaction->t_state = T_FINISHED;
1143 : /* Check if the transaction can be dropped now that we are finished */
1144 201307 : if (commit_transaction->t_checkpoint_list == NULL) {
1145 1594 : __jbd2_journal_drop_transaction(journal, commit_transaction);
1146 1594 : jbd2_journal_free_transaction(commit_transaction);
1147 : }
1148 201307 : spin_unlock(&journal->j_list_lock);
1149 201307 : write_unlock(&journal->j_state_lock);
1150 201307 : wake_up(&journal->j_wait_done_commit);
1151 201307 : wake_up(&journal->j_fc_wait);
1152 :
1153 : /*
1154 : * Calculate overall stats
1155 : */
1156 201307 : spin_lock(&journal->j_history_lock);
1157 201307 : journal->j_stats.ts_tid++;
1158 201307 : journal->j_stats.ts_requested += stats.ts_requested;
1159 201307 : journal->j_stats.run.rs_wait += stats.run.rs_wait;
1160 201307 : journal->j_stats.run.rs_request_delay += stats.run.rs_request_delay;
1161 201307 : journal->j_stats.run.rs_running += stats.run.rs_running;
1162 201307 : journal->j_stats.run.rs_locked += stats.run.rs_locked;
1163 201307 : journal->j_stats.run.rs_flushing += stats.run.rs_flushing;
1164 201307 : journal->j_stats.run.rs_logging += stats.run.rs_logging;
1165 201307 : journal->j_stats.run.rs_handle_count += stats.run.rs_handle_count;
1166 201307 : journal->j_stats.run.rs_blocks += stats.run.rs_blocks;
1167 201307 : journal->j_stats.run.rs_blocks_logged += stats.run.rs_blocks_logged;
1168 201307 : spin_unlock(&journal->j_history_lock);
1169 201307 : }
|