diff options
Diffstat (limited to 'fs/jbd/transaction.c')
-rw-r--r-- | fs/jbd/transaction.c | 134 |
1 files changed, 67 insertions, 67 deletions
diff --git a/fs/jbd/transaction.c b/fs/jbd/transaction.c index f5169a96260e..e1b3c8af4d17 100644 --- a/fs/jbd/transaction.c +++ b/fs/jbd/transaction.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | * linux/fs/transaction.c | 2 | * linux/fs/transaction.c |
3 | * | 3 | * |
4 | * Written by Stephen C. Tweedie <sct@redhat.com>, 1998 | 4 | * Written by Stephen C. Tweedie <sct@redhat.com>, 1998 |
5 | * | 5 | * |
6 | * Copyright 1998 Red Hat corp --- All Rights Reserved | 6 | * Copyright 1998 Red Hat corp --- All Rights Reserved |
@@ -10,7 +10,7 @@ | |||
10 | * option, any later version, incorporated herein by reference. | 10 | * option, any later version, incorporated herein by reference. |
11 | * | 11 | * |
12 | * Generic filesystem transaction handling code; part of the ext2fs | 12 | * Generic filesystem transaction handling code; part of the ext2fs |
13 | * journaling system. | 13 | * journaling system. |
14 | * | 14 | * |
15 | * This file manages transactions (compound commits managed by the | 15 | * This file manages transactions (compound commits managed by the |
16 | * journaling code) and handles (individual atomic operations by the | 16 | * journaling code) and handles (individual atomic operations by the |
@@ -74,7 +74,7 @@ get_transaction(journal_t *journal, transaction_t *transaction) | |||
74 | * start_this_handle: Given a handle, deal with any locking or stalling | 74 | * start_this_handle: Given a handle, deal with any locking or stalling |
75 | * needed to make sure that there is enough journal space for the handle | 75 | * needed to make sure that there is enough journal space for the handle |
76 | * to begin. Attach the handle to a transaction and set up the | 76 | * to begin. Attach the handle to a transaction and set up the |
77 | * transaction's buffer credits. | 77 | * transaction's buffer credits. |
78 | */ | 78 | */ |
79 | 79 | ||
80 | static int start_this_handle(journal_t *journal, handle_t *handle) | 80 | static int start_this_handle(journal_t *journal, handle_t *handle) |
@@ -117,7 +117,7 @@ repeat_locked: | |||
117 | if (is_journal_aborted(journal) || | 117 | if (is_journal_aborted(journal) || |
118 | (journal->j_errno != 0 && !(journal->j_flags & JFS_ACK_ERR))) { | 118 | (journal->j_errno != 0 && !(journal->j_flags & JFS_ACK_ERR))) { |
119 | spin_unlock(&journal->j_state_lock); | 119 | spin_unlock(&journal->j_state_lock); |
120 | ret = -EROFS; | 120 | ret = -EROFS; |
121 | goto out; | 121 | goto out; |
122 | } | 122 | } |
123 | 123 | ||
@@ -182,7 +182,7 @@ repeat_locked: | |||
182 | goto repeat; | 182 | goto repeat; |
183 | } | 183 | } |
184 | 184 | ||
185 | /* | 185 | /* |
186 | * The commit code assumes that it can get enough log space | 186 | * The commit code assumes that it can get enough log space |
187 | * without forcing a checkpoint. This is *critical* for | 187 | * without forcing a checkpoint. This is *critical* for |
188 | * correctness: a checkpoint of a buffer which is also | 188 | * correctness: a checkpoint of a buffer which is also |
@@ -191,7 +191,7 @@ repeat_locked: | |||
191 | * | 191 | * |
192 | * We must therefore ensure the necessary space in the journal | 192 | * We must therefore ensure the necessary space in the journal |
193 | * *before* starting to dirty potentially checkpointed buffers | 193 | * *before* starting to dirty potentially checkpointed buffers |
194 | * in the new transaction. | 194 | * in the new transaction. |
195 | * | 195 | * |
196 | * The worst part is, any transaction currently committing can | 196 | * The worst part is, any transaction currently committing can |
197 | * reduce the free space arbitrarily. Be careful to account for | 197 | * reduce the free space arbitrarily. Be careful to account for |
@@ -246,13 +246,13 @@ static handle_t *new_handle(int nblocks) | |||
246 | } | 246 | } |
247 | 247 | ||
248 | /** | 248 | /** |
249 | * handle_t *journal_start() - Obtain a new handle. | 249 | * handle_t *journal_start() - Obtain a new handle. |
250 | * @journal: Journal to start transaction on. | 250 | * @journal: Journal to start transaction on. |
251 | * @nblocks: number of block buffer we might modify | 251 | * @nblocks: number of block buffer we might modify |
252 | * | 252 | * |
253 | * We make sure that the transaction can guarantee at least nblocks of | 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 | 254 | * modified buffers in the log. We block until the log can guarantee |
255 | * that much space. | 255 | * that much space. |
256 | * | 256 | * |
257 | * This function is visible to journal users (like ext3fs), so is not | 257 | * This function is visible to journal users (like ext3fs), so is not |
258 | * called with the journal already locked. | 258 | * called with the journal already locked. |
@@ -292,11 +292,11 @@ handle_t *journal_start(journal_t *journal, int nblocks) | |||
292 | * int journal_extend() - extend buffer credits. | 292 | * int journal_extend() - extend buffer credits. |
293 | * @handle: handle to 'extend' | 293 | * @handle: handle to 'extend' |
294 | * @nblocks: nr blocks to try to extend by. | 294 | * @nblocks: nr blocks to try to extend by. |
295 | * | 295 | * |
296 | * Some transactions, such as large extends and truncates, can be done | 296 | * Some transactions, such as large extends and truncates, can be done |
297 | * atomically all at once or in several stages. The operation requests | 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 | 298 | * a credit for a number of buffer modications in advance, but can |
299 | * extend its credit if it needs more. | 299 | * extend its credit if it needs more. |
300 | * | 300 | * |
301 | * journal_extend tries to give the running handle more buffer credits. | 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. | 302 | * It does not guarantee that allocation - this is a best-effort only. |
@@ -363,7 +363,7 @@ out: | |||
363 | * int journal_restart() - restart a handle . | 363 | * int journal_restart() - restart a handle . |
364 | * @handle: handle to restart | 364 | * @handle: handle to restart |
365 | * @nblocks: nr credits requested | 365 | * @nblocks: nr credits requested |
366 | * | 366 | * |
367 | * Restart a handle for a multi-transaction filesystem | 367 | * Restart a handle for a multi-transaction filesystem |
368 | * operation. | 368 | * operation. |
369 | * | 369 | * |
@@ -462,7 +462,7 @@ void journal_lock_updates(journal_t *journal) | |||
462 | /** | 462 | /** |
463 | * void journal_unlock_updates (journal_t* journal) - release barrier | 463 | * void journal_unlock_updates (journal_t* journal) - release barrier |
464 | * @journal: Journal to release the barrier on. | 464 | * @journal: Journal to release the barrier on. |
465 | * | 465 | * |
466 | * Release a transaction barrier obtained with journal_lock_updates(). | 466 | * Release a transaction barrier obtained with journal_lock_updates(). |
467 | * | 467 | * |
468 | * Should be called without the journal lock held. | 468 | * Should be called without the journal lock held. |
@@ -547,8 +547,8 @@ repeat: | |||
547 | jbd_lock_bh_state(bh); | 547 | jbd_lock_bh_state(bh); |
548 | 548 | ||
549 | /* We now hold the buffer lock so it is safe to query the buffer | 549 | /* We now hold the buffer lock so it is safe to query the buffer |
550 | * state. Is the buffer dirty? | 550 | * state. Is the buffer dirty? |
551 | * | 551 | * |
552 | * If so, there are two possibilities. The buffer may be | 552 | * If so, there are two possibilities. The buffer may be |
553 | * non-journaled, and undergoing a quite legitimate writeback. | 553 | * non-journaled, and undergoing a quite legitimate writeback. |
554 | * Otherwise, it is journaled, and we don't expect dirty buffers | 554 | * Otherwise, it is journaled, and we don't expect dirty buffers |
@@ -566,7 +566,7 @@ repeat: | |||
566 | */ | 566 | */ |
567 | if (jh->b_transaction) { | 567 | if (jh->b_transaction) { |
568 | J_ASSERT_JH(jh, | 568 | J_ASSERT_JH(jh, |
569 | jh->b_transaction == transaction || | 569 | jh->b_transaction == transaction || |
570 | jh->b_transaction == | 570 | jh->b_transaction == |
571 | journal->j_committing_transaction); | 571 | journal->j_committing_transaction); |
572 | if (jh->b_next_transaction) | 572 | if (jh->b_next_transaction) |
@@ -580,7 +580,7 @@ repeat: | |||
580 | */ | 580 | */ |
581 | JBUFFER_TRACE(jh, "Unexpected dirty buffer"); | 581 | JBUFFER_TRACE(jh, "Unexpected dirty buffer"); |
582 | jbd_unexpected_dirty_buffer(jh); | 582 | jbd_unexpected_dirty_buffer(jh); |
583 | } | 583 | } |
584 | 584 | ||
585 | unlock_buffer(bh); | 585 | unlock_buffer(bh); |
586 | 586 | ||
@@ -653,7 +653,7 @@ repeat: | |||
653 | * buffer had better remain locked during the kmalloc, | 653 | * buffer had better remain locked during the kmalloc, |
654 | * but that should be true --- we hold the journal lock | 654 | * but that should be true --- we hold the journal lock |
655 | * still and the buffer is already on the BUF_JOURNAL | 655 | * still and the buffer is already on the BUF_JOURNAL |
656 | * list so won't be flushed. | 656 | * list so won't be flushed. |
657 | * | 657 | * |
658 | * Subtle point, though: if this is a get_undo_access, | 658 | * Subtle point, though: if this is a get_undo_access, |
659 | * then we will be relying on the frozen_data to contain | 659 | * then we will be relying on the frozen_data to contain |
@@ -765,8 +765,8 @@ int journal_get_write_access(handle_t *handle, struct buffer_head *bh) | |||
765 | * manually rather than reading off disk), then we need to keep the | 765 | * manually rather than reading off disk), then we need to keep the |
766 | * buffer_head locked until it has been completely filled with new | 766 | * buffer_head locked until it has been completely filled with new |
767 | * data. In this case, we should be able to make the assertion that | 767 | * data. In this case, we should be able to make the assertion that |
768 | * the bh is not already part of an existing transaction. | 768 | * the bh is not already part of an existing transaction. |
769 | * | 769 | * |
770 | * The buffer should already be locked by the caller by this point. | 770 | * The buffer should already be locked by the caller by this point. |
771 | * There is no lock ranking violation: it was a newly created, | 771 | * There is no lock ranking violation: it was a newly created, |
772 | * unlocked buffer beforehand. */ | 772 | * unlocked buffer beforehand. */ |
@@ -778,7 +778,7 @@ int journal_get_write_access(handle_t *handle, struct buffer_head *bh) | |||
778 | * | 778 | * |
779 | * Call this if you create a new bh. | 779 | * Call this if you create a new bh. |
780 | */ | 780 | */ |
781 | int journal_get_create_access(handle_t *handle, struct buffer_head *bh) | 781 | int journal_get_create_access(handle_t *handle, struct buffer_head *bh) |
782 | { | 782 | { |
783 | transaction_t *transaction = handle->h_transaction; | 783 | transaction_t *transaction = handle->h_transaction; |
784 | journal_t *journal = transaction->t_journal; | 784 | journal_t *journal = transaction->t_journal; |
@@ -847,13 +847,13 @@ out: | |||
847 | * do not reuse freed space until the deallocation has been committed, | 847 | * do not reuse freed space until the deallocation has been committed, |
848 | * since if we overwrote that space we would make the delete | 848 | * since if we overwrote that space we would make the delete |
849 | * un-rewindable in case of a crash. | 849 | * un-rewindable in case of a crash. |
850 | * | 850 | * |
851 | * To deal with that, journal_get_undo_access requests write access to a | 851 | * To deal with that, journal_get_undo_access requests write access to a |
852 | * buffer for parts of non-rewindable operations such as delete | 852 | * buffer for parts of non-rewindable operations such as delete |
853 | * operations on the bitmaps. The journaling code must keep a copy of | 853 | * operations on the bitmaps. The journaling code must keep a copy of |
854 | * the buffer's contents prior to the undo_access call until such time | 854 | * the buffer's contents prior to the undo_access call until such time |
855 | * as we know that the buffer has definitely been committed to disk. | 855 | * as we know that the buffer has definitely been committed to disk. |
856 | * | 856 | * |
857 | * We never need to know which transaction the committed data is part | 857 | * We never need to know which transaction the committed data is part |
858 | * of, buffers touched here are guaranteed to be dirtied later and so | 858 | * of, buffers touched here are guaranteed to be dirtied later and so |
859 | * will be committed to a new transaction in due course, at which point | 859 | * will be committed to a new transaction in due course, at which point |
@@ -911,13 +911,13 @@ out: | |||
911 | return err; | 911 | return err; |
912 | } | 912 | } |
913 | 913 | ||
914 | /** | 914 | /** |
915 | * int journal_dirty_data() - mark a buffer as containing dirty data which | 915 | * int journal_dirty_data() - mark a buffer as containing dirty data which |
916 | * needs to be flushed before we can commit the | 916 | * needs to be flushed before we can commit the |
917 | * current transaction. | 917 | * current transaction. |
918 | * @handle: transaction | 918 | * @handle: transaction |
919 | * @bh: bufferhead to mark | 919 | * @bh: bufferhead to mark |
920 | * | 920 | * |
921 | * The buffer is placed on the transaction's data list and is marked as | 921 | * The buffer is placed on the transaction's data list and is marked as |
922 | * belonging to the transaction. | 922 | * belonging to the transaction. |
923 | * | 923 | * |
@@ -946,15 +946,15 @@ int journal_dirty_data(handle_t *handle, struct buffer_head *bh) | |||
946 | 946 | ||
947 | /* | 947 | /* |
948 | * What if the buffer is already part of a running transaction? | 948 | * What if the buffer is already part of a running transaction? |
949 | * | 949 | * |
950 | * There are two cases: | 950 | * There are two cases: |
951 | * 1) It is part of the current running transaction. Refile it, | 951 | * 1) It is part of the current running transaction. Refile it, |
952 | * just in case we have allocated it as metadata, deallocated | 952 | * just in case we have allocated it as metadata, deallocated |
953 | * it, then reallocated it as data. | 953 | * it, then reallocated it as data. |
954 | * 2) It is part of the previous, still-committing transaction. | 954 | * 2) It is part of the previous, still-committing transaction. |
955 | * If all we want to do is to guarantee that the buffer will be | 955 | * If all we want to do is to guarantee that the buffer will be |
956 | * written to disk before this new transaction commits, then | 956 | * written to disk before this new transaction commits, then |
957 | * being sure that the *previous* transaction has this same | 957 | * being sure that the *previous* transaction has this same |
958 | * property is sufficient for us! Just leave it on its old | 958 | * property is sufficient for us! Just leave it on its old |
959 | * transaction. | 959 | * transaction. |
960 | * | 960 | * |
@@ -1076,18 +1076,18 @@ no_journal: | |||
1076 | return 0; | 1076 | return 0; |
1077 | } | 1077 | } |
1078 | 1078 | ||
1079 | /** | 1079 | /** |
1080 | * int journal_dirty_metadata() - mark a buffer as containing dirty metadata | 1080 | * int journal_dirty_metadata() - mark a buffer as containing dirty metadata |
1081 | * @handle: transaction to add buffer to. | 1081 | * @handle: transaction to add buffer to. |
1082 | * @bh: buffer to mark | 1082 | * @bh: buffer to mark |
1083 | * | 1083 | * |
1084 | * mark dirty metadata which needs to be journaled as part of the current | 1084 | * mark dirty metadata which needs to be journaled as part of the current |
1085 | * transaction. | 1085 | * transaction. |
1086 | * | 1086 | * |
1087 | * The buffer is placed on the transaction's metadata list and is marked | 1087 | * The buffer is placed on the transaction's metadata list and is marked |
1088 | * as belonging to the transaction. | 1088 | * as belonging to the transaction. |
1089 | * | 1089 | * |
1090 | * Returns error number or 0 on success. | 1090 | * Returns error number or 0 on success. |
1091 | * | 1091 | * |
1092 | * Special care needs to be taken if the buffer already belongs to the | 1092 | * Special care needs to be taken if the buffer already belongs to the |
1093 | * current committing transaction (in which case we should have frozen | 1093 | * current committing transaction (in which case we should have frozen |
@@ -1135,11 +1135,11 @@ int journal_dirty_metadata(handle_t *handle, struct buffer_head *bh) | |||
1135 | 1135 | ||
1136 | set_buffer_jbddirty(bh); | 1136 | set_buffer_jbddirty(bh); |
1137 | 1137 | ||
1138 | /* | 1138 | /* |
1139 | * Metadata already on the current transaction list doesn't | 1139 | * Metadata already on the current transaction list doesn't |
1140 | * need to be filed. Metadata on another transaction's list must | 1140 | * need to be filed. Metadata on another transaction's list must |
1141 | * be committing, and will be refiled once the commit completes: | 1141 | * be committing, and will be refiled once the commit completes: |
1142 | * leave it alone for now. | 1142 | * leave it alone for now. |
1143 | */ | 1143 | */ |
1144 | if (jh->b_transaction != transaction) { | 1144 | if (jh->b_transaction != transaction) { |
1145 | JBUFFER_TRACE(jh, "already on other transaction"); | 1145 | JBUFFER_TRACE(jh, "already on other transaction"); |
@@ -1165,7 +1165,7 @@ out: | |||
1165 | return 0; | 1165 | return 0; |
1166 | } | 1166 | } |
1167 | 1167 | ||
1168 | /* | 1168 | /* |
1169 | * journal_release_buffer: undo a get_write_access without any buffer | 1169 | * journal_release_buffer: undo a get_write_access without any buffer |
1170 | * updates, if the update decided in the end that it didn't need access. | 1170 | * updates, if the update decided in the end that it didn't need access. |
1171 | * | 1171 | * |
@@ -1176,20 +1176,20 @@ journal_release_buffer(handle_t *handle, struct buffer_head *bh) | |||
1176 | BUFFER_TRACE(bh, "entry"); | 1176 | BUFFER_TRACE(bh, "entry"); |
1177 | } | 1177 | } |
1178 | 1178 | ||
1179 | /** | 1179 | /** |
1180 | * void journal_forget() - bforget() for potentially-journaled buffers. | 1180 | * void journal_forget() - bforget() for potentially-journaled buffers. |
1181 | * @handle: transaction handle | 1181 | * @handle: transaction handle |
1182 | * @bh: bh to 'forget' | 1182 | * @bh: bh to 'forget' |
1183 | * | 1183 | * |
1184 | * We can only do the bforget if there are no commits pending against the | 1184 | * We can only do the bforget if there are no commits pending against the |
1185 | * buffer. If the buffer is dirty in the current running transaction we | 1185 | * buffer. If the buffer is dirty in the current running transaction we |
1186 | * can safely unlink it. | 1186 | * can safely unlink it. |
1187 | * | 1187 | * |
1188 | * bh may not be a journalled buffer at all - it may be a non-JBD | 1188 | * bh may not be a journalled buffer at all - it may be a non-JBD |
1189 | * buffer which came off the hashtable. Check for this. | 1189 | * buffer which came off the hashtable. Check for this. |
1190 | * | 1190 | * |
1191 | * Decrements bh->b_count by one. | 1191 | * Decrements bh->b_count by one. |
1192 | * | 1192 | * |
1193 | * Allow this call even if the handle has aborted --- it may be part of | 1193 | * Allow this call even if the handle has aborted --- it may be part of |
1194 | * the caller's cleanup after an abort. | 1194 | * the caller's cleanup after an abort. |
1195 | */ | 1195 | */ |
@@ -1237,7 +1237,7 @@ int journal_forget (handle_t *handle, struct buffer_head *bh) | |||
1237 | 1237 | ||
1238 | drop_reserve = 1; | 1238 | drop_reserve = 1; |
1239 | 1239 | ||
1240 | /* | 1240 | /* |
1241 | * We are no longer going to journal this buffer. | 1241 | * We are no longer going to journal this buffer. |
1242 | * However, the commit of this transaction is still | 1242 | * However, the commit of this transaction is still |
1243 | * important to the buffer: the delete that we are now | 1243 | * important to the buffer: the delete that we are now |
@@ -1246,7 +1246,7 @@ int journal_forget (handle_t *handle, struct buffer_head *bh) | |||
1246 | * | 1246 | * |
1247 | * So, if we have a checkpoint on the buffer, we should | 1247 | * So, if we have a checkpoint on the buffer, we should |
1248 | * now refile the buffer on our BJ_Forget list so that | 1248 | * now refile the buffer on our BJ_Forget list so that |
1249 | * we know to remove the checkpoint after we commit. | 1249 | * we know to remove the checkpoint after we commit. |
1250 | */ | 1250 | */ |
1251 | 1251 | ||
1252 | if (jh->b_cp_transaction) { | 1252 | if (jh->b_cp_transaction) { |
@@ -1264,7 +1264,7 @@ int journal_forget (handle_t *handle, struct buffer_head *bh) | |||
1264 | } | 1264 | } |
1265 | } | 1265 | } |
1266 | } else if (jh->b_transaction) { | 1266 | } else if (jh->b_transaction) { |
1267 | J_ASSERT_JH(jh, (jh->b_transaction == | 1267 | J_ASSERT_JH(jh, (jh->b_transaction == |
1268 | journal->j_committing_transaction)); | 1268 | journal->j_committing_transaction)); |
1269 | /* However, if the buffer is still owned by a prior | 1269 | /* However, if the buffer is still owned by a prior |
1270 | * (committing) transaction, we can't drop it yet... */ | 1270 | * (committing) transaction, we can't drop it yet... */ |
@@ -1294,7 +1294,7 @@ drop: | |||
1294 | /** | 1294 | /** |
1295 | * int journal_stop() - complete a transaction | 1295 | * int journal_stop() - complete a transaction |
1296 | * @handle: tranaction to complete. | 1296 | * @handle: tranaction to complete. |
1297 | * | 1297 | * |
1298 | * All done for a particular handle. | 1298 | * All done for a particular handle. |
1299 | * | 1299 | * |
1300 | * There is not much action needed here. We just return any remaining | 1300 | * There is not much action needed here. We just return any remaining |
@@ -1303,7 +1303,7 @@ drop: | |||
1303 | * filesystem is marked for synchronous update. | 1303 | * filesystem is marked for synchronous update. |
1304 | * | 1304 | * |
1305 | * journal_stop itself will not usually return an error, but it may | 1305 | * journal_stop itself will not usually return an error, but it may |
1306 | * do so in unusual circumstances. In particular, expect it to | 1306 | * do so in unusual circumstances. In particular, expect it to |
1307 | * return -EIO if a journal_abort has been executed since the | 1307 | * return -EIO if a journal_abort has been executed since the |
1308 | * transaction began. | 1308 | * transaction began. |
1309 | */ | 1309 | */ |
@@ -1373,7 +1373,7 @@ int journal_stop(handle_t *handle) | |||
1373 | if (handle->h_sync || | 1373 | if (handle->h_sync || |
1374 | transaction->t_outstanding_credits > | 1374 | transaction->t_outstanding_credits > |
1375 | journal->j_max_transaction_buffers || | 1375 | journal->j_max_transaction_buffers || |
1376 | time_after_eq(jiffies, transaction->t_expires)) { | 1376 | time_after_eq(jiffies, transaction->t_expires)) { |
1377 | /* Do this even for aborted journals: an abort still | 1377 | /* Do this even for aborted journals: an abort still |
1378 | * completes the commit thread, it just doesn't write | 1378 | * completes the commit thread, it just doesn't write |
1379 | * anything to disk. */ | 1379 | * anything to disk. */ |
@@ -1388,7 +1388,7 @@ int journal_stop(handle_t *handle) | |||
1388 | 1388 | ||
1389 | /* | 1389 | /* |
1390 | * Special case: JFS_SYNC synchronous updates require us | 1390 | * Special case: JFS_SYNC synchronous updates require us |
1391 | * to wait for the commit to complete. | 1391 | * to wait for the commit to complete. |
1392 | */ | 1392 | */ |
1393 | if (handle->h_sync && !(current->flags & PF_MEMALLOC)) | 1393 | if (handle->h_sync && !(current->flags & PF_MEMALLOC)) |
1394 | err = log_wait_commit(journal, tid); | 1394 | err = log_wait_commit(journal, tid); |
@@ -1439,7 +1439,7 @@ int journal_force_commit(journal_t *journal) | |||
1439 | * jbd_lock_bh_state(jh2bh(jh)) is held. | 1439 | * jbd_lock_bh_state(jh2bh(jh)) is held. |
1440 | */ | 1440 | */ |
1441 | 1441 | ||
1442 | static inline void | 1442 | static inline void |
1443 | __blist_add_buffer(struct journal_head **list, struct journal_head *jh) | 1443 | __blist_add_buffer(struct journal_head **list, struct journal_head *jh) |
1444 | { | 1444 | { |
1445 | if (!*list) { | 1445 | if (!*list) { |
@@ -1454,7 +1454,7 @@ __blist_add_buffer(struct journal_head **list, struct journal_head *jh) | |||
1454 | } | 1454 | } |
1455 | } | 1455 | } |
1456 | 1456 | ||
1457 | /* | 1457 | /* |
1458 | * Remove a buffer from a transaction list, given the transaction's list | 1458 | * Remove a buffer from a transaction list, given the transaction's list |
1459 | * head pointer. | 1459 | * head pointer. |
1460 | * | 1460 | * |
@@ -1475,7 +1475,7 @@ __blist_del_buffer(struct journal_head **list, struct journal_head *jh) | |||
1475 | jh->b_tnext->b_tprev = jh->b_tprev; | 1475 | jh->b_tnext->b_tprev = jh->b_tprev; |
1476 | } | 1476 | } |
1477 | 1477 | ||
1478 | /* | 1478 | /* |
1479 | * Remove a buffer from the appropriate transaction list. | 1479 | * Remove a buffer from the appropriate transaction list. |
1480 | * | 1480 | * |
1481 | * Note that this function can *change* the value of | 1481 | * Note that this function can *change* the value of |
@@ -1595,17 +1595,17 @@ out: | |||
1595 | } | 1595 | } |
1596 | 1596 | ||
1597 | 1597 | ||
1598 | /** | 1598 | /** |
1599 | * int journal_try_to_free_buffers() - try to free page buffers. | 1599 | * int journal_try_to_free_buffers() - try to free page buffers. |
1600 | * @journal: journal for operation | 1600 | * @journal: journal for operation |
1601 | * @page: to try and free | 1601 | * @page: to try and free |
1602 | * @unused_gfp_mask: unused | 1602 | * @unused_gfp_mask: unused |
1603 | * | 1603 | * |
1604 | * | 1604 | * |
1605 | * For all the buffers on this page, | 1605 | * For all the buffers on this page, |
1606 | * if they are fully written out ordered data, move them onto BUF_CLEAN | 1606 | * if they are fully written out ordered data, move them onto BUF_CLEAN |
1607 | * so try_to_free_buffers() can reap them. | 1607 | * so try_to_free_buffers() can reap them. |
1608 | * | 1608 | * |
1609 | * This function returns non-zero if we wish try_to_free_buffers() | 1609 | * This function returns non-zero if we wish try_to_free_buffers() |
1610 | * to be called. We do this if the page is releasable by try_to_free_buffers(). | 1610 | * to be called. We do this if the page is releasable by try_to_free_buffers(). |
1611 | * We also do it if the page has locked or dirty buffers and the caller wants | 1611 | * We also do it if the page has locked or dirty buffers and the caller wants |
@@ -1629,7 +1629,7 @@ out: | |||
1629 | * cannot happen because we never reallocate freed data as metadata | 1629 | * cannot happen because we never reallocate freed data as metadata |
1630 | * while the data is part of a transaction. Yes? | 1630 | * while the data is part of a transaction. Yes? |
1631 | */ | 1631 | */ |
1632 | int journal_try_to_free_buffers(journal_t *journal, | 1632 | int journal_try_to_free_buffers(journal_t *journal, |
1633 | struct page *page, gfp_t unused_gfp_mask) | 1633 | struct page *page, gfp_t unused_gfp_mask) |
1634 | { | 1634 | { |
1635 | struct buffer_head *head; | 1635 | struct buffer_head *head; |
@@ -1697,7 +1697,7 @@ static int __dispose_buffer(struct journal_head *jh, transaction_t *transaction) | |||
1697 | } | 1697 | } |
1698 | 1698 | ||
1699 | /* | 1699 | /* |
1700 | * journal_invalidatepage | 1700 | * journal_invalidatepage |
1701 | * | 1701 | * |
1702 | * This code is tricky. It has a number of cases to deal with. | 1702 | * This code is tricky. It has a number of cases to deal with. |
1703 | * | 1703 | * |
@@ -1705,15 +1705,15 @@ static int __dispose_buffer(struct journal_head *jh, transaction_t *transaction) | |||
1705 | * | 1705 | * |
1706 | * i_size must be updated on disk before we start calling invalidatepage on the | 1706 | * i_size must be updated on disk before we start calling invalidatepage on the |
1707 | * data. | 1707 | * data. |
1708 | * | 1708 | * |
1709 | * This is done in ext3 by defining an ext3_setattr method which | 1709 | * This is done in ext3 by defining an ext3_setattr method which |
1710 | * updates i_size before truncate gets going. By maintaining this | 1710 | * updates i_size before truncate gets going. By maintaining this |
1711 | * invariant, we can be sure that it is safe to throw away any buffers | 1711 | * invariant, we can be sure that it is safe to throw away any buffers |
1712 | * attached to the current transaction: once the transaction commits, | 1712 | * attached to the current transaction: once the transaction commits, |
1713 | * we know that the data will not be needed. | 1713 | * we know that the data will not be needed. |
1714 | * | 1714 | * |
1715 | * Note however that we can *not* throw away data belonging to the | 1715 | * Note however that we can *not* throw away data belonging to the |
1716 | * previous, committing transaction! | 1716 | * previous, committing transaction! |
1717 | * | 1717 | * |
1718 | * Any disk blocks which *are* part of the previous, committing | 1718 | * Any disk blocks which *are* part of the previous, committing |
1719 | * transaction (and which therefore cannot be discarded immediately) are | 1719 | * transaction (and which therefore cannot be discarded immediately) are |
@@ -1732,7 +1732,7 @@ static int __dispose_buffer(struct journal_head *jh, transaction_t *transaction) | |||
1732 | * don't make guarantees about the order in which data hits disk --- in | 1732 | * don't make guarantees about the order in which data hits disk --- in |
1733 | * particular we don't guarantee that new dirty data is flushed before | 1733 | * particular we don't guarantee that new dirty data is flushed before |
1734 | * transaction commit --- so it is always safe just to discard data | 1734 | * transaction commit --- so it is always safe just to discard data |
1735 | * immediately in that mode. --sct | 1735 | * immediately in that mode. --sct |
1736 | */ | 1736 | */ |
1737 | 1737 | ||
1738 | /* | 1738 | /* |
@@ -1876,9 +1876,9 @@ zap_buffer_unlocked: | |||
1876 | return may_free; | 1876 | return may_free; |
1877 | } | 1877 | } |
1878 | 1878 | ||
1879 | /** | 1879 | /** |
1880 | * void journal_invalidatepage() | 1880 | * void journal_invalidatepage() |
1881 | * @journal: journal to use for flush... | 1881 | * @journal: journal to use for flush... |
1882 | * @page: page to flush | 1882 | * @page: page to flush |
1883 | * @offset: length of page to invalidate. | 1883 | * @offset: length of page to invalidate. |
1884 | * | 1884 | * |
@@ -1886,7 +1886,7 @@ zap_buffer_unlocked: | |||
1886 | * | 1886 | * |
1887 | */ | 1887 | */ |
1888 | void journal_invalidatepage(journal_t *journal, | 1888 | void journal_invalidatepage(journal_t *journal, |
1889 | struct page *page, | 1889 | struct page *page, |
1890 | unsigned long offset) | 1890 | unsigned long offset) |
1891 | { | 1891 | { |
1892 | struct buffer_head *head, *bh, *next; | 1892 | struct buffer_head *head, *bh, *next; |
@@ -1908,7 +1908,7 @@ void journal_invalidatepage(journal_t *journal, | |||
1908 | next = bh->b_this_page; | 1908 | next = bh->b_this_page; |
1909 | 1909 | ||
1910 | if (offset <= curr_off) { | 1910 | if (offset <= curr_off) { |
1911 | /* This block is wholly outside the truncation point */ | 1911 | /* This block is wholly outside the truncation point */ |
1912 | lock_buffer(bh); | 1912 | lock_buffer(bh); |
1913 | may_free &= journal_unmap_buffer(journal, bh); | 1913 | may_free &= journal_unmap_buffer(journal, bh); |
1914 | unlock_buffer(bh); | 1914 | unlock_buffer(bh); |
@@ -1924,8 +1924,8 @@ void journal_invalidatepage(journal_t *journal, | |||
1924 | } | 1924 | } |
1925 | } | 1925 | } |
1926 | 1926 | ||
1927 | /* | 1927 | /* |
1928 | * File a buffer on the given transaction list. | 1928 | * File a buffer on the given transaction list. |
1929 | */ | 1929 | */ |
1930 | void __journal_file_buffer(struct journal_head *jh, | 1930 | void __journal_file_buffer(struct journal_head *jh, |
1931 | transaction_t *transaction, int jlist) | 1931 | transaction_t *transaction, int jlist) |
@@ -1948,7 +1948,7 @@ void __journal_file_buffer(struct journal_head *jh, | |||
1948 | * with __jbd_unexpected_dirty_buffer()'s handling of dirty | 1948 | * with __jbd_unexpected_dirty_buffer()'s handling of dirty |
1949 | * state. */ | 1949 | * state. */ |
1950 | 1950 | ||
1951 | if (jlist == BJ_Metadata || jlist == BJ_Reserved || | 1951 | if (jlist == BJ_Metadata || jlist == BJ_Reserved || |
1952 | jlist == BJ_Shadow || jlist == BJ_Forget) { | 1952 | jlist == BJ_Shadow || jlist == BJ_Forget) { |
1953 | if (test_clear_buffer_dirty(bh) || | 1953 | if (test_clear_buffer_dirty(bh) || |
1954 | test_clear_buffer_jbddirty(bh)) | 1954 | test_clear_buffer_jbddirty(bh)) |
@@ -2008,7 +2008,7 @@ void journal_file_buffer(struct journal_head *jh, | |||
2008 | jbd_unlock_bh_state(jh2bh(jh)); | 2008 | jbd_unlock_bh_state(jh2bh(jh)); |
2009 | } | 2009 | } |
2010 | 2010 | ||
2011 | /* | 2011 | /* |
2012 | * Remove a buffer from its current buffer list in preparation for | 2012 | * Remove a buffer from its current buffer list in preparation for |
2013 | * dropping it from its current transaction entirely. If the buffer has | 2013 | * dropping it from its current transaction entirely. If the buffer has |
2014 | * already started to be used by a subsequent transaction, refile the | 2014 | * already started to be used by a subsequent transaction, refile the |
@@ -2060,7 +2060,7 @@ void __journal_refile_buffer(struct journal_head *jh) | |||
2060 | * to the caller to remove the journal_head if necessary. For the | 2060 | * to the caller to remove the journal_head if necessary. For the |
2061 | * unlocked journal_refile_buffer call, the caller isn't going to be | 2061 | * unlocked journal_refile_buffer call, the caller isn't going to be |
2062 | * doing anything else to the buffer so we need to do the cleanup | 2062 | * doing anything else to the buffer so we need to do the cleanup |
2063 | * ourselves to avoid a jh leak. | 2063 | * ourselves to avoid a jh leak. |
2064 | * | 2064 | * |
2065 | * *** The journal_head may be freed by this call! *** | 2065 | * *** The journal_head may be freed by this call! *** |
2066 | */ | 2066 | */ |