Merge branch 'for-2.6.30' of git://linux-nfs.org/~bfields/linux
[linux-2.6] / fs / jbd2 / commit.c
1 /*
2  * linux/fs/jbd2/commit.c
3  *
4  * Written by Stephen C. Tweedie <sct@redhat.com>, 1998
5  *
6  * Copyright 1998 Red Hat corp --- All Rights Reserved
7  *
8  * This file is part of the Linux kernel and is made available under
9  * the terms of the GNU General Public License, version 2, or at your
10  * option, any later version, incorporated herein by reference.
11  *
12  * 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>
18 #include <linux/jbd2.h>
19 #include <linux/marker.h>
20 #include <linux/errno.h>
21 #include <linux/slab.h>
22 #include <linux/mm.h>
23 #include <linux/pagemap.h>
24 #include <linux/jiffies.h>
25 #include <linux/crc32.h>
26 #include <linux/writeback.h>
27 #include <linux/backing-dev.h>
28 #include <linux/bio.h>
29
30 /*
31  * Default IO end handler for temporary BJ_IO buffer_heads.
32  */
33 static void journal_end_buffer_io_sync(struct buffer_head *bh, int uptodate)
34 {
35         BUFFER_TRACE(bh, "");
36         if (uptodate)
37                 set_buffer_uptodate(bh);
38         else
39                 clear_buffer_uptodate(bh);
40         unlock_buffer(bh);
41 }
42
43 /*
44  * When an ext4 file is truncated, it is possible that some pages are not
45  * successfully freed, because they are attached to a committing transaction.
46  * After the transaction commits, these pages are left on the LRU, with no
47  * ->mapping, and with attached buffers.  These pages are trivially reclaimable
48  * by the VM, but their apparent absence upsets the VM accounting, and it makes
49  * the numbers in /proc/meminfo look odd.
50  *
51  * So here, we have a buffer which has just come off the forget list.  Look to
52  * see if we can strip all buffers from the backing page.
53  *
54  * Called under lock_journal(), and possibly under journal_datalist_lock.  The
55  * caller provided us with a ref against the buffer, and we drop that here.
56  */
57 static void release_buffer_page(struct buffer_head *bh)
58 {
59         struct page *page;
60
61         if (buffer_dirty(bh))
62                 goto nope;
63         if (atomic_read(&bh->b_count) != 1)
64                 goto nope;
65         page = bh->b_page;
66         if (!page)
67                 goto nope;
68         if (page->mapping)
69                 goto nope;
70
71         /* OK, it's a truncated page */
72         if (!trylock_page(page))
73                 goto nope;
74
75         page_cache_get(page);
76         __brelse(bh);
77         try_to_free_buffers(page);
78         unlock_page(page);
79         page_cache_release(page);
80         return;
81
82 nope:
83         __brelse(bh);
84 }
85
86 /*
87  * Done it all: now submit the commit record.  We should have
88  * cleaned up our previous buffers by now, so if we are in abort
89  * mode we can now just skip the rest of the journal write
90  * entirely.
91  *
92  * Returns 1 if the journal needs to be aborted or 0 on success
93  */
94 static int journal_submit_commit_record(journal_t *journal,
95                                         transaction_t *commit_transaction,
96                                         struct buffer_head **cbh,
97                                         __u32 crc32_sum)
98 {
99         struct journal_head *descriptor;
100         struct commit_header *tmp;
101         struct buffer_head *bh;
102         int ret;
103         int barrier_done = 0;
104         struct timespec now = current_kernel_time();
105
106         if (is_journal_aborted(journal))
107                 return 0;
108
109         descriptor = jbd2_journal_get_descriptor_buffer(journal);
110         if (!descriptor)
111                 return 1;
112
113         bh = jh2bh(descriptor);
114
115         tmp = (struct commit_header *)bh->b_data;
116         tmp->h_magic = cpu_to_be32(JBD2_MAGIC_NUMBER);
117         tmp->h_blocktype = cpu_to_be32(JBD2_COMMIT_BLOCK);
118         tmp->h_sequence = cpu_to_be32(commit_transaction->t_tid);
119         tmp->h_commit_sec = cpu_to_be64(now.tv_sec);
120         tmp->h_commit_nsec = cpu_to_be32(now.tv_nsec);
121
122         if (JBD2_HAS_COMPAT_FEATURE(journal,
123                                     JBD2_FEATURE_COMPAT_CHECKSUM)) {
124                 tmp->h_chksum_type      = JBD2_CRC32_CHKSUM;
125                 tmp->h_chksum_size      = JBD2_CRC32_CHKSUM_SIZE;
126                 tmp->h_chksum[0]        = cpu_to_be32(crc32_sum);
127         }
128
129         JBUFFER_TRACE(descriptor, "submit commit block");
130         lock_buffer(bh);
131         clear_buffer_dirty(bh);
132         set_buffer_uptodate(bh);
133         bh->b_end_io = journal_end_buffer_io_sync;
134
135         if (journal->j_flags & JBD2_BARRIER &&
136                 !JBD2_HAS_INCOMPAT_FEATURE(journal,
137                                          JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT)) {
138                 set_buffer_ordered(bh);
139                 barrier_done = 1;
140         }
141         ret = submit_bh(WRITE_SYNC_PLUG, bh);
142         if (barrier_done)
143                 clear_buffer_ordered(bh);
144
145         /* is it possible for another commit to fail at roughly
146          * the same time as this one?  If so, we don't want to
147          * trust the barrier flag in the super, but instead want
148          * to remember if we sent a barrier request
149          */
150         if (ret == -EOPNOTSUPP && barrier_done) {
151                 printk(KERN_WARNING
152                        "JBD: barrier-based sync failed on %s - "
153                        "disabling barriers\n", journal->j_devname);
154                 spin_lock(&journal->j_state_lock);
155                 journal->j_flags &= ~JBD2_BARRIER;
156                 spin_unlock(&journal->j_state_lock);
157
158                 /* And try again, without the barrier */
159                 lock_buffer(bh);
160                 set_buffer_uptodate(bh);
161                 clear_buffer_dirty(bh);
162                 ret = submit_bh(WRITE_SYNC_PLUG, bh);
163         }
164         *cbh = bh;
165         return ret;
166 }
167
168 /*
169  * This function along with journal_submit_commit_record
170  * allows to write the commit record asynchronously.
171  */
172 static int journal_wait_on_commit_record(journal_t *journal,
173                                          struct buffer_head *bh)
174 {
175         int ret = 0;
176
177 retry:
178         clear_buffer_dirty(bh);
179         wait_on_buffer(bh);
180         if (buffer_eopnotsupp(bh) && (journal->j_flags & JBD2_BARRIER)) {
181                 printk(KERN_WARNING
182                        "JBD2: wait_on_commit_record: sync failed on %s - "
183                        "disabling barriers\n", journal->j_devname);
184                 spin_lock(&journal->j_state_lock);
185                 journal->j_flags &= ~JBD2_BARRIER;
186                 spin_unlock(&journal->j_state_lock);
187
188                 lock_buffer(bh);
189                 clear_buffer_dirty(bh);
190                 set_buffer_uptodate(bh);
191                 bh->b_end_io = journal_end_buffer_io_sync;
192
193                 ret = submit_bh(WRITE_SYNC_PLUG, bh);
194                 if (ret) {
195                         unlock_buffer(bh);
196                         return ret;
197                 }
198                 goto retry;
199         }
200
201         if (unlikely(!buffer_uptodate(bh)))
202                 ret = -EIO;
203         put_bh(bh);            /* One for getblk() */
204         jbd2_journal_put_journal_head(bh2jh(bh));
205
206         return ret;
207 }
208
209 /*
210  * write the filemap data using writepage() address_space_operations.
211  * We don't do block allocation here even for delalloc. We don't
212  * use writepages() because with dealyed allocation we may be doing
213  * block allocation in writepages().
214  */
215 static int journal_submit_inode_data_buffers(struct address_space *mapping)
216 {
217         int ret;
218         struct writeback_control wbc = {
219                 .sync_mode =  WB_SYNC_ALL,
220                 .nr_to_write = mapping->nrpages * 2,
221                 .range_start = 0,
222                 .range_end = i_size_read(mapping->host),
223                 .for_writepages = 1,
224         };
225
226         ret = generic_writepages(mapping, &wbc);
227         return ret;
228 }
229
230 /*
231  * Submit all the data buffers of inode associated with the transaction to
232  * disk.
233  *
234  * We are in a committing transaction. Therefore no new inode can be added to
235  * our inode list. We use JI_COMMIT_RUNNING flag to protect inode we currently
236  * operate on from being released while we write out pages.
237  */
238 static int journal_submit_data_buffers(journal_t *journal,
239                 transaction_t *commit_transaction)
240 {
241         struct jbd2_inode *jinode;
242         int err, ret = 0;
243         struct address_space *mapping;
244
245         spin_lock(&journal->j_list_lock);
246         list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) {
247                 mapping = jinode->i_vfs_inode->i_mapping;
248                 jinode->i_flags |= JI_COMMIT_RUNNING;
249                 spin_unlock(&journal->j_list_lock);
250                 /*
251                  * submit the inode data buffers. We use writepage
252                  * instead of writepages. Because writepages can do
253                  * block allocation  with delalloc. We need to write
254                  * only allocated blocks here.
255                  */
256                 err = journal_submit_inode_data_buffers(mapping);
257                 if (!ret)
258                         ret = err;
259                 spin_lock(&journal->j_list_lock);
260                 J_ASSERT(jinode->i_transaction == commit_transaction);
261                 jinode->i_flags &= ~JI_COMMIT_RUNNING;
262                 wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING);
263         }
264         spin_unlock(&journal->j_list_lock);
265         return ret;
266 }
267
268 /*
269  * Wait for data submitted for writeout, refile inodes to proper
270  * transaction if needed.
271  *
272  */
273 static int journal_finish_inode_data_buffers(journal_t *journal,
274                 transaction_t *commit_transaction)
275 {
276         struct jbd2_inode *jinode, *next_i;
277         int err, ret = 0;
278
279         /* For locking, see the comment in journal_submit_data_buffers() */
280         spin_lock(&journal->j_list_lock);
281         list_for_each_entry(jinode, &commit_transaction->t_inode_list, i_list) {
282                 jinode->i_flags |= JI_COMMIT_RUNNING;
283                 spin_unlock(&journal->j_list_lock);
284                 err = filemap_fdatawait(jinode->i_vfs_inode->i_mapping);
285                 if (err) {
286                         /*
287                          * Because AS_EIO is cleared by
288                          * wait_on_page_writeback_range(), set it again so
289                          * that user process can get -EIO from fsync().
290                          */
291                         set_bit(AS_EIO,
292                                 &jinode->i_vfs_inode->i_mapping->flags);
293
294                         if (!ret)
295                                 ret = err;
296                 }
297                 spin_lock(&journal->j_list_lock);
298                 jinode->i_flags &= ~JI_COMMIT_RUNNING;
299                 wake_up_bit(&jinode->i_flags, __JI_COMMIT_RUNNING);
300         }
301
302         /* Now refile inode to proper lists */
303         list_for_each_entry_safe(jinode, next_i,
304                                  &commit_transaction->t_inode_list, i_list) {
305                 list_del(&jinode->i_list);
306                 if (jinode->i_next_transaction) {
307                         jinode->i_transaction = jinode->i_next_transaction;
308                         jinode->i_next_transaction = NULL;
309                         list_add(&jinode->i_list,
310                                 &jinode->i_transaction->t_inode_list);
311                 } else {
312                         jinode->i_transaction = NULL;
313                 }
314         }
315         spin_unlock(&journal->j_list_lock);
316
317         return ret;
318 }
319
320 static __u32 jbd2_checksum_data(__u32 crc32_sum, struct buffer_head *bh)
321 {
322         struct page *page = bh->b_page;
323         char *addr;
324         __u32 checksum;
325
326         addr = kmap_atomic(page, KM_USER0);
327         checksum = crc32_be(crc32_sum,
328                 (void *)(addr + offset_in_page(bh->b_data)), bh->b_size);
329         kunmap_atomic(addr, KM_USER0);
330
331         return checksum;
332 }
333
334 static void write_tag_block(int tag_bytes, journal_block_tag_t *tag,
335                                    unsigned long long block)
336 {
337         tag->t_blocknr = cpu_to_be32(block & (u32)~0);
338         if (tag_bytes > JBD2_TAG_SIZE32)
339                 tag->t_blocknr_high = cpu_to_be32((block >> 31) >> 1);
340 }
341
342 /*
343  * jbd2_journal_commit_transaction
344  *
345  * The primary function for committing a transaction to the log.  This
346  * function is called by the journal thread to begin a complete commit.
347  */
348 void jbd2_journal_commit_transaction(journal_t *journal)
349 {
350         struct transaction_stats_s stats;
351         transaction_t *commit_transaction;
352         struct journal_head *jh, *new_jh, *descriptor;
353         struct buffer_head **wbuf = journal->j_wbuf;
354         int bufs;
355         int flags;
356         int err;
357         unsigned long long blocknr;
358         ktime_t start_time;
359         u64 commit_time;
360         char *tagp = NULL;
361         journal_header_t *header;
362         journal_block_tag_t *tag = NULL;
363         int space_left = 0;
364         int first_tag = 0;
365         int tag_flag;
366         int i, to_free = 0;
367         int tag_bytes = journal_tag_bytes(journal);
368         struct buffer_head *cbh = NULL; /* For transactional checksums */
369         __u32 crc32_sum = ~0;
370         int write_op = WRITE;
371
372         /*
373          * First job: lock down the current transaction and wait for
374          * all outstanding updates to complete.
375          */
376
377 #ifdef COMMIT_STATS
378         spin_lock(&journal->j_list_lock);
379         summarise_journal_usage(journal);
380         spin_unlock(&journal->j_list_lock);
381 #endif
382
383         /* Do we need to erase the effects of a prior jbd2_journal_flush? */
384         if (journal->j_flags & JBD2_FLUSHED) {
385                 jbd_debug(3, "super block updated\n");
386                 jbd2_journal_update_superblock(journal, 1);
387         } else {
388                 jbd_debug(3, "superblock not updated\n");
389         }
390
391         J_ASSERT(journal->j_running_transaction != NULL);
392         J_ASSERT(journal->j_committing_transaction == NULL);
393
394         commit_transaction = journal->j_running_transaction;
395         J_ASSERT(commit_transaction->t_state == T_RUNNING);
396
397         trace_mark(jbd2_start_commit, "dev %s transaction %d",
398                    journal->j_devname, commit_transaction->t_tid);
399         jbd_debug(1, "JBD: starting commit of transaction %d\n",
400                         commit_transaction->t_tid);
401
402         spin_lock(&journal->j_state_lock);
403         commit_transaction->t_state = T_LOCKED;
404
405         /*
406          * Use plugged writes here, since we want to submit several before
407          * we unplug the device. We don't do explicit unplugging in here,
408          * instead we rely on sync_buffer() doing the unplug for us.
409          */
410         if (commit_transaction->t_synchronous_commit)
411                 write_op = WRITE_SYNC_PLUG;
412         stats.u.run.rs_wait = commit_transaction->t_max_wait;
413         stats.u.run.rs_locked = jiffies;
414         stats.u.run.rs_running = jbd2_time_diff(commit_transaction->t_start,
415                                                 stats.u.run.rs_locked);
416
417         spin_lock(&commit_transaction->t_handle_lock);
418         while (commit_transaction->t_updates) {
419                 DEFINE_WAIT(wait);
420
421                 prepare_to_wait(&journal->j_wait_updates, &wait,
422                                         TASK_UNINTERRUPTIBLE);
423                 if (commit_transaction->t_updates) {
424                         spin_unlock(&commit_transaction->t_handle_lock);
425                         spin_unlock(&journal->j_state_lock);
426                         schedule();
427                         spin_lock(&journal->j_state_lock);
428                         spin_lock(&commit_transaction->t_handle_lock);
429                 }
430                 finish_wait(&journal->j_wait_updates, &wait);
431         }
432         spin_unlock(&commit_transaction->t_handle_lock);
433
434         J_ASSERT (commit_transaction->t_outstanding_credits <=
435                         journal->j_max_transaction_buffers);
436
437         /*
438          * First thing we are allowed to do is to discard any remaining
439          * BJ_Reserved buffers.  Note, it is _not_ permissible to assume
440          * that there are no such buffers: if a large filesystem
441          * operation like a truncate needs to split itself over multiple
442          * transactions, then it may try to do a jbd2_journal_restart() while
443          * there are still BJ_Reserved buffers outstanding.  These must
444          * be released cleanly from the current transaction.
445          *
446          * In this case, the filesystem must still reserve write access
447          * again before modifying the buffer in the new transaction, but
448          * we do not require it to remember exactly which old buffers it
449          * has reserved.  This is consistent with the existing behaviour
450          * that multiple jbd2_journal_get_write_access() calls to the same
451          * buffer are perfectly permissable.
452          */
453         while (commit_transaction->t_reserved_list) {
454                 jh = commit_transaction->t_reserved_list;
455                 JBUFFER_TRACE(jh, "reserved, unused: refile");
456                 /*
457                  * A jbd2_journal_get_undo_access()+jbd2_journal_release_buffer() may
458                  * leave undo-committed data.
459                  */
460                 if (jh->b_committed_data) {
461                         struct buffer_head *bh = jh2bh(jh);
462
463                         jbd_lock_bh_state(bh);
464                         jbd2_free(jh->b_committed_data, bh->b_size);
465                         jh->b_committed_data = NULL;
466                         jbd_unlock_bh_state(bh);
467                 }
468                 jbd2_journal_refile_buffer(journal, jh);
469         }
470
471         /*
472          * Now try to drop any written-back buffers from the journal's
473          * checkpoint lists.  We do this *before* commit because it potentially
474          * frees some memory
475          */
476         spin_lock(&journal->j_list_lock);
477         __jbd2_journal_clean_checkpoint_list(journal);
478         spin_unlock(&journal->j_list_lock);
479
480         jbd_debug (3, "JBD: commit phase 1\n");
481
482         /*
483          * Switch to a new revoke table.
484          */
485         jbd2_journal_switch_revoke_table(journal);
486
487         stats.u.run.rs_flushing = jiffies;
488         stats.u.run.rs_locked = jbd2_time_diff(stats.u.run.rs_locked,
489                                                stats.u.run.rs_flushing);
490
491         commit_transaction->t_state = T_FLUSH;
492         journal->j_committing_transaction = commit_transaction;
493         journal->j_running_transaction = NULL;
494         start_time = ktime_get();
495         commit_transaction->t_log_start = journal->j_head;
496         wake_up(&journal->j_wait_transaction_locked);
497         spin_unlock(&journal->j_state_lock);
498
499         jbd_debug (3, "JBD: commit phase 2\n");
500
501         /*
502          * Now start flushing things to disk, in the order they appear
503          * on the transaction lists.  Data blocks go first.
504          */
505         err = journal_submit_data_buffers(journal, commit_transaction);
506         if (err)
507                 jbd2_journal_abort(journal, err);
508
509         jbd2_journal_write_revoke_records(journal, commit_transaction);
510
511         jbd_debug(3, "JBD: commit phase 2\n");
512
513         /*
514          * Way to go: we have now written out all of the data for a
515          * transaction!  Now comes the tricky part: we need to write out
516          * metadata.  Loop over the transaction's entire buffer list:
517          */
518         spin_lock(&journal->j_state_lock);
519         commit_transaction->t_state = T_COMMIT;
520         spin_unlock(&journal->j_state_lock);
521
522         stats.u.run.rs_logging = jiffies;
523         stats.u.run.rs_flushing = jbd2_time_diff(stats.u.run.rs_flushing,
524                                                  stats.u.run.rs_logging);
525         stats.u.run.rs_blocks = commit_transaction->t_outstanding_credits;
526         stats.u.run.rs_blocks_logged = 0;
527
528         J_ASSERT(commit_transaction->t_nr_buffers <=
529                  commit_transaction->t_outstanding_credits);
530
531         err = 0;
532         descriptor = NULL;
533         bufs = 0;
534         while (commit_transaction->t_buffers) {
535
536                 /* Find the next buffer to be journaled... */
537
538                 jh = commit_transaction->t_buffers;
539
540                 /* If we're in abort mode, we just un-journal the buffer and
541                    release it. */
542
543                 if (is_journal_aborted(journal)) {
544                         clear_buffer_jbddirty(jh2bh(jh));
545                         JBUFFER_TRACE(jh, "journal is aborting: refile");
546                         jbd2_buffer_abort_trigger(jh,
547                                                   jh->b_frozen_data ?
548                                                   jh->b_frozen_triggers :
549                                                   jh->b_triggers);
550                         jbd2_journal_refile_buffer(journal, jh);
551                         /* If that was the last one, we need to clean up
552                          * any descriptor buffers which may have been
553                          * already allocated, even if we are now
554                          * aborting. */
555                         if (!commit_transaction->t_buffers)
556                                 goto start_journal_io;
557                         continue;
558                 }
559
560                 /* Make sure we have a descriptor block in which to
561                    record the metadata buffer. */
562
563                 if (!descriptor) {
564                         struct buffer_head *bh;
565
566                         J_ASSERT (bufs == 0);
567
568                         jbd_debug(4, "JBD: get descriptor\n");
569
570                         descriptor = jbd2_journal_get_descriptor_buffer(journal);
571                         if (!descriptor) {
572                                 jbd2_journal_abort(journal, -EIO);
573                                 continue;
574                         }
575
576                         bh = jh2bh(descriptor);
577                         jbd_debug(4, "JBD: got buffer %llu (%p)\n",
578                                 (unsigned long long)bh->b_blocknr, bh->b_data);
579                         header = (journal_header_t *)&bh->b_data[0];
580                         header->h_magic     = cpu_to_be32(JBD2_MAGIC_NUMBER);
581                         header->h_blocktype = cpu_to_be32(JBD2_DESCRIPTOR_BLOCK);
582                         header->h_sequence  = cpu_to_be32(commit_transaction->t_tid);
583
584                         tagp = &bh->b_data[sizeof(journal_header_t)];
585                         space_left = bh->b_size - sizeof(journal_header_t);
586                         first_tag = 1;
587                         set_buffer_jwrite(bh);
588                         set_buffer_dirty(bh);
589                         wbuf[bufs++] = bh;
590
591                         /* Record it so that we can wait for IO
592                            completion later */
593                         BUFFER_TRACE(bh, "ph3: file as descriptor");
594                         jbd2_journal_file_buffer(descriptor, commit_transaction,
595                                         BJ_LogCtl);
596                 }
597
598                 /* Where is the buffer to be written? */
599
600                 err = jbd2_journal_next_log_block(journal, &blocknr);
601                 /* If the block mapping failed, just abandon the buffer
602                    and repeat this loop: we'll fall into the
603                    refile-on-abort condition above. */
604                 if (err) {
605                         jbd2_journal_abort(journal, err);
606                         continue;
607                 }
608
609                 /*
610                  * start_this_handle() uses t_outstanding_credits to determine
611                  * the free space in the log, but this counter is changed
612                  * by jbd2_journal_next_log_block() also.
613                  */
614                 commit_transaction->t_outstanding_credits--;
615
616                 /* Bump b_count to prevent truncate from stumbling over
617                    the shadowed buffer!  @@@ This can go if we ever get
618                    rid of the BJ_IO/BJ_Shadow pairing of buffers. */
619                 atomic_inc(&jh2bh(jh)->b_count);
620
621                 /* Make a temporary IO buffer with which to write it out
622                    (this will requeue both the metadata buffer and the
623                    temporary IO buffer). new_bh goes on BJ_IO*/
624
625                 set_bit(BH_JWrite, &jh2bh(jh)->b_state);
626                 /*
627                  * akpm: jbd2_journal_write_metadata_buffer() sets
628                  * new_bh->b_transaction to commit_transaction.
629                  * We need to clean this up before we release new_bh
630                  * (which is of type BJ_IO)
631                  */
632                 JBUFFER_TRACE(jh, "ph3: write metadata");
633                 flags = jbd2_journal_write_metadata_buffer(commit_transaction,
634                                                       jh, &new_jh, blocknr);
635                 set_bit(BH_JWrite, &jh2bh(new_jh)->b_state);
636                 wbuf[bufs++] = jh2bh(new_jh);
637
638                 /* Record the new block's tag in the current descriptor
639                    buffer */
640
641                 tag_flag = 0;
642                 if (flags & 1)
643                         tag_flag |= JBD2_FLAG_ESCAPE;
644                 if (!first_tag)
645                         tag_flag |= JBD2_FLAG_SAME_UUID;
646
647                 tag = (journal_block_tag_t *) tagp;
648                 write_tag_block(tag_bytes, tag, jh2bh(jh)->b_blocknr);
649                 tag->t_flags = cpu_to_be32(tag_flag);
650                 tagp += tag_bytes;
651                 space_left -= tag_bytes;
652
653                 if (first_tag) {
654                         memcpy (tagp, journal->j_uuid, 16);
655                         tagp += 16;
656                         space_left -= 16;
657                         first_tag = 0;
658                 }
659
660                 /* If there's no more to do, or if the descriptor is full,
661                    let the IO rip! */
662
663                 if (bufs == journal->j_wbufsize ||
664                     commit_transaction->t_buffers == NULL ||
665                     space_left < tag_bytes + 16) {
666
667                         jbd_debug(4, "JBD: Submit %d IOs\n", bufs);
668
669                         /* Write an end-of-descriptor marker before
670                            submitting the IOs.  "tag" still points to
671                            the last tag we set up. */
672
673                         tag->t_flags |= cpu_to_be32(JBD2_FLAG_LAST_TAG);
674
675 start_journal_io:
676                         for (i = 0; i < bufs; i++) {
677                                 struct buffer_head *bh = wbuf[i];
678                                 /*
679                                  * Compute checksum.
680                                  */
681                                 if (JBD2_HAS_COMPAT_FEATURE(journal,
682                                         JBD2_FEATURE_COMPAT_CHECKSUM)) {
683                                         crc32_sum =
684                                             jbd2_checksum_data(crc32_sum, bh);
685                                 }
686
687                                 lock_buffer(bh);
688                                 clear_buffer_dirty(bh);
689                                 set_buffer_uptodate(bh);
690                                 bh->b_end_io = journal_end_buffer_io_sync;
691                                 submit_bh(write_op, bh);
692                         }
693                         cond_resched();
694                         stats.u.run.rs_blocks_logged += bufs;
695
696                         /* Force a new descriptor to be generated next
697                            time round the loop. */
698                         descriptor = NULL;
699                         bufs = 0;
700                 }
701         }
702
703         /* Done it all: now write the commit record asynchronously. */
704
705         if (JBD2_HAS_INCOMPAT_FEATURE(journal,
706                 JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT)) {
707                 err = journal_submit_commit_record(journal, commit_transaction,
708                                                  &cbh, crc32_sum);
709                 if (err)
710                         __jbd2_journal_abort_hard(journal);
711         }
712
713         /*
714          * This is the right place to wait for data buffers both for ASYNC
715          * and !ASYNC commit. If commit is ASYNC, we need to wait only after
716          * the commit block went to disk (which happens above). If commit is
717          * SYNC, we need to wait for data buffers before we start writing
718          * commit block, which happens below in such setting.
719          */
720         err = journal_finish_inode_data_buffers(journal, commit_transaction);
721         if (err) {
722                 printk(KERN_WARNING
723                         "JBD2: Detected IO errors while flushing file data "
724                        "on %s\n", journal->j_devname);
725                 if (journal->j_flags & JBD2_ABORT_ON_SYNCDATA_ERR)
726                         jbd2_journal_abort(journal, err);
727                 err = 0;
728         }
729
730         /* Lo and behold: we have just managed to send a transaction to
731            the log.  Before we can commit it, wait for the IO so far to
732            complete.  Control buffers being written are on the
733            transaction's t_log_list queue, and metadata buffers are on
734            the t_iobuf_list queue.
735
736            Wait for the buffers in reverse order.  That way we are
737            less likely to be woken up until all IOs have completed, and
738            so we incur less scheduling load.
739         */
740
741         jbd_debug(3, "JBD: commit phase 3\n");
742
743         /*
744          * akpm: these are BJ_IO, and j_list_lock is not needed.
745          * See __journal_try_to_free_buffer.
746          */
747 wait_for_iobuf:
748         while (commit_transaction->t_iobuf_list != NULL) {
749                 struct buffer_head *bh;
750
751                 jh = commit_transaction->t_iobuf_list->b_tprev;
752                 bh = jh2bh(jh);
753                 if (buffer_locked(bh)) {
754                         wait_on_buffer(bh);
755                         goto wait_for_iobuf;
756                 }
757                 if (cond_resched())
758                         goto wait_for_iobuf;
759
760                 if (unlikely(!buffer_uptodate(bh)))
761                         err = -EIO;
762
763                 clear_buffer_jwrite(bh);
764
765                 JBUFFER_TRACE(jh, "ph4: unfile after journal write");
766                 jbd2_journal_unfile_buffer(journal, jh);
767
768                 /*
769                  * ->t_iobuf_list should contain only dummy buffer_heads
770                  * which were created by jbd2_journal_write_metadata_buffer().
771                  */
772                 BUFFER_TRACE(bh, "dumping temporary bh");
773                 jbd2_journal_put_journal_head(jh);
774                 __brelse(bh);
775                 J_ASSERT_BH(bh, atomic_read(&bh->b_count) == 0);
776                 free_buffer_head(bh);
777
778                 /* We also have to unlock and free the corresponding
779                    shadowed buffer */
780                 jh = commit_transaction->t_shadow_list->b_tprev;
781                 bh = jh2bh(jh);
782                 clear_bit(BH_JWrite, &bh->b_state);
783                 J_ASSERT_BH(bh, buffer_jbddirty(bh));
784
785                 /* The metadata is now released for reuse, but we need
786                    to remember it against this transaction so that when
787                    we finally commit, we can do any checkpointing
788                    required. */
789                 JBUFFER_TRACE(jh, "file as BJ_Forget");
790                 jbd2_journal_file_buffer(jh, commit_transaction, BJ_Forget);
791                 /* Wake up any transactions which were waiting for this
792                    IO to complete */
793                 wake_up_bit(&bh->b_state, BH_Unshadow);
794                 JBUFFER_TRACE(jh, "brelse shadowed buffer");
795                 __brelse(bh);
796         }
797
798         J_ASSERT (commit_transaction->t_shadow_list == NULL);
799
800         jbd_debug(3, "JBD: commit phase 4\n");
801
802         /* Here we wait for the revoke record and descriptor record buffers */
803  wait_for_ctlbuf:
804         while (commit_transaction->t_log_list != NULL) {
805                 struct buffer_head *bh;
806
807                 jh = commit_transaction->t_log_list->b_tprev;
808                 bh = jh2bh(jh);
809                 if (buffer_locked(bh)) {
810                         wait_on_buffer(bh);
811                         goto wait_for_ctlbuf;
812                 }
813                 if (cond_resched())
814                         goto wait_for_ctlbuf;
815
816                 if (unlikely(!buffer_uptodate(bh)))
817                         err = -EIO;
818
819                 BUFFER_TRACE(bh, "ph5: control buffer writeout done: unfile");
820                 clear_buffer_jwrite(bh);
821                 jbd2_journal_unfile_buffer(journal, jh);
822                 jbd2_journal_put_journal_head(jh);
823                 __brelse(bh);           /* One for getblk */
824                 /* AKPM: bforget here */
825         }
826
827         if (err)
828                 jbd2_journal_abort(journal, err);
829
830         jbd_debug(3, "JBD: commit phase 5\n");
831
832         if (!JBD2_HAS_INCOMPAT_FEATURE(journal,
833                 JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT)) {
834                 err = journal_submit_commit_record(journal, commit_transaction,
835                                                 &cbh, crc32_sum);
836                 if (err)
837                         __jbd2_journal_abort_hard(journal);
838         }
839         if (!err && !is_journal_aborted(journal))
840                 err = journal_wait_on_commit_record(journal, cbh);
841
842         if (err)
843                 jbd2_journal_abort(journal, err);
844
845         /* End of a transaction!  Finally, we can do checkpoint
846            processing: any buffers committed as a result of this
847            transaction can be removed from any checkpoint list it was on
848            before. */
849
850         jbd_debug(3, "JBD: commit phase 6\n");
851
852         J_ASSERT(list_empty(&commit_transaction->t_inode_list));
853         J_ASSERT(commit_transaction->t_buffers == NULL);
854         J_ASSERT(commit_transaction->t_checkpoint_list == NULL);
855         J_ASSERT(commit_transaction->t_iobuf_list == NULL);
856         J_ASSERT(commit_transaction->t_shadow_list == NULL);
857         J_ASSERT(commit_transaction->t_log_list == NULL);
858
859 restart_loop:
860         /*
861          * As there are other places (journal_unmap_buffer()) adding buffers
862          * to this list we have to be careful and hold the j_list_lock.
863          */
864         spin_lock(&journal->j_list_lock);
865         while (commit_transaction->t_forget) {
866                 transaction_t *cp_transaction;
867                 struct buffer_head *bh;
868
869                 jh = commit_transaction->t_forget;
870                 spin_unlock(&journal->j_list_lock);
871                 bh = jh2bh(jh);
872                 jbd_lock_bh_state(bh);
873                 J_ASSERT_JH(jh, jh->b_transaction == commit_transaction ||
874                         jh->b_transaction == journal->j_running_transaction);
875
876                 /*
877                  * If there is undo-protected committed data against
878                  * this buffer, then we can remove it now.  If it is a
879                  * buffer needing such protection, the old frozen_data
880                  * field now points to a committed version of the
881                  * buffer, so rotate that field to the new committed
882                  * data.
883                  *
884                  * Otherwise, we can just throw away the frozen data now.
885                  *
886                  * We also know that the frozen data has already fired
887                  * its triggers if they exist, so we can clear that too.
888                  */
889                 if (jh->b_committed_data) {
890                         jbd2_free(jh->b_committed_data, bh->b_size);
891                         jh->b_committed_data = NULL;
892                         if (jh->b_frozen_data) {
893                                 jh->b_committed_data = jh->b_frozen_data;
894                                 jh->b_frozen_data = NULL;
895                                 jh->b_frozen_triggers = NULL;
896                         }
897                 } else if (jh->b_frozen_data) {
898                         jbd2_free(jh->b_frozen_data, bh->b_size);
899                         jh->b_frozen_data = NULL;
900                         jh->b_frozen_triggers = NULL;
901                 }
902
903                 spin_lock(&journal->j_list_lock);
904                 cp_transaction = jh->b_cp_transaction;
905                 if (cp_transaction) {
906                         JBUFFER_TRACE(jh, "remove from old cp transaction");
907                         cp_transaction->t_chp_stats.cs_dropped++;
908                         __jbd2_journal_remove_checkpoint(jh);
909                 }
910
911                 /* Only re-checkpoint the buffer_head if it is marked
912                  * dirty.  If the buffer was added to the BJ_Forget list
913                  * by jbd2_journal_forget, it may no longer be dirty and
914                  * there's no point in keeping a checkpoint record for
915                  * it. */
916
917                 /* A buffer which has been freed while still being
918                  * journaled by a previous transaction may end up still
919                  * being dirty here, but we want to avoid writing back
920                  * that buffer in the future now that the last use has
921                  * been committed.  That's not only a performance gain,
922                  * it also stops aliasing problems if the buffer is left
923                  * behind for writeback and gets reallocated for another
924                  * use in a different page. */
925                 if (buffer_freed(bh)) {
926                         clear_buffer_freed(bh);
927                         clear_buffer_jbddirty(bh);
928                 }
929
930                 if (buffer_jbddirty(bh)) {
931                         JBUFFER_TRACE(jh, "add to new checkpointing trans");
932                         __jbd2_journal_insert_checkpoint(jh, commit_transaction);
933                         if (is_journal_aborted(journal))
934                                 clear_buffer_jbddirty(bh);
935                         JBUFFER_TRACE(jh, "refile for checkpoint writeback");
936                         __jbd2_journal_refile_buffer(jh);
937                         jbd_unlock_bh_state(bh);
938                 } else {
939                         J_ASSERT_BH(bh, !buffer_dirty(bh));
940                         /* The buffer on BJ_Forget list and not jbddirty means
941                          * it has been freed by this transaction and hence it
942                          * could not have been reallocated until this
943                          * transaction has committed. *BUT* it could be
944                          * reallocated once we have written all the data to
945                          * disk and before we process the buffer on BJ_Forget
946                          * list. */
947                         JBUFFER_TRACE(jh, "refile or unfile freed buffer");
948                         __jbd2_journal_refile_buffer(jh);
949                         if (!jh->b_transaction) {
950                                 jbd_unlock_bh_state(bh);
951                                  /* needs a brelse */
952                                 jbd2_journal_remove_journal_head(bh);
953                                 release_buffer_page(bh);
954                         } else
955                                 jbd_unlock_bh_state(bh);
956                 }
957                 cond_resched_lock(&journal->j_list_lock);
958         }
959         spin_unlock(&journal->j_list_lock);
960         /*
961          * This is a bit sleazy.  We use j_list_lock to protect transition
962          * of a transaction into T_FINISHED state and calling
963          * __jbd2_journal_drop_transaction(). Otherwise we could race with
964          * other checkpointing code processing the transaction...
965          */
966         spin_lock(&journal->j_state_lock);
967         spin_lock(&journal->j_list_lock);
968         /*
969          * Now recheck if some buffers did not get attached to the transaction
970          * while the lock was dropped...
971          */
972         if (commit_transaction->t_forget) {
973                 spin_unlock(&journal->j_list_lock);
974                 spin_unlock(&journal->j_state_lock);
975                 goto restart_loop;
976         }
977
978         /* Done with this transaction! */
979
980         jbd_debug(3, "JBD: commit phase 7\n");
981
982         J_ASSERT(commit_transaction->t_state == T_COMMIT);
983
984         commit_transaction->t_start = jiffies;
985         stats.u.run.rs_logging = jbd2_time_diff(stats.u.run.rs_logging,
986                                                 commit_transaction->t_start);
987
988         /*
989          * File the transaction for history
990          */
991         stats.ts_type = JBD2_STATS_RUN;
992         stats.ts_tid = commit_transaction->t_tid;
993         stats.u.run.rs_handle_count = commit_transaction->t_handle_count;
994         spin_lock(&journal->j_history_lock);
995         memcpy(journal->j_history + journal->j_history_cur, &stats,
996                         sizeof(stats));
997         if (++journal->j_history_cur == journal->j_history_max)
998                 journal->j_history_cur = 0;
999
1000         /*
1001          * Calculate overall stats
1002          */
1003         journal->j_stats.ts_tid++;
1004         journal->j_stats.u.run.rs_wait += stats.u.run.rs_wait;
1005         journal->j_stats.u.run.rs_running += stats.u.run.rs_running;
1006         journal->j_stats.u.run.rs_locked += stats.u.run.rs_locked;
1007         journal->j_stats.u.run.rs_flushing += stats.u.run.rs_flushing;
1008         journal->j_stats.u.run.rs_logging += stats.u.run.rs_logging;
1009         journal->j_stats.u.run.rs_handle_count += stats.u.run.rs_handle_count;
1010         journal->j_stats.u.run.rs_blocks += stats.u.run.rs_blocks;
1011         journal->j_stats.u.run.rs_blocks_logged += stats.u.run.rs_blocks_logged;
1012         spin_unlock(&journal->j_history_lock);
1013
1014         commit_transaction->t_state = T_FINISHED;
1015         J_ASSERT(commit_transaction == journal->j_committing_transaction);
1016         journal->j_commit_sequence = commit_transaction->t_tid;
1017         journal->j_committing_transaction = NULL;
1018         commit_time = ktime_to_ns(ktime_sub(ktime_get(), start_time));
1019
1020         /*
1021          * weight the commit time higher than the average time so we don't
1022          * react too strongly to vast changes in the commit time
1023          */
1024         if (likely(journal->j_average_commit_time))
1025                 journal->j_average_commit_time = (commit_time +
1026                                 journal->j_average_commit_time*3) / 4;
1027         else
1028                 journal->j_average_commit_time = commit_time;
1029         spin_unlock(&journal->j_state_lock);
1030
1031         if (commit_transaction->t_checkpoint_list == NULL &&
1032             commit_transaction->t_checkpoint_io_list == NULL) {
1033                 __jbd2_journal_drop_transaction(journal, commit_transaction);
1034                 to_free = 1;
1035         } else {
1036                 if (journal->j_checkpoint_transactions == NULL) {
1037                         journal->j_checkpoint_transactions = commit_transaction;
1038                         commit_transaction->t_cpnext = commit_transaction;
1039                         commit_transaction->t_cpprev = commit_transaction;
1040                 } else {
1041                         commit_transaction->t_cpnext =
1042                                 journal->j_checkpoint_transactions;
1043                         commit_transaction->t_cpprev =
1044                                 commit_transaction->t_cpnext->t_cpprev;
1045                         commit_transaction->t_cpnext->t_cpprev =
1046                                 commit_transaction;
1047                         commit_transaction->t_cpprev->t_cpnext =
1048                                 commit_transaction;
1049                 }
1050         }
1051         spin_unlock(&journal->j_list_lock);
1052
1053         if (journal->j_commit_callback)
1054                 journal->j_commit_callback(journal, commit_transaction);
1055
1056         trace_mark(jbd2_end_commit, "dev %s transaction %d head %d",
1057                    journal->j_devname, commit_transaction->t_tid,
1058                    journal->j_tail_sequence);
1059         jbd_debug(1, "JBD: commit %d complete, head %d\n",
1060                   journal->j_commit_sequence, journal->j_tail_sequence);
1061         if (to_free)
1062                 kfree(commit_transaction);
1063
1064         wake_up(&journal->j_wait_done_commit);
1065 }