fd274a984f3491ff59780e1d8ac0afacea211154
[linux-flexiantxendom0-3.2.10.git] / fs / jbd / transaction.c
1 /*
2  * linux/fs/transaction.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  * Generic filesystem transaction handling code; part of the ext2fs
13  * journaling system.  
14  *
15  * This file manages transactions (compound commits managed by the
16  * journaling code) and handles (individual atomic operations by the
17  * filesystem).
18  */
19
20 #include <linux/time.h>
21 #include <linux/fs.h>
22 #include <linux/jbd.h>
23 #include <linux/errno.h>
24 #include <linux/slab.h>
25 #include <linux/timer.h>
26 #include <linux/smp_lock.h>
27 #include <linux/mm.h>
28 #include <linux/highmem.h>
29
30 /*
31  * get_transaction: obtain a new transaction_t object.
32  *
33  * Simply allocate and initialise a new transaction.  Create it in
34  * RUNNING state and add it to the current journal (which should not
35  * have an existing running transaction: we only make a new transaction
36  * once we have started to commit the old one).
37  *
38  * Preconditions:
39  *      The journal MUST be locked.  We don't perform atomic mallocs on the
40  *      new transaction and we can't block without protecting against other
41  *      processes trying to touch the journal while it is in transition.
42  *
43  * Called under j_state_lock
44  */
45
46 static transaction_t *
47 get_transaction(journal_t *journal, transaction_t *transaction)
48 {
49         transaction->t_journal = journal;
50         transaction->t_state = T_RUNNING;
51         transaction->t_tid = journal->j_transaction_sequence++;
52         transaction->t_expires = jiffies + journal->j_commit_interval;
53         INIT_LIST_HEAD(&transaction->t_jcb);
54         spin_lock_init(&transaction->t_handle_lock);
55         spin_lock_init(&transaction->t_jcb_lock);
56
57         /* Set up the commit timer for the new transaction. */
58         journal->j_commit_timer->expires = transaction->t_expires;
59         add_timer(journal->j_commit_timer);
60
61         J_ASSERT(journal->j_running_transaction == NULL);
62         journal->j_running_transaction = transaction;
63
64         return transaction;
65 }
66
67 /*
68  * Handle management.
69  *
70  * A handle_t is an object which represents a single atomic update to a
71  * filesystem, and which tracks all of the modifications which form part
72  * of that one update.
73  */
74
75 /*
76  * start_this_handle: Given a handle, deal with any locking or stalling
77  * needed to make sure that there is enough journal space for the handle
78  * to begin.  Attach the handle to a transaction and set up the
79  * transaction's buffer credits.  
80  */
81
82 static int start_this_handle(journal_t *journal, handle_t *handle)
83 {
84         transaction_t *transaction;
85         int needed;
86         int nblocks = handle->h_buffer_credits;
87         transaction_t *new_transaction = NULL;
88         int ret;
89
90         if (nblocks > journal->j_max_transaction_buffers) {
91                 printk(KERN_ERR "JBD: %s wants too many credits (%d > %d)\n",
92                        current->comm, nblocks,
93                        journal->j_max_transaction_buffers);
94                 ret = -ENOSPC;
95                 goto out;
96         }
97
98 alloc_transaction:
99         if (!journal->j_running_transaction) {
100                 new_transaction = jbd_kmalloc(sizeof(*new_transaction),
101                                                 GFP_NOFS);
102                 if (!new_transaction) {
103                         ret = -ENOMEM;
104                         goto out;
105                 }
106                 memset(new_transaction, 0, sizeof(*new_transaction));
107         }
108
109         jbd_debug(3, "New handle %p going live.\n", handle);
110
111 repeat:
112
113         /*
114          * We need to hold j_state_lock until t_updates has been incremented,
115          * for proper journal barrier handling
116          */
117         spin_lock(&journal->j_state_lock);
118 repeat_locked:
119         if (is_journal_aborted(journal) ||
120             (journal->j_errno != 0 && !(journal->j_flags & JFS_ACK_ERR))) {
121                 spin_unlock(&journal->j_state_lock);
122                 ret = -EROFS; 
123                 goto out;
124         }
125
126         /* Wait on the journal's transaction barrier if necessary */
127         if (journal->j_barrier_count) {
128                 spin_unlock(&journal->j_state_lock);
129                 wait_event(journal->j_wait_transaction_locked,
130                                 journal->j_barrier_count == 0);
131                 goto repeat;
132         }
133
134         if (!journal->j_running_transaction) {
135                 if (!new_transaction) {
136                         spin_unlock(&journal->j_state_lock);
137                         goto alloc_transaction;
138                 }
139                 get_transaction(journal, new_transaction);
140                 new_transaction = NULL;
141         }
142
143         transaction = journal->j_running_transaction;
144
145         /*
146          * If the current transaction is locked down for commit, wait for the
147          * lock to be released.
148          */
149         if (transaction->t_state == T_LOCKED) {
150                 spin_unlock(&journal->j_state_lock);
151                 jbd_debug(3, "Handle %p stalling...\n", handle);
152                 wait_event(journal->j_wait_transaction_locked,
153                                 transaction->t_state != T_LOCKED);
154                 goto repeat;
155         }
156
157         /*
158          * If there is not enough space left in the log to write all potential
159          * buffers requested by this operation, we need to stall pending a log
160          * checkpoint to free some more log space.
161          */
162         spin_lock(&transaction->t_handle_lock);
163         needed = transaction->t_outstanding_credits + nblocks;
164
165         if (needed > journal->j_max_transaction_buffers) {
166                 /*
167                  * If the current transaction is already too large, then start
168                  * to commit it: we can then go back and attach this handle to
169                  * a new transaction.
170                  */
171                 DEFINE_WAIT(wait);
172
173                 jbd_debug(2, "Handle %p starting new commit...\n", handle);
174                 spin_unlock(&transaction->t_handle_lock);
175                 prepare_to_wait(&journal->j_wait_transaction_locked, &wait,
176                                 TASK_UNINTERRUPTIBLE);
177                 __log_start_commit(journal, transaction->t_tid);
178                 spin_unlock(&journal->j_state_lock);
179                 schedule();
180                 finish_wait(&journal->j_wait_transaction_locked, &wait);
181                 goto repeat;
182         }
183
184         /* 
185          * The commit code assumes that it can get enough log space
186          * without forcing a checkpoint.  This is *critical* for
187          * correctness: a checkpoint of a buffer which is also
188          * associated with a committing transaction creates a deadlock,
189          * so commit simply cannot force through checkpoints.
190          *
191          * We must therefore ensure the necessary space in the journal
192          * *before* starting to dirty potentially checkpointed buffers
193          * in the new transaction. 
194          *
195          * The worst part is, any transaction currently committing can
196          * reduce the free space arbitrarily.  Be careful to account for
197          * those buffers when checkpointing.
198          */
199
200         /*
201          * @@@ AKPM: This seems rather over-defensive.  We're giving commit
202          * a _lot_ of headroom: 1/4 of the journal plus the size of
203          * the committing transaction.  Really, we only need to give it
204          * committing_transaction->t_outstanding_credits plus "enough" for
205          * the log control blocks.
206          * Also, this test is inconsitent with the matching one in
207          * journal_extend().
208          */
209         if (__log_space_left(journal) < jbd_space_needed(journal)) {
210                 jbd_debug(2, "Handle %p waiting for checkpoint...\n", handle);
211                 spin_unlock(&transaction->t_handle_lock);
212                 __log_wait_for_space(journal);
213                 goto repeat_locked;
214         }
215
216         /* OK, account for the buffers that this operation expects to
217          * use and add the handle to the running transaction. */
218
219         handle->h_transaction = transaction;
220         transaction->t_outstanding_credits += nblocks;
221         transaction->t_updates++;
222         transaction->t_handle_count++;
223         jbd_debug(4, "Handle %p given %d credits (total %d, free %d)\n",
224                   handle, nblocks, transaction->t_outstanding_credits,
225                   __log_space_left(journal));
226         spin_unlock(&transaction->t_handle_lock);
227         spin_unlock(&journal->j_state_lock);
228 out:
229         if (new_transaction)
230                 kfree(new_transaction);
231         return 0;
232 }
233
234 /* Allocate a new handle.  This should probably be in a slab... */
235 static handle_t *new_handle(int nblocks)
236 {
237         handle_t *handle = jbd_alloc_handle(GFP_NOFS);
238         if (!handle)
239                 return NULL;
240         memset(handle, 0, sizeof(*handle));
241         handle->h_buffer_credits = nblocks;
242         handle->h_ref = 1;
243         INIT_LIST_HEAD(&handle->h_jcb);
244
245         return handle;
246 }
247
248 /**
249  * handle_t *journal_start() - Obtain a new handle.  
250  * @journal: Journal to start transaction on.
251  * @nblocks: number of block buffer we might modify
252  *
253  * We make sure that the transaction can guarantee at least nblocks of
254  * modified buffers in the log.  We block until the log can guarantee
255  * that much space.  
256  *
257  * This function is visible to journal users (like ext3fs), so is not
258  * called with the journal already locked.
259  *
260  * Return a pointer to a newly allocated handle, or NULL on failure
261  */
262 handle_t *journal_start(journal_t *journal, int nblocks)
263 {
264         handle_t *handle = journal_current_handle();
265         int err;
266
267         if (!journal)
268                 return ERR_PTR(-EROFS);
269
270         if (handle) {
271                 J_ASSERT(handle->h_transaction->t_journal == journal);
272                 handle->h_ref++;
273                 return handle;
274         }
275
276         handle = new_handle(nblocks);
277         if (!handle)
278                 return ERR_PTR(-ENOMEM);
279
280         current->journal_info = handle;
281
282         err = start_this_handle(journal, handle);
283         if (err < 0) {
284                 jbd_free_handle(handle);
285                 current->journal_info = NULL;
286                 handle = ERR_PTR(err);
287         }
288         return handle;
289 }
290
291 /**
292  * int journal_extend() - extend buffer credits.
293  * @handle:  handle to 'extend'
294  * @nblocks: nr blocks to try to extend by.
295  * 
296  * Some transactions, such as large extends and truncates, can be done
297  * atomically all at once or in several stages.  The operation requests
298  * a credit for a number of buffer modications in advance, but can
299  * extend its credit if it needs more.  
300  *
301  * journal_extend tries to give the running handle more buffer credits.
302  * It does not guarantee that allocation - this is a best-effort only.
303  * The calling process MUST be able to deal cleanly with a failure to
304  * extend here.
305  *
306  * Return 0 on success, non-zero on failure.
307  *
308  * return code < 0 implies an error
309  * return code > 0 implies normal transaction-full status.
310  */
311 int journal_extend(handle_t *handle, int nblocks)
312 {
313         transaction_t *transaction = handle->h_transaction;
314         journal_t *journal = transaction->t_journal;
315         int result;
316         int wanted;
317
318         result = -EIO;
319         if (is_handle_aborted(handle))
320                 goto error_out;
321
322         result = 1;
323
324         spin_lock(&journal->j_state_lock);
325
326         /* Don't extend a locked-down transaction! */
327         if (handle->h_transaction->t_state != T_RUNNING) {
328                 jbd_debug(3, "denied handle %p %d blocks: "
329                           "transaction not running\n", handle, nblocks);
330                 goto error_out;
331         }
332
333         spin_lock(&transaction->t_handle_lock);
334         wanted = transaction->t_outstanding_credits + nblocks;
335
336         if (wanted > journal->j_max_transaction_buffers) {
337                 jbd_debug(3, "denied handle %p %d blocks: "
338                           "transaction too large\n", handle, nblocks);
339                 goto unlock;
340         }
341
342         if (wanted > __log_space_left(journal)) {
343                 jbd_debug(3, "denied handle %p %d blocks: "
344                           "insufficient log space\n", handle, nblocks);
345                 goto unlock;
346         }
347
348         handle->h_buffer_credits += nblocks;
349         transaction->t_outstanding_credits += nblocks;
350         result = 0;
351
352         jbd_debug(3, "extended handle %p by %d\n", handle, nblocks);
353 unlock:
354         spin_unlock(&transaction->t_handle_lock);
355 error_out:
356         spin_unlock(&journal->j_state_lock);
357         return result;
358 }
359
360
361 /**
362  * int journal_restart() - restart a handle .
363  * @handle:  handle to restart
364  * @nblocks: nr credits requested
365  * 
366  * Restart a handle for a multi-transaction filesystem
367  * operation.
368  *
369  * If the journal_extend() call above fails to grant new buffer credits
370  * to a running handle, a call to journal_restart will commit the
371  * handle's transaction so far and reattach the handle to a new
372  * transaction capabable of guaranteeing the requested number of
373  * credits.
374  */
375
376 int journal_restart(handle_t *handle, int nblocks)
377 {
378         transaction_t *transaction = handle->h_transaction;
379         journal_t *journal = transaction->t_journal;
380         int ret;
381
382         /* If we've had an abort of any type, don't even think about
383          * actually doing the restart! */
384         if (is_handle_aborted(handle))
385                 return 0;
386
387         /*
388          * First unlink the handle from its current transaction, and start the
389          * commit on that.
390          */
391         J_ASSERT(transaction->t_updates > 0);
392         J_ASSERT(journal_current_handle() == handle);
393
394         spin_lock(&journal->j_state_lock);
395         spin_lock(&transaction->t_handle_lock);
396         transaction->t_outstanding_credits -= handle->h_buffer_credits;
397         transaction->t_updates--;
398
399         if (!transaction->t_updates)
400                 wake_up(&journal->j_wait_updates);
401         spin_unlock(&transaction->t_handle_lock);
402
403         jbd_debug(2, "restarting handle %p\n", handle);
404         __log_start_commit(journal, transaction->t_tid);
405         spin_unlock(&journal->j_state_lock);
406
407         handle->h_buffer_credits = nblocks;
408         ret = start_this_handle(journal, handle);
409         return ret;
410 }
411
412
413 /**
414  * void journal_lock_updates () - establish a transaction barrier.
415  * @journal:  Journal to establish a barrier on.
416  *
417  * This locks out any further updates from being started, and blocks
418  * until all existing updates have completed, returning only once the
419  * journal is in a quiescent state with no updates running.
420  *
421  * The journal lock should not be held on entry.
422  */
423 void journal_lock_updates(journal_t *journal)
424 {
425         DEFINE_WAIT(wait);
426
427         spin_lock(&journal->j_state_lock);
428         ++journal->j_barrier_count;
429
430         /* Wait until there are no running updates */
431         while (1) {
432                 transaction_t *transaction = journal->j_running_transaction;
433
434                 if (!transaction)
435                         break;
436
437                 spin_lock(&transaction->t_handle_lock);
438                 if (!transaction->t_updates) {
439                         spin_unlock(&transaction->t_handle_lock);
440                         break;
441                 }
442                 prepare_to_wait(&journal->j_wait_updates, &wait,
443                                 TASK_UNINTERRUPTIBLE);
444                 spin_unlock(&transaction->t_handle_lock);
445                 spin_unlock(&journal->j_state_lock);
446                 schedule();
447                 finish_wait(&journal->j_wait_updates, &wait);
448                 spin_lock(&journal->j_state_lock);
449         }
450         spin_unlock(&journal->j_state_lock);
451
452         /*
453          * We have now established a barrier against other normal updates, but
454          * we also need to barrier against other journal_lock_updates() calls
455          * to make sure that we serialise special journal-locked operations
456          * too.
457          */
458         down(&journal->j_barrier);
459 }
460
461 /**
462  * void journal_unlock_updates (journal_t* journal) - release barrier
463  * @journal:  Journal to release the barrier on.
464  * 
465  * Release a transaction barrier obtained with journal_lock_updates().
466  *
467  * Should be called without the journal lock held.
468  */
469 void journal_unlock_updates (journal_t *journal)
470 {
471         J_ASSERT(journal->j_barrier_count != 0);
472
473         up(&journal->j_barrier);
474         spin_lock(&journal->j_state_lock);
475         --journal->j_barrier_count;
476         spin_unlock(&journal->j_state_lock);
477         wake_up(&journal->j_wait_transaction_locked);
478 }
479
480 /*
481  * Report any unexpected dirty buffers which turn up.  Normally those
482  * indicate an error, but they can occur if the user is running (say)
483  * tune2fs to modify the live filesystem, so we need the option of
484  * continuing as gracefully as possible.  #
485  *
486  * The caller should already hold the journal lock and
487  * j_list_lock spinlock: most callers will need those anyway
488  * in order to probe the buffer's journaling state safely.
489  */
490 static void jbd_unexpected_dirty_buffer(struct journal_head *jh)
491 {
492         struct buffer_head *bh = jh2bh(jh);
493         int jlist;
494
495         if (buffer_dirty(bh)) {
496                 /* If this buffer is one which might reasonably be dirty
497                  * --- ie. data, or not part of this journal --- then
498                  * we're OK to leave it alone, but otherwise we need to
499                  * move the dirty bit to the journal's own internal
500                  * JBDDirty bit. */
501                 jlist = jh->b_jlist;
502
503                 if (jlist == BJ_Metadata || jlist == BJ_Reserved || 
504                     jlist == BJ_Shadow || jlist == BJ_Forget) {
505                         if (test_clear_buffer_dirty(jh2bh(jh))) {
506                                 set_bit(BH_JBDDirty, &jh2bh(jh)->b_state);
507                         }
508                 }
509         }
510 }
511
512 /*
513  * If the buffer is already part of the current transaction, then there
514  * is nothing we need to do.  If it is already part of a prior
515  * transaction which we are still committing to disk, then we need to
516  * make sure that we do not overwrite the old copy: we do copy-out to
517  * preserve the copy going to disk.  We also account the buffer against
518  * the handle's metadata buffer credits (unless the buffer is already
519  * part of the transaction, that is).
520  *
521  */
522
523 static int
524 do_get_write_access(handle_t *handle, struct journal_head *jh,
525                         int force_copy, int *credits) 
526 {
527         struct buffer_head *bh;
528         transaction_t *transaction = handle->h_transaction;
529         journal_t *journal = transaction->t_journal;
530         int error;
531         char *frozen_buffer = NULL;
532         int need_copy = 0;
533
534         jbd_debug(5, "buffer_head %p, force_copy %d\n", jh, force_copy);
535
536         JBUFFER_TRACE(jh, "entry");
537 repeat:
538         bh = jh2bh(jh);
539
540         /* @@@ Need to check for errors here at some point. */
541
542         lock_buffer(bh);
543         jbd_lock_bh_state(bh);
544         spin_lock(&journal->j_list_lock);
545
546         /* We now hold the buffer lock so it is safe to query the buffer
547          * state.  Is the buffer dirty? 
548          * 
549          * If so, there are two possibilities.  The buffer may be
550          * non-journaled, and undergoing a quite legitimate writeback.
551          * Otherwise, it is journaled, and we don't expect dirty buffers
552          * in that state (the buffers should be marked JBD_Dirty
553          * instead.)  So either the IO is being done under our own
554          * control and this is a bug, or it's a third party IO such as
555          * dump(8) (which may leave the buffer scheduled for read ---
556          * ie. locked but not dirty) or tune2fs (which may actually have
557          * the buffer dirtied, ugh.)  */
558
559         if (buffer_dirty(bh)) {
560                 /* First question: is this buffer already part of the
561                  * current transaction or the existing committing
562                  * transaction? */
563                 if (jh->b_transaction) {
564                         J_ASSERT_JH(jh,
565                                 jh->b_transaction == transaction || 
566                                 jh->b_transaction ==
567                                         journal->j_committing_transaction);
568                         if (jh->b_next_transaction)
569                                 J_ASSERT_JH(jh, jh->b_next_transaction ==
570                                                         transaction);
571                         JBUFFER_TRACE(jh, "Unexpected dirty buffer");
572                         jbd_unexpected_dirty_buffer(jh);
573                 }
574         }
575
576         unlock_buffer(bh);
577
578         error = -EROFS;
579         if (is_handle_aborted(handle)) {
580                 spin_unlock(&journal->j_list_lock);
581                 jbd_unlock_bh_state(bh);
582                 goto out_unlocked;
583         }
584         error = 0;
585
586         /* The buffer is already part of this transaction if
587          * b_transaction or b_next_transaction points to it. */
588
589         if (jh->b_transaction == transaction ||
590             jh->b_next_transaction == transaction)
591                 goto done_locked;
592
593         /* If there is already a copy-out version of this buffer, then
594          * we don't need to make another one. */
595
596         if (jh->b_frozen_data) {
597                 JBUFFER_TRACE(jh, "has frozen data");
598                 J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
599                 jh->b_next_transaction = transaction;
600
601                 J_ASSERT_JH(jh, handle->h_buffer_credits > 0);
602                 handle->h_buffer_credits--;
603                 if (credits)
604                         (*credits)++;
605                 goto done_locked;
606         }
607
608         /* Is there data here we need to preserve? */
609
610         if (jh->b_transaction && jh->b_transaction != transaction) {
611                 JBUFFER_TRACE(jh, "owned by older transaction");
612                 J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
613                 J_ASSERT_JH(jh, jh->b_transaction ==
614                                         journal->j_committing_transaction);
615
616                 /* There is one case we have to be very careful about.
617                  * If the committing transaction is currently writing
618                  * this buffer out to disk and has NOT made a copy-out,
619                  * then we cannot modify the buffer contents at all
620                  * right now.  The essence of copy-out is that it is the
621                  * extra copy, not the primary copy, which gets
622                  * journaled.  If the primary copy is already going to
623                  * disk then we cannot do copy-out here. */
624
625                 if (jh->b_jlist == BJ_Shadow) {
626                         wait_queue_head_t *wqh;
627
628                         JBUFFER_TRACE(jh, "on shadow: sleep");
629                         spin_unlock(&journal->j_list_lock);
630                         jbd_unlock_bh_state(bh);
631                         /* commit wakes up all shadow buffers after IO */
632                         wqh = bh_waitq_head(jh2bh(jh));
633                         wait_event(*wqh, (jh->b_jlist != BJ_Shadow));
634                         goto repeat;
635                 }
636
637                 /* Only do the copy if the currently-owning transaction
638                  * still needs it.  If it is on the Forget list, the
639                  * committing transaction is past that stage.  The
640                  * buffer had better remain locked during the kmalloc,
641                  * but that should be true --- we hold the journal lock
642                  * still and the buffer is already on the BUF_JOURNAL
643                  * list so won't be flushed. 
644                  *
645                  * Subtle point, though: if this is a get_undo_access,
646                  * then we will be relying on the frozen_data to contain
647                  * the new value of the committed_data record after the
648                  * transaction, so we HAVE to force the frozen_data copy
649                  * in that case. */
650
651                 if (jh->b_jlist != BJ_Forget || force_copy) {
652                         JBUFFER_TRACE(jh, "generate frozen data");
653                         if (!frozen_buffer) {
654                                 JBUFFER_TRACE(jh, "allocate memory for buffer");
655                                 spin_unlock(&journal->j_list_lock);
656                                 jbd_unlock_bh_state(bh);
657                                 frozen_buffer = jbd_kmalloc(jh2bh(jh)->b_size,
658                                                             GFP_NOFS);
659                                 if (!frozen_buffer) {
660                                         printk(KERN_EMERG
661                                                "%s: OOM for frozen_buffer\n",
662                                                __FUNCTION__);
663                                         JBUFFER_TRACE(jh, "oom!");
664                                         error = -ENOMEM;
665                                         jbd_lock_bh_state(bh);
666                                         spin_lock(&journal->j_list_lock);
667                                         goto done_locked;
668                                 }
669                                 goto repeat;
670                         }
671
672                         jh->b_frozen_data = frozen_buffer;
673                         frozen_buffer = NULL;
674                         need_copy = 1;
675                 }
676                 jh->b_next_transaction = transaction;
677         }
678
679         J_ASSERT(handle->h_buffer_credits > 0);
680         handle->h_buffer_credits--;
681         if (credits)
682                 (*credits)++;
683
684         /* Finally, if the buffer is not journaled right now, we need to
685          * make sure it doesn't get written to disk before the caller
686          * actually commits the new data. */
687
688         if (!jh->b_transaction) {
689                 JBUFFER_TRACE(jh, "no transaction");
690                 J_ASSERT_JH(jh, !jh->b_next_transaction);
691                 jh->b_transaction = transaction;
692                 JBUFFER_TRACE(jh, "file as BJ_Reserved");
693                 __journal_file_buffer(jh, transaction, BJ_Reserved);
694         }
695
696 done_locked:
697         spin_unlock(&journal->j_list_lock);
698         if (need_copy) {
699                 struct page *page;
700                 int offset;
701                 char *source;
702
703                 J_EXPECT_JH(jh, buffer_uptodate(jh2bh(jh)),
704                             "Possible IO failure.\n");
705                 page = jh2bh(jh)->b_page;
706                 offset = ((unsigned long) jh2bh(jh)->b_data) & ~PAGE_MASK;
707                 source = kmap_atomic(page, KM_USER0);
708                 memcpy(jh->b_frozen_data, source+offset, jh2bh(jh)->b_size);
709                 kunmap_atomic(source, KM_USER0);
710         }
711         jbd_unlock_bh_state(bh);
712
713         /* If we are about to journal a buffer, then any revoke pending
714            on it is no longer valid. */
715         journal_cancel_revoke(handle, jh);
716
717 out_unlocked:
718         if (frozen_buffer)
719                 kfree(frozen_buffer);
720
721         JBUFFER_TRACE(jh, "exit");
722         return error;
723 }
724
725 /**
726  * int journal_get_write_access() - notify intent to modify a buffer for metadata (not data) update.
727  * @handle: transaction to add buffer modifications to
728  * @bh:     bh to be used for metadata writes
729  *
730  * Returns an error code or 0 on success.
731  *
732  * In full data journalling mode the buffer may be of type BJ_AsyncData,
733  * because we're write()ing a buffer which is also part of a shared mapping.
734  */
735
736 int journal_get_write_access(handle_t *handle,
737                         struct buffer_head *bh, int *credits)
738 {
739         struct journal_head *jh = journal_add_journal_head(bh);
740         int rc;
741
742         /* We do not want to get caught playing with fields which the
743          * log thread also manipulates.  Make sure that the buffer
744          * completes any outstanding IO before proceeding. */
745         rc = do_get_write_access(handle, jh, 0, credits);
746         journal_put_journal_head(jh);
747         return rc;
748 }
749
750
751 /*
752  * When the user wants to journal a newly created buffer_head
753  * (ie. getblk() returned a new buffer and we are going to populate it
754  * manually rather than reading off disk), then we need to keep the
755  * buffer_head locked until it has been completely filled with new
756  * data.  In this case, we should be able to make the assertion that
757  * the bh is not already part of an existing transaction.  
758  * 
759  * The buffer should already be locked by the caller by this point.
760  * There is no lock ranking violation: it was a newly created,
761  * unlocked buffer beforehand. */
762
763 /**
764  * int journal_get_create_access () - notify intent to use newly created bh
765  * @handle: transaction to new buffer to
766  * @bh: new buffer.
767  *
768  * Call this if you create a new bh.
769  */
770 int journal_get_create_access(handle_t *handle, struct buffer_head *bh) 
771 {
772         transaction_t *transaction = handle->h_transaction;
773         journal_t *journal = transaction->t_journal;
774         struct journal_head *jh = journal_add_journal_head(bh);
775         int err;
776
777         jbd_debug(5, "journal_head %p\n", jh);
778         err = -EROFS;
779         if (is_handle_aborted(handle))
780                 goto out;
781         err = 0;
782
783         JBUFFER_TRACE(jh, "entry");
784         /*
785          * The buffer may already belong to this transaction due to pre-zeroing
786          * in the filesystem's new_block code.  It may also be on the previous,
787          * committing transaction's lists, but it HAS to be in Forget state in
788          * that case: the transaction must have deleted the buffer for it to be
789          * reused here.
790          */
791         jbd_lock_bh_state(bh);
792         spin_lock(&journal->j_list_lock);
793         J_ASSERT_JH(jh, (jh->b_transaction == transaction ||
794                 jh->b_transaction == NULL ||
795                 (jh->b_transaction == journal->j_committing_transaction &&
796                           jh->b_jlist == BJ_Forget)));
797
798         J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
799         J_ASSERT_JH(jh, buffer_locked(jh2bh(jh)));
800
801         J_ASSERT_JH(jh, handle->h_buffer_credits > 0);
802         handle->h_buffer_credits--;
803
804         if (jh->b_transaction == NULL) {
805                 jh->b_transaction = transaction;
806                 JBUFFER_TRACE(jh, "file as BJ_Reserved");
807                 __journal_file_buffer(jh, transaction, BJ_Reserved);
808         } else if (jh->b_transaction == journal->j_committing_transaction) {
809                 JBUFFER_TRACE(jh, "set next transaction");
810                 jh->b_next_transaction = transaction;
811         }
812         spin_unlock(&journal->j_list_lock);
813         jbd_unlock_bh_state(bh);
814
815         /*
816          * akpm: I added this.  ext3_alloc_branch can pick up new indirect
817          * blocks which contain freed but then revoked metadata.  We need
818          * to cancel the revoke in case we end up freeing it yet again
819          * and the reallocating as data - this would cause a second revoke,
820          * which hits an assertion error.
821          */
822         JBUFFER_TRACE(jh, "cancelling revoke");
823         journal_cancel_revoke(handle, jh);
824         journal_put_journal_head(jh);
825 out:
826         return err;
827 }
828
829 /**
830  * int journal_get_undo_access() -  Notify intent to modify metadata with
831  *     non-rewindable consequences
832  * @handle: transaction
833  * @bh: buffer to undo
834  * @credits: store the number of taken credits here (if not NULL)
835  *
836  * Sometimes there is a need to distinguish between metadata which has
837  * been committed to disk and that which has not.  The ext3fs code uses
838  * this for freeing and allocating space, we have to make sure that we
839  * do not reuse freed space until the deallocation has been committed,
840  * since if we overwrote that space we would make the delete
841  * un-rewindable in case of a crash.
842  * 
843  * To deal with that, journal_get_undo_access requests write access to a
844  * buffer for parts of non-rewindable operations such as delete
845  * operations on the bitmaps.  The journaling code must keep a copy of
846  * the buffer's contents prior to the undo_access call until such time
847  * as we know that the buffer has definitely been committed to disk.
848  * 
849  * We never need to know which transaction the committed data is part
850  * of, buffers touched here are guaranteed to be dirtied later and so
851  * will be committed to a new transaction in due course, at which point
852  * we can discard the old committed data pointer.
853  *
854  * Returns error number or 0 on success.
855  */
856 int journal_get_undo_access(handle_t *handle, struct buffer_head *bh,
857                                 int *credits)
858 {
859         int err;
860         struct journal_head *jh = journal_add_journal_head(bh);
861         char *committed_data = NULL;
862
863         JBUFFER_TRACE(jh, "entry");
864
865         /*
866          * Do this first --- it can drop the journal lock, so we want to
867          * make sure that obtaining the committed_data is done
868          * atomically wrt. completion of any outstanding commits.
869          */
870         err = do_get_write_access(handle, jh, 1, credits);
871         if (err)
872                 goto out;
873
874 repeat:
875         if (!jh->b_committed_data) {
876                 committed_data = jbd_kmalloc(jh2bh(jh)->b_size, GFP_NOFS);
877                 if (!committed_data) {
878                         printk(KERN_EMERG "%s: No memory for committed data\n",
879                                 __FUNCTION__);
880                         err = -ENOMEM;
881                         goto out;
882                 }
883         }
884
885         jbd_lock_bh_state(bh);
886         if (!jh->b_committed_data) {
887                 /* Copy out the current buffer contents into the
888                  * preserved, committed copy. */
889                 JBUFFER_TRACE(jh, "generate b_committed data");
890                 if (!committed_data) {
891                         jbd_unlock_bh_state(bh);
892                         goto repeat;
893                 }
894
895                 jh->b_committed_data = committed_data;
896                 committed_data = NULL;
897                 memcpy(jh->b_committed_data, bh->b_data, bh->b_size);
898         }
899         jbd_unlock_bh_state(bh);
900 out:
901         journal_put_journal_head(jh);
902         if (committed_data)
903                 kfree(committed_data);
904         return err;
905 }
906
907 /** 
908  * int journal_dirty_data() -  mark a buffer as containing dirty data which
909  *                             needs to be flushed before we can commit the
910  *                             current transaction.  
911  * @handle: transaction
912  * @bh: bufferhead to mark
913  * 
914  * The buffer is placed on the transaction's data list and is marked as
915  * belonging to the transaction.
916  *
917  * Returns error number or 0 on success.
918  *
919  * journal_dirty_data() can be called via page_launder->ext3_writepage
920  * by kswapd.
921  */
922 int journal_dirty_data(handle_t *handle, struct buffer_head *bh)
923 {
924         journal_t *journal = handle->h_transaction->t_journal;
925         int need_brelse = 0;
926         struct journal_head *jh;
927
928         if (is_handle_aborted(handle))
929                 return 0;
930
931         jh = journal_add_journal_head(bh);
932         JBUFFER_TRACE(jh, "entry");
933
934         /*
935          * The buffer could *already* be dirty.  Writeout can start
936          * at any time.
937          */
938         jbd_debug(4, "jh: %p, tid:%d\n", jh, handle->h_transaction->t_tid);
939
940         /*
941          * What if the buffer is already part of a running transaction?
942          * 
943          * There are two cases:
944          * 1) It is part of the current running transaction.  Refile it,
945          *    just in case we have allocated it as metadata, deallocated
946          *    it, then reallocated it as data. 
947          * 2) It is part of the previous, still-committing transaction.
948          *    If all we want to do is to guarantee that the buffer will be
949          *    written to disk before this new transaction commits, then
950          *    being sure that the *previous* transaction has this same 
951          *    property is sufficient for us!  Just leave it on its old
952          *    transaction.
953          *
954          * In case (2), the buffer must not already exist as metadata
955          * --- that would violate write ordering (a transaction is free
956          * to write its data at any point, even before the previous
957          * committing transaction has committed).  The caller must
958          * never, ever allow this to happen: there's nothing we can do
959          * about it in this layer.
960          */
961         jbd_lock_bh_state(bh);
962         spin_lock(&journal->j_list_lock);
963         if (jh->b_transaction) {
964                 JBUFFER_TRACE(jh, "has transaction");
965                 if (jh->b_transaction != handle->h_transaction) {
966                         JBUFFER_TRACE(jh, "belongs to older transaction");
967                         J_ASSERT_JH(jh, jh->b_transaction ==
968                                         journal->j_committing_transaction);
969
970                         /* @@@ IS THIS TRUE  ? */
971                         /*
972                          * Not any more.  Scenario: someone does a write()
973                          * in data=journal mode.  The buffer's transaction has
974                          * moved into commit.  Then someone does another
975                          * write() to the file.  We do the frozen data copyout
976                          * and set b_next_transaction to point to j_running_t.
977                          * And while we're in that state, someone does a
978                          * writepage() in an attempt to pageout the same area
979                          * of the file via a shared mapping.  At present that
980                          * calls journal_dirty_data(), and we get right here.
981                          * It may be too late to journal the data.  Simply
982                          * falling through to the next test will suffice: the
983                          * data will be dirty and wil be checkpointed.  The
984                          * ordering comments in the next comment block still
985                          * apply.
986                          */
987                         //J_ASSERT_JH(jh, jh->b_next_transaction == NULL);
988
989                         /*
990                          * If we're journalling data, and this buffer was
991                          * subject to a write(), it could be metadata, forget
992                          * or shadow against the committing transaction.  Now,
993                          * someone has dirtied the same darn page via a mapping
994                          * and it is being writepage()'d.
995                          * We *could* just steal the page from commit, with some
996                          * fancy locking there.  Instead, we just skip it -
997                          * don't tie the page's buffers to the new transaction
998                          * at all.
999                          * Implication: if we crash before the writepage() data
1000                          * is written into the filesystem, recovery will replay
1001                          * the write() data.
1002                          */
1003                         if (jh->b_jlist != BJ_None &&
1004                                         jh->b_jlist != BJ_SyncData) {
1005                                 JBUFFER_TRACE(jh, "Not stealing");
1006                                 goto no_journal;
1007                         }
1008
1009                         /*
1010                          * This buffer may be undergoing writeout in commit.  We
1011                          * can't return from here and let the caller dirty it
1012                          * again because that can cause the write-out loop in
1013                          * commit to never terminate.
1014                          */
1015                         if (buffer_dirty(bh)) {
1016                                 get_bh(bh);
1017                                 spin_unlock(&journal->j_list_lock);
1018                                 jbd_unlock_bh_state(bh);
1019                                 need_brelse = 1;
1020                                 sync_dirty_buffer(bh);
1021                                 jbd_lock_bh_state(bh);
1022                                 spin_lock(&journal->j_list_lock);
1023                                 /* The buffer may become locked again at any
1024                                    time if it is redirtied */
1025                         }
1026
1027                         /* journal_clean_data_list() may have got there first */
1028                         if (jh->b_transaction != NULL) {
1029                                 JBUFFER_TRACE(jh, "unfile from commit");
1030                                 __journal_unfile_buffer(jh);
1031                                 jh->b_transaction = NULL;
1032                         }
1033                         /* The buffer will be refiled below */
1034
1035                 }
1036                 /*
1037                  * Special case --- the buffer might actually have been
1038                  * allocated and then immediately deallocated in the previous,
1039                  * committing transaction, so might still be left on that
1040                  * transaction's metadata lists.
1041                  */
1042                 if (jh->b_jlist != BJ_SyncData) {
1043                         JBUFFER_TRACE(jh, "not on correct data list: unfile");
1044                         J_ASSERT_JH(jh, jh->b_jlist != BJ_Shadow);
1045                         __journal_unfile_buffer(jh);
1046                         jh->b_transaction = NULL;
1047                         JBUFFER_TRACE(jh, "file as data");
1048                         __journal_file_buffer(jh, handle->h_transaction,
1049                                                 BJ_SyncData);
1050                 }
1051         } else {
1052                 JBUFFER_TRACE(jh, "not on a transaction");
1053                 __journal_file_buffer(jh, handle->h_transaction, BJ_SyncData);
1054         }
1055 no_journal:
1056         spin_unlock(&journal->j_list_lock);
1057         jbd_unlock_bh_state(bh);
1058         if (need_brelse) {
1059                 BUFFER_TRACE(bh, "brelse");
1060                 __brelse(bh);
1061         }
1062         JBUFFER_TRACE(jh, "exit");
1063         journal_put_journal_head(jh);
1064         return 0;
1065 }
1066
1067 /** 
1068  * int journal_dirty_metadata() -  mark a buffer as containing dirty metadata
1069  * @handle: transaction to add buffer to.
1070  * @bh: buffer to mark 
1071  * 
1072  * mark dirty metadata which needs to be journaled as part of the current
1073  * transaction.
1074  *
1075  * The buffer is placed on the transaction's metadata list and is marked
1076  * as belonging to the transaction.  
1077  *
1078  * Returns error number or 0 on success.  
1079  *
1080  * Special care needs to be taken if the buffer already belongs to the
1081  * current committing transaction (in which case we should have frozen
1082  * data present for that commit).  In that case, we don't relink the
1083  * buffer: that only gets done when the old transaction finally
1084  * completes its commit.
1085  */
1086 int journal_dirty_metadata(handle_t *handle, struct buffer_head *bh)
1087 {
1088         transaction_t *transaction = handle->h_transaction;
1089         journal_t *journal = transaction->t_journal;
1090         struct journal_head *jh = bh2jh(bh);
1091         int console_loglevel_saved = console_loglevel;
1092
1093         jbd_debug(5, "journal_head %p\n", jh);
1094         JBUFFER_TRACE(jh, "entry");
1095         if (is_handle_aborted(handle))
1096                 goto out;
1097
1098         jbd_lock_bh_state(bh);
1099
1100         /*
1101          * fastpath, to avoid expensive locking.  If this buffer is already
1102          * on the running transaction's metadata list there is nothing to do.
1103          * Nobody can take it off again because there is a handle open.
1104          * I _think_ we're OK here with SMP barriers - a mistaken decision will
1105          * result in this test being false, so we go in and take the locks.
1106          */
1107         if (jh->b_transaction == handle->h_transaction &&
1108                                         jh->b_jlist == BJ_Metadata) {
1109                 JBUFFER_TRACE(jh, "fastpath");
1110                 J_ASSERT_JH(jh, jh->b_transaction ==
1111                                         journal->j_running_transaction);
1112                 goto out_unlock_bh;
1113         }
1114
1115         spin_lock(&journal->j_list_lock);
1116         set_buffer_jbddirty(bh);
1117
1118         J_ASSERT_JH(jh, jh->b_transaction != NULL);
1119
1120         /* 
1121          * Metadata already on the current transaction list doesn't
1122          * need to be filed.  Metadata on another transaction's list must
1123          * be committing, and will be refiled once the commit completes:
1124          * leave it alone for now. 
1125          */
1126
1127         if (jh->b_transaction != transaction) {
1128                 JBUFFER_TRACE(jh, "already on other transaction");
1129                 J_ASSERT_JH(jh, jh->b_transaction ==
1130                                         journal->j_committing_transaction);
1131                 J_ASSERT_JH(jh, jh->b_next_transaction == transaction);
1132                 /* And this case is illegal: we can't reuse another
1133                  * transaction's data buffer, ever. */
1134                 /* FIXME: writepage() should be journalled */
1135                 goto out_unlock_list;
1136         }
1137
1138         /* That test should have eliminated the following case: */
1139         J_ASSERT_JH(jh, jh->b_frozen_data == 0);
1140
1141         JBUFFER_TRACE(jh, "file as BJ_Metadata");
1142         __journal_file_buffer(jh, handle->h_transaction, BJ_Metadata);
1143
1144 out_unlock_list:
1145         spin_unlock(&journal->j_list_lock);
1146 out_unlock_bh:
1147         jbd_unlock_bh_state(bh);
1148 out:
1149         JBUFFER_TRACE(jh, "exit");
1150         console_loglevel = console_loglevel_saved;
1151         return 0;
1152 }
1153
1154 /* 
1155  * journal_release_buffer: undo a get_write_access without any buffer
1156  * updates, if the update decided in the end that it didn't need access.
1157  *
1158  * The caller passes in the number of credits which should be put back for
1159  * this buffer (zero or one).
1160  *
1161  * We leave the buffer attached to t_reserved_list because even though this
1162  * handle doesn't want it, some other concurrent handle may want to journal
1163  * this buffer.  If that handle is curently in between get_write_access() and
1164  * journal_dirty_metadata() then it expects the buffer to be reserved.  If
1165  * we were to rip it off t_reserved_list here, the other handle will explode
1166  * when journal_dirty_metadata is presented with a non-reserved buffer.
1167  *
1168  * If nobody really wants to journal this buffer then it will be thrown
1169  * away at the start of commit.
1170  */
1171 void
1172 journal_release_buffer(handle_t *handle, struct buffer_head *bh, int credits)
1173 {
1174         BUFFER_TRACE(bh, "entry");
1175         handle->h_buffer_credits += credits;
1176 }
1177
1178 /** 
1179  * void journal_forget() - bforget() for potentially-journaled buffers.
1180  * @handle: transaction handle
1181  * @bh:     bh to 'forget'
1182  *
1183  * We can only do the bforget if there are no commits pending against the
1184  * buffer.  If the buffer is dirty in the current running transaction we
1185  * can safely unlink it. 
1186  *
1187  * bh may not be a journalled buffer at all - it may be a non-JBD
1188  * buffer which came off the hashtable.  Check for this.
1189  *
1190  * Decrements bh->b_count by one.
1191  * 
1192  * Allow this call even if the handle has aborted --- it may be part of
1193  * the caller's cleanup after an abort.
1194  */
1195 void journal_forget(handle_t *handle, struct buffer_head *bh)
1196 {
1197         transaction_t *transaction = handle->h_transaction;
1198         journal_t *journal = transaction->t_journal;
1199         struct journal_head *jh;
1200
1201         BUFFER_TRACE(bh, "entry");
1202
1203         jbd_lock_bh_state(bh);
1204         spin_lock(&journal->j_list_lock);
1205
1206         if (!buffer_jbd(bh))
1207                 goto not_jbd;
1208         jh = bh2jh(bh);
1209
1210         if (jh->b_transaction == handle->h_transaction) {
1211                 J_ASSERT_JH(jh, !jh->b_frozen_data);
1212
1213                 /* If we are forgetting a buffer which is already part
1214                  * of this transaction, then we can just drop it from
1215                  * the transaction immediately. */
1216                 clear_buffer_dirty(bh);
1217                 clear_buffer_jbddirty(bh);
1218
1219                 JBUFFER_TRACE(jh, "belongs to current transaction: unfile");
1220                 J_ASSERT_JH(jh, !jh->b_committed_data);
1221
1222                 __journal_unfile_buffer(jh);
1223                 jh->b_transaction = 0;
1224
1225                 /* 
1226                  * We are no longer going to journal this buffer.
1227                  * However, the commit of this transaction is still
1228                  * important to the buffer: the delete that we are now
1229                  * processing might obsolete an old log entry, so by
1230                  * committing, we can satisfy the buffer's checkpoint.
1231                  *
1232                  * So, if we have a checkpoint on the buffer, we should
1233                  * now refile the buffer on our BJ_Forget list so that
1234                  * we know to remove the checkpoint after we commit. 
1235                  */
1236
1237                 if (jh->b_cp_transaction) {
1238                         __journal_file_buffer(jh, transaction, BJ_Forget);
1239                 } else {
1240                         journal_remove_journal_head(bh);
1241                         __brelse(bh);
1242                         if (!buffer_jbd(bh)) {
1243                                 spin_unlock(&journal->j_list_lock);
1244                                 jbd_unlock_bh_state(bh);
1245                                 __bforget(bh);
1246                                 return;
1247                         }
1248                 }
1249         } else if (jh->b_transaction) {
1250                 J_ASSERT_JH(jh, (jh->b_transaction == 
1251                                  journal->j_committing_transaction));
1252                 /* However, if the buffer is still owned by a prior
1253                  * (committing) transaction, we can't drop it yet... */
1254                 JBUFFER_TRACE(jh, "belongs to older transaction");
1255                 /* ... but we CAN drop it from the new transaction if we
1256                  * have also modified it since the original commit. */
1257
1258                 if (jh->b_next_transaction) {
1259                         J_ASSERT(jh->b_next_transaction == transaction);
1260                         jh->b_next_transaction = NULL;
1261                 }
1262         }
1263
1264 not_jbd:
1265         spin_unlock(&journal->j_list_lock);
1266         jbd_unlock_bh_state(bh);
1267         __brelse(bh);
1268         return;
1269 }
1270
1271 /**
1272  * void journal_callback_set() -  Register a callback function for this handle.
1273  * @handle: handle to attach the callback to.
1274  * @func: function to callback.
1275  * @jcb:  structure with additional information required by func() , and
1276  *        some space for jbd internal information.
1277  * 
1278  * The function will be
1279  * called when the transaction that this handle is part of has been
1280  * committed to disk with the original callback data struct and the
1281  * error status of the journal as parameters.  There is no guarantee of
1282  * ordering between handles within a single transaction, nor between
1283  * callbacks registered on the same handle.
1284  *
1285  * The caller is responsible for allocating the journal_callback struct.
1286  * This is to allow the caller to add as much extra data to the callback
1287  * as needed, but reduce the overhead of multiple allocations.  The caller
1288  * allocated struct must start with a struct journal_callback at offset 0,
1289  * and has the caller-specific data afterwards.
1290  */
1291 void journal_callback_set(handle_t *handle,
1292                         void (*func)(struct journal_callback *jcb, int error),
1293                         struct journal_callback *jcb)
1294 {
1295         spin_lock(&handle->h_transaction->t_jcb_lock);
1296         list_add_tail(&jcb->jcb_list, &handle->h_jcb);
1297         spin_unlock(&handle->h_transaction->t_jcb_lock);
1298         jcb->jcb_func = func;
1299 }
1300
1301 /**
1302  * int journal_stop() - complete a transaction
1303  * @handle: tranaction to complete.
1304  * 
1305  * All done for a particular handle.
1306  *
1307  * There is not much action needed here.  We just return any remaining
1308  * buffer credits to the transaction and remove the handle.  The only
1309  * complication is that we need to start a commit operation if the
1310  * filesystem is marked for synchronous update.
1311  *
1312  * journal_stop itself will not usually return an error, but it may
1313  * do so in unusual circumstances.  In particular, expect it to 
1314  * return -EIO if a journal_abort has been executed since the
1315  * transaction began.
1316  */
1317 int journal_stop(handle_t *handle)
1318 {
1319         transaction_t *transaction = handle->h_transaction;
1320         journal_t *journal = transaction->t_journal;
1321         int old_handle_count, err;
1322
1323         J_ASSERT(transaction->t_updates > 0);
1324         J_ASSERT(journal_current_handle() == handle);
1325
1326         if (is_handle_aborted(handle))
1327                 err = -EIO;
1328         else
1329                 err = 0;
1330
1331         if (--handle->h_ref > 0) {
1332                 jbd_debug(4, "h_ref %d -> %d\n", handle->h_ref + 1,
1333                           handle->h_ref);
1334                 return err;
1335         }
1336
1337         jbd_debug(4, "Handle %p going down\n", handle);
1338
1339         /*
1340          * Implement synchronous transaction batching.  If the handle
1341          * was synchronous, don't force a commit immediately.  Let's
1342          * yield and let another thread piggyback onto this transaction.
1343          * Keep doing that while new threads continue to arrive.
1344          * It doesn't cost much - we're about to run a commit and sleep
1345          * on IO anyway.  Speeds up many-threaded, many-dir operations
1346          * by 30x or more...
1347          */
1348         if (handle->h_sync) {
1349                 set_current_state(TASK_RUNNING);
1350                 do {
1351                         old_handle_count = transaction->t_handle_count;
1352                         schedule();
1353                 } while (old_handle_count != transaction->t_handle_count);
1354         }
1355
1356         current->journal_info = NULL;
1357         spin_lock(&journal->j_state_lock);
1358         spin_lock(&transaction->t_handle_lock);
1359         transaction->t_outstanding_credits -= handle->h_buffer_credits;
1360         transaction->t_updates--;
1361         if (!transaction->t_updates) {
1362                 wake_up(&journal->j_wait_updates);
1363                 if (journal->j_barrier_count)
1364                         wake_up(&journal->j_wait_transaction_locked);
1365         }
1366
1367         /* Move callbacks from the handle to the transaction. */
1368         spin_lock(&transaction->t_jcb_lock);
1369         list_splice(&handle->h_jcb, &transaction->t_jcb);
1370         spin_unlock(&transaction->t_jcb_lock);
1371
1372         /*
1373          * If the handle is marked SYNC, we need to set another commit
1374          * going!  We also want to force a commit if the current
1375          * transaction is occupying too much of the log, or if the
1376          * transaction is too old now.
1377          */
1378         if (handle->h_sync ||
1379                         transaction->t_outstanding_credits >
1380                                 journal->j_max_transaction_buffers ||
1381                         time_after_eq(jiffies, transaction->t_expires)) {
1382                 /* Do this even for aborted journals: an abort still
1383                  * completes the commit thread, it just doesn't write
1384                  * anything to disk. */
1385                 tid_t tid = transaction->t_tid;
1386
1387                 spin_unlock(&transaction->t_handle_lock);
1388                 jbd_debug(2, "transaction too old, requesting commit for "
1389                                         "handle %p\n", handle);
1390                 /* This is non-blocking */
1391                 __log_start_commit(journal, transaction->t_tid);
1392                 spin_unlock(&journal->j_state_lock);
1393
1394                 /*
1395                  * Special case: JFS_SYNC synchronous updates require us
1396                  * to wait for the commit to complete.  
1397                  */
1398                 if (handle->h_sync && !(current->flags & PF_MEMALLOC))
1399                         err = log_wait_commit(journal, tid);
1400         } else {
1401                 spin_unlock(&transaction->t_handle_lock);
1402                 spin_unlock(&journal->j_state_lock);
1403         }
1404
1405         jbd_free_handle(handle);
1406         return err;
1407 }
1408
1409 /**int journal_force_commit() - force any uncommitted transactions
1410  * @journal: journal to force
1411  *
1412  * For synchronous operations: force any uncommitted transactions
1413  * to disk.  May seem kludgy, but it reuses all the handle batching
1414  * code in a very simple manner.
1415  */
1416 int journal_force_commit(journal_t *journal)
1417 {
1418         handle_t *handle;
1419         int ret;
1420
1421         handle = journal_start(journal, 1);
1422         if (IS_ERR(handle)) {
1423                 ret = PTR_ERR(handle);
1424         } else {
1425                 handle->h_sync = 1;
1426                 ret = journal_stop(handle);
1427         }
1428         return ret;
1429 }
1430
1431 /*
1432  *
1433  * List management code snippets: various functions for manipulating the
1434  * transaction buffer lists.
1435  *
1436  */
1437
1438 /*
1439  * Append a buffer to a transaction list, given the transaction's list head
1440  * pointer.
1441  *
1442  * j_list_lock is held.
1443  *
1444  * jbd_lock_bh_state(jh2bh(jh)) is held.
1445  */
1446
1447 static inline void 
1448 __blist_add_buffer(struct journal_head **list, struct journal_head *jh)
1449 {
1450         if (!*list) {
1451                 jh->b_tnext = jh->b_tprev = jh;
1452                 *list = jh;
1453         } else {
1454                 /* Insert at the tail of the list to preserve order */
1455                 struct journal_head *first = *list, *last = first->b_tprev;
1456                 jh->b_tprev = last;
1457                 jh->b_tnext = first;
1458                 last->b_tnext = first->b_tprev = jh;
1459         }
1460 }
1461
1462 /* 
1463  * Remove a buffer from a transaction list, given the transaction's list
1464  * head pointer.
1465  *
1466  * Called with j_list_lock held, and the journal may not be locked.
1467  *
1468  * jbd_lock_bh_state(jh2bh(jh)) is held.
1469  */
1470
1471 static inline void
1472 __blist_del_buffer(struct journal_head **list, struct journal_head *jh)
1473 {
1474         if (*list == jh) {
1475                 *list = jh->b_tnext;
1476                 if (*list == jh)
1477                         *list = 0;
1478         }
1479         jh->b_tprev->b_tnext = jh->b_tnext;
1480         jh->b_tnext->b_tprev = jh->b_tprev;
1481 }
1482
1483 /* 
1484  * Remove a buffer from the appropriate transaction list.
1485  *
1486  * Note that this function can *change* the value of
1487  * bh->b_transaction->t_sync_datalist, t_buffers, t_forget,
1488  * t_iobuf_list, t_shadow_list, t_log_list or t_reserved_list.  If the caller
1489  * is holding onto a copy of one of thee pointers, it could go bad.
1490  * Generally the caller needs to re-read the pointer from the transaction_t.
1491  *
1492  * Called under j_list_lock.  The journal may not be locked.
1493  */
1494 void __journal_unfile_buffer(struct journal_head *jh)
1495 {
1496         struct journal_head **list = 0;
1497         transaction_t *transaction;
1498         struct buffer_head *bh = jh2bh(jh);
1499
1500         J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh));
1501         transaction = jh->b_transaction;
1502         if (transaction)
1503                 assert_spin_locked(&transaction->t_journal->j_list_lock);
1504
1505         J_ASSERT_JH(jh, jh->b_jlist < BJ_Types);
1506         if (jh->b_jlist != BJ_None)
1507                 J_ASSERT_JH(jh, transaction != 0);
1508
1509         switch (jh->b_jlist) {
1510         case BJ_None:
1511                 return;
1512         case BJ_SyncData:
1513                 list = &transaction->t_sync_datalist;
1514                 break;
1515         case BJ_Metadata:
1516                 transaction->t_nr_buffers--;
1517                 J_ASSERT_JH(jh, transaction->t_nr_buffers >= 0);
1518                 list = &transaction->t_buffers;
1519                 break;
1520         case BJ_Forget:
1521                 list = &transaction->t_forget;
1522                 break;
1523         case BJ_IO:
1524                 list = &transaction->t_iobuf_list;
1525                 break;
1526         case BJ_Shadow:
1527                 list = &transaction->t_shadow_list;
1528                 break;
1529         case BJ_LogCtl:
1530                 list = &transaction->t_log_list;
1531                 break;
1532         case BJ_Reserved:
1533                 list = &transaction->t_reserved_list;
1534                 break;
1535         }
1536
1537         __blist_del_buffer(list, jh);
1538         jh->b_jlist = BJ_None;
1539         if (test_clear_buffer_jbddirty(bh))
1540                 mark_buffer_dirty(bh);  /* Expose it to the VM */
1541 }
1542
1543 void journal_unfile_buffer(journal_t *journal, struct journal_head *jh)
1544 {
1545         jbd_lock_bh_state(jh2bh(jh));
1546         spin_lock(&journal->j_list_lock);
1547         __journal_unfile_buffer(jh);
1548         spin_unlock(&journal->j_list_lock);
1549         jbd_unlock_bh_state(jh2bh(jh));
1550 }
1551
1552 /*
1553  * Called from journal_try_to_free_buffers().
1554  *
1555  * Called under jbd_lock_bh_state(bh)
1556  */
1557 static void
1558 __journal_try_to_free_buffer(journal_t *journal, struct buffer_head *bh)
1559 {
1560         struct journal_head *jh;
1561
1562         jh = bh2jh(bh);
1563
1564         if (buffer_locked(bh) || buffer_dirty(bh))
1565                 goto out;
1566
1567         if (jh->b_next_transaction != 0)
1568                 goto out;
1569
1570         spin_lock(&journal->j_list_lock);
1571         if (jh->b_transaction != 0 && jh->b_cp_transaction == 0) {
1572                 if (jh->b_jlist == BJ_SyncData) {
1573                         /* A written-back ordered data buffer */
1574                         JBUFFER_TRACE(jh, "release data");
1575                         __journal_unfile_buffer(jh);
1576                         jh->b_transaction = 0;
1577                         journal_remove_journal_head(bh);
1578                         __brelse(bh);
1579                 }
1580         } else if (jh->b_cp_transaction != 0 && jh->b_transaction == 0) {
1581                 /* written-back checkpointed metadata buffer */
1582                 if (jh->b_jlist == BJ_None) {
1583                         JBUFFER_TRACE(jh, "remove from checkpoint list");
1584                         __journal_remove_checkpoint(jh);
1585                         journal_remove_journal_head(bh);
1586                         __brelse(bh);
1587                 }
1588         }
1589         spin_unlock(&journal->j_list_lock);
1590 out:
1591         return;
1592 }
1593
1594
1595 /** 
1596  * int journal_try_to_free_buffers() - try to free page buffers.
1597  * @journal: journal for operation
1598  * @page: to try and free
1599  * @gfp_mask: 'IO' mode for try_to_free_buffers()
1600  *
1601  * 
1602  * For all the buffers on this page,
1603  * if they are fully written out ordered data, move them onto BUF_CLEAN
1604  * so try_to_free_buffers() can reap them.
1605  * 
1606  * This function returns non-zero if we wish try_to_free_buffers()
1607  * to be called. We do this if the page is releasable by try_to_free_buffers().
1608  * We also do it if the page has locked or dirty buffers and the caller wants
1609  * us to perform sync or async writeout.
1610  *
1611  * This complicates JBD locking somewhat.  We aren't protected by the
1612  * BKL here.  We wish to remove the buffer from its committing or
1613  * running transaction's ->t_datalist via __journal_unfile_buffer.
1614  *
1615  * This may *change* the value of transaction_t->t_datalist, so anyone
1616  * who looks at t_datalist needs to lock against this function.
1617  *
1618  * Even worse, someone may be doing a journal_dirty_data on this
1619  * buffer.  So we need to lock against that.  journal_dirty_data()
1620  * will come out of the lock with the buffer dirty, which makes it
1621  * ineligible for release here.
1622  *
1623  * Who else is affected by this?  hmm...  Really the only contender
1624  * is do_get_write_access() - it could be looking at the buffer while
1625  * journal_try_to_free_buffer() is changing its state.  But that
1626  * cannot happen because we never reallocate freed data as metadata
1627  * while the data is part of a transaction.  Yes?
1628  */
1629 int journal_try_to_free_buffers(journal_t *journal, 
1630                                 struct page *page, int unused_gfp_mask)
1631 {
1632         struct buffer_head *head;
1633         struct buffer_head *bh;
1634         int ret = 0;
1635
1636         J_ASSERT(PageLocked(page));
1637
1638         head = page_buffers(page);
1639         bh = head;
1640         do {
1641                 struct journal_head *jh;
1642
1643                 /*
1644                  * We take our own ref against the journal_head here to avoid
1645                  * having to add tons of locking around each instance of
1646                  * journal_remove_journal_head() and journal_put_journal_head().
1647                  */
1648                 jh = journal_grab_journal_head(bh);
1649                 if (!jh)
1650                         continue;
1651
1652                 jbd_lock_bh_state(bh);
1653                 __journal_try_to_free_buffer(journal, bh);
1654                 journal_put_journal_head(jh);
1655                 jbd_unlock_bh_state(bh);
1656                 if (buffer_jbd(bh))
1657                         goto busy;
1658         } while ((bh = bh->b_this_page) != head);
1659         ret = try_to_free_buffers(page);
1660 busy:
1661         return ret;
1662 }
1663
1664 /*
1665  * This buffer is no longer needed.  If it is on an older transaction's
1666  * checkpoint list we need to record it on this transaction's forget list
1667  * to pin this buffer (and hence its checkpointing transaction) down until
1668  * this transaction commits.  If the buffer isn't on a checkpoint list, we
1669  * release it.
1670  * Returns non-zero if JBD no longer has an interest in the buffer.
1671  *
1672  * Called under j_list_lock.
1673  *
1674  * Called under jbd_lock_bh_state(bh).
1675  */
1676 static int __dispose_buffer(struct journal_head *jh, transaction_t *transaction)
1677 {
1678         int may_free = 1;
1679         struct buffer_head *bh = jh2bh(jh);
1680
1681         __journal_unfile_buffer(jh);
1682         jh->b_transaction = 0;
1683
1684         if (jh->b_cp_transaction) {
1685                 JBUFFER_TRACE(jh, "on running+cp transaction");
1686                 __journal_file_buffer(jh, transaction, BJ_Forget);
1687                 clear_buffer_jbddirty(bh);
1688                 may_free = 0;
1689         } else {
1690                 JBUFFER_TRACE(jh, "on running transaction");
1691                 journal_remove_journal_head(bh);
1692                 __brelse(bh);
1693         }
1694         return may_free;
1695 }
1696
1697 /*
1698  * journal_invalidatepage 
1699  *
1700  * This code is tricky.  It has a number of cases to deal with.
1701  *
1702  * There are two invariants which this code relies on:
1703  *
1704  * i_size must be updated on disk before we start calling invalidatepage on the
1705  * data.
1706  * 
1707  *  This is done in ext3 by defining an ext3_setattr method which
1708  *  updates i_size before truncate gets going.  By maintaining this
1709  *  invariant, we can be sure that it is safe to throw away any buffers
1710  *  attached to the current transaction: once the transaction commits,
1711  *  we know that the data will not be needed.
1712  * 
1713  *  Note however that we can *not* throw away data belonging to the
1714  *  previous, committing transaction!  
1715  *
1716  * Any disk blocks which *are* part of the previous, committing
1717  * transaction (and which therefore cannot be discarded immediately) are
1718  * not going to be reused in the new running transaction
1719  *
1720  *  The bitmap committed_data images guarantee this: any block which is
1721  *  allocated in one transaction and removed in the next will be marked
1722  *  as in-use in the committed_data bitmap, so cannot be reused until
1723  *  the next transaction to delete the block commits.  This means that
1724  *  leaving committing buffers dirty is quite safe: the disk blocks
1725  *  cannot be reallocated to a different file and so buffer aliasing is
1726  *  not possible.
1727  *
1728  *
1729  * The above applies mainly to ordered data mode.  In writeback mode we
1730  * don't make guarantees about the order in which data hits disk --- in
1731  * particular we don't guarantee that new dirty data is flushed before
1732  * transaction commit --- so it is always safe just to discard data
1733  * immediately in that mode.  --sct 
1734  */
1735
1736 /*
1737  * The journal_unmap_buffer helper function returns zero if the buffer
1738  * concerned remains pinned as an anonymous buffer belonging to an older
1739  * transaction.
1740  *
1741  * We're outside-transaction here.  Either or both of j_running_transaction
1742  * and j_committing_transaction may be NULL.
1743  */
1744 static int journal_unmap_buffer(journal_t *journal, struct buffer_head *bh)
1745 {
1746         transaction_t *transaction;
1747         struct journal_head *jh;
1748         int may_free = 1;
1749         int ret;
1750
1751         BUFFER_TRACE(bh, "entry");
1752
1753         /*
1754          * It is safe to proceed here without the j_list_lock because the
1755          * buffers cannot be stolen by try_to_free_buffers as long as we are
1756          * holding the page lock. --sct
1757          */
1758
1759         if (!buffer_jbd(bh))
1760                 goto zap_buffer_unlocked;
1761
1762         spin_lock(&journal->j_state_lock);
1763         jbd_lock_bh_state(bh);
1764         spin_lock(&journal->j_list_lock);
1765
1766         /*
1767          * Now we have the locks, check again to see whether kjournald has
1768          * taken the buffer off the transaction.
1769          */
1770         if (!buffer_jbd(bh))
1771                 goto zap_buffer;
1772
1773         jh = bh2jh(bh);
1774         transaction = jh->b_transaction;
1775         if (transaction == NULL) {
1776                 /* First case: not on any transaction.  If it
1777                  * has no checkpoint link, then we can zap it:
1778                  * it's a writeback-mode buffer so we don't care
1779                  * if it hits disk safely. */
1780                 if (!jh->b_cp_transaction) {
1781                         JBUFFER_TRACE(jh, "not on any transaction: zap");
1782                         goto zap_buffer;
1783                 }
1784
1785                 if (!buffer_dirty(bh)) {
1786                         /* bdflush has written it.  We can drop it now */
1787                         goto zap_buffer;
1788                 }
1789
1790                 /* OK, it must be in the journal but still not
1791                  * written fully to disk: it's metadata or
1792                  * journaled data... */
1793
1794                 if (journal->j_running_transaction) {
1795                         /* ... and once the current transaction has
1796                          * committed, the buffer won't be needed any
1797                          * longer. */
1798                         JBUFFER_TRACE(jh, "checkpointed: add to BJ_Forget");
1799                         ret = __dispose_buffer(jh,
1800                                         journal->j_running_transaction);
1801                         spin_unlock(&journal->j_list_lock);
1802                         jbd_unlock_bh_state(bh);
1803                         spin_unlock(&journal->j_state_lock);
1804                         return ret;
1805                 } else {
1806                         /* There is no currently-running transaction. So the
1807                          * orphan record which we wrote for this file must have
1808                          * passed into commit.  We must attach this buffer to
1809                          * the committing transaction, if it exists. */
1810                         if (journal->j_committing_transaction) {
1811                                 JBUFFER_TRACE(jh, "give to committing trans");
1812                                 ret = __dispose_buffer(jh,
1813                                         journal->j_committing_transaction);
1814                                 spin_unlock(&journal->j_list_lock);
1815                                 jbd_unlock_bh_state(bh);
1816                                 spin_unlock(&journal->j_state_lock);
1817                                 return ret;
1818                         } else {
1819                                 /* The orphan record's transaction has
1820                                  * committed.  We can cleanse this buffer */
1821                                 clear_buffer_jbddirty(bh);
1822                                 goto zap_buffer;
1823                         }
1824                 }
1825         } else if (transaction == journal->j_committing_transaction) {
1826                 /* If it is committing, we simply cannot touch it.  We
1827                  * can remove it's next_transaction pointer from the
1828                  * running transaction if that is set, but nothing
1829                  * else. */
1830                 JBUFFER_TRACE(jh, "on committing transaction");
1831                 set_buffer_freed(bh);
1832                 if (jh->b_next_transaction) {
1833                         J_ASSERT(jh->b_next_transaction ==
1834                                         journal->j_running_transaction);
1835                         jh->b_next_transaction = NULL;
1836                 }
1837                 spin_unlock(&journal->j_list_lock);
1838                 jbd_unlock_bh_state(bh);
1839                 spin_unlock(&journal->j_state_lock);
1840                 return 0;
1841         } else {
1842                 /* Good, the buffer belongs to the running transaction.
1843                  * We are writing our own transaction's data, not any
1844                  * previous one's, so it is safe to throw it away
1845                  * (remember that we expect the filesystem to have set
1846                  * i_size already for this truncate so recovery will not
1847                  * expose the disk blocks we are discarding here.) */
1848                 J_ASSERT_JH(jh, transaction == journal->j_running_transaction);
1849                 may_free = __dispose_buffer(jh, transaction);
1850         }
1851
1852 zap_buffer:
1853         spin_unlock(&journal->j_list_lock);
1854         jbd_unlock_bh_state(bh);
1855         spin_unlock(&journal->j_state_lock);
1856 zap_buffer_unlocked:
1857         clear_buffer_dirty(bh);
1858         J_ASSERT_BH(bh, !buffer_jbddirty(bh));
1859         clear_buffer_mapped(bh);
1860         clear_buffer_req(bh);
1861         clear_buffer_new(bh);
1862         bh->b_bdev = NULL;
1863         return may_free;
1864 }
1865
1866 /** 
1867  * int journal_invalidatepage() 
1868  * @journal: journal to use for flush... 
1869  * @page:    page to flush
1870  * @offset:  length of page to invalidate.
1871  *
1872  * Reap page buffers containing data after offset in page.
1873  *
1874  * Return non-zero if the page's buffers were successfully reaped.
1875  */
1876 int journal_invalidatepage(journal_t *journal, 
1877                       struct page *page, 
1878                       unsigned long offset)
1879 {
1880         struct buffer_head *head, *bh, *next;
1881         unsigned int curr_off = 0;
1882         int may_free = 1;
1883
1884         if (!PageLocked(page))
1885                 BUG();
1886         if (!page_has_buffers(page))
1887                 return 1;
1888
1889         /* We will potentially be playing with lists other than just the
1890          * data lists (especially for journaled data mode), so be
1891          * cautious in our locking. */
1892
1893         head = bh = page_buffers(page);
1894         do {
1895                 unsigned int next_off = curr_off + bh->b_size;
1896                 next = bh->b_this_page;
1897
1898                 /* AKPM: doing lock_buffer here may be overly paranoid */
1899                 if (offset <= curr_off) {
1900                         /* This block is wholly outside the truncation point */
1901                         lock_buffer(bh);
1902                         may_free &= journal_unmap_buffer(journal, bh);
1903                         unlock_buffer(bh);
1904                 }
1905                 curr_off = next_off;
1906                 bh = next;
1907
1908         } while (bh != head);
1909
1910         if (!offset) {
1911                 if (!may_free || !try_to_free_buffers(page))
1912                         return 0;
1913                 J_ASSERT(!page_has_buffers(page));
1914         }
1915         return 1;
1916 }
1917
1918 /* 
1919  * File a buffer on the given transaction list. 
1920  */
1921 void __journal_file_buffer(struct journal_head *jh,
1922                         transaction_t *transaction, int jlist)
1923 {
1924         struct journal_head **list = 0;
1925         int was_dirty = 0;
1926         struct buffer_head *bh = jh2bh(jh);
1927
1928         J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh));
1929         assert_spin_locked(&transaction->t_journal->j_list_lock);
1930
1931 #ifdef __SMP__
1932         J_ASSERT (current->lock_depth >= 0);
1933 #endif
1934         J_ASSERT_JH(jh, jh->b_jlist < BJ_Types);
1935         J_ASSERT_JH(jh, jh->b_transaction == transaction ||
1936                                 jh->b_transaction == 0);
1937
1938         if (jh->b_transaction && jh->b_jlist == jlist)
1939                 return;
1940
1941         /* The following list of buffer states needs to be consistent
1942          * with __jbd_unexpected_dirty_buffer()'s handling of dirty
1943          * state. */
1944
1945         if (jlist == BJ_Metadata || jlist == BJ_Reserved || 
1946             jlist == BJ_Shadow || jlist == BJ_Forget) {
1947                 if (test_clear_buffer_dirty(bh) ||
1948                     test_clear_buffer_jbddirty(bh))
1949                         was_dirty = 1;
1950         }
1951
1952         if (jh->b_transaction)
1953                 __journal_unfile_buffer(jh);
1954         else
1955                 jh->b_transaction = transaction;
1956
1957         switch (jlist) {
1958         case BJ_None:
1959                 J_ASSERT_JH(jh, !jh->b_committed_data);
1960                 J_ASSERT_JH(jh, !jh->b_frozen_data);
1961                 return;
1962         case BJ_SyncData:
1963                 list = &transaction->t_sync_datalist;
1964                 break;
1965         case BJ_Metadata:
1966                 transaction->t_nr_buffers++;
1967                 list = &transaction->t_buffers;
1968                 break;
1969         case BJ_Forget:
1970                 list = &transaction->t_forget;
1971                 break;
1972         case BJ_IO:
1973                 list = &transaction->t_iobuf_list;
1974                 break;
1975         case BJ_Shadow:
1976                 list = &transaction->t_shadow_list;
1977                 break;
1978         case BJ_LogCtl:
1979                 list = &transaction->t_log_list;
1980                 break;
1981         case BJ_Reserved:
1982                 list = &transaction->t_reserved_list;
1983                 break;
1984         }
1985
1986         __blist_add_buffer(list, jh);
1987         jh->b_jlist = jlist;
1988
1989         if (was_dirty)
1990                 set_buffer_jbddirty(bh);
1991 }
1992
1993 void journal_file_buffer(struct journal_head *jh,
1994                                 transaction_t *transaction, int jlist)
1995 {
1996         jbd_lock_bh_state(jh2bh(jh));
1997         spin_lock(&transaction->t_journal->j_list_lock);
1998         __journal_file_buffer(jh, transaction, jlist);
1999         spin_unlock(&transaction->t_journal->j_list_lock);
2000         jbd_unlock_bh_state(jh2bh(jh));
2001 }
2002
2003 /* 
2004  * Remove a buffer from its current buffer list in preparation for
2005  * dropping it from its current transaction entirely.  If the buffer has
2006  * already started to be used by a subsequent transaction, refile the
2007  * buffer on that transaction's metadata list.
2008  *
2009  * Called under journal->j_list_lock
2010  *
2011  * Called under jbd_lock_bh_state(jh2bh(jh))
2012  */
2013 void __journal_refile_buffer(struct journal_head *jh)
2014 {
2015         int was_dirty;
2016         struct buffer_head *bh = jh2bh(jh);
2017
2018         J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh));
2019         if (jh->b_transaction)
2020                 assert_spin_locked(&jh->b_transaction->t_journal->j_list_lock);
2021
2022         /* If the buffer is now unused, just drop it. */
2023         if (jh->b_next_transaction == NULL) {
2024                 __journal_unfile_buffer(jh);
2025                 jh->b_transaction = NULL;
2026                 return;
2027         }
2028
2029         /*
2030          * It has been modified by a later transaction: add it to the new
2031          * transaction's metadata list.
2032          */
2033
2034         was_dirty = test_clear_buffer_jbddirty(bh);
2035         __journal_unfile_buffer(jh);
2036         jh->b_transaction = jh->b_next_transaction;
2037         jh->b_next_transaction = NULL;
2038         __journal_file_buffer(jh, jh->b_transaction, BJ_Metadata);
2039         J_ASSERT_JH(jh, jh->b_transaction->t_state == T_RUNNING);
2040
2041         if (was_dirty)
2042                 set_buffer_jbddirty(bh);
2043 }
2044
2045 /*
2046  * For the unlocked version of this call, also make sure that any
2047  * hanging journal_head is cleaned up if necessary.
2048  *
2049  * __journal_refile_buffer is usually called as part of a single locked
2050  * operation on a buffer_head, in which the caller is probably going to
2051  * be hooking the journal_head onto other lists.  In that case it is up
2052  * to the caller to remove the journal_head if necessary.  For the
2053  * unlocked journal_refile_buffer call, the caller isn't going to be
2054  * doing anything else to the buffer so we need to do the cleanup
2055  * ourselves to avoid a jh leak. 
2056  *
2057  * *** The journal_head may be freed by this call! ***
2058  */
2059 void journal_refile_buffer(journal_t *journal, struct journal_head *jh)
2060 {
2061         struct buffer_head *bh = jh2bh(jh);
2062
2063         jbd_lock_bh_state(bh);
2064         spin_lock(&journal->j_list_lock);
2065
2066         __journal_refile_buffer(jh);
2067         jbd_unlock_bh_state(bh);
2068         journal_remove_journal_head(bh);
2069
2070         spin_unlock(&journal->j_list_lock);
2071         __brelse(bh);
2072 }