Lines Matching refs:journal
83 jbd2_get_transaction(journal_t *journal, transaction_t *transaction) in jbd2_get_transaction() argument
85 transaction->t_journal = journal; in jbd2_get_transaction()
88 transaction->t_tid = journal->j_transaction_sequence++; in jbd2_get_transaction()
89 transaction->t_expires = jiffies + journal->j_commit_interval; in jbd2_get_transaction()
93 atomic_read(&journal->j_reserved_credits)); in jbd2_get_transaction()
99 journal->j_commit_timer.expires = round_jiffies_up(transaction->t_expires); in jbd2_get_transaction()
100 add_timer(&journal->j_commit_timer); in jbd2_get_transaction()
102 J_ASSERT(journal->j_running_transaction == NULL); in jbd2_get_transaction()
103 journal->j_running_transaction = transaction; in jbd2_get_transaction()
149 static void wait_transaction_locked(journal_t *journal) in wait_transaction_locked() argument
150 __releases(journal->j_state_lock) in wait_transaction_locked()
154 tid_t tid = journal->j_running_transaction->t_tid; in wait_transaction_locked()
156 prepare_to_wait(&journal->j_wait_transaction_locked, &wait, in wait_transaction_locked()
158 need_to_start = !tid_geq(journal->j_commit_request, tid); in wait_transaction_locked()
159 read_unlock(&journal->j_state_lock); in wait_transaction_locked()
161 jbd2_log_start_commit(journal, tid); in wait_transaction_locked()
163 finish_wait(&journal->j_wait_transaction_locked, &wait); in wait_transaction_locked()
166 static void sub_reserved_credits(journal_t *journal, int blocks) in sub_reserved_credits() argument
168 atomic_sub(blocks, &journal->j_reserved_credits); in sub_reserved_credits()
169 wake_up(&journal->j_wait_reserved); in sub_reserved_credits()
178 static int add_transaction_credits(journal_t *journal, int blocks, in add_transaction_credits() argument
181 transaction_t *t = journal->j_running_transaction; in add_transaction_credits()
190 wait_transaction_locked(journal); in add_transaction_credits()
200 if (needed > journal->j_max_transaction_buffers) { in add_transaction_credits()
207 wait_transaction_locked(journal); in add_transaction_credits()
222 if (jbd2_log_space_left(journal) < jbd2_space_needed(journal)) { in add_transaction_credits()
224 read_unlock(&journal->j_state_lock); in add_transaction_credits()
225 write_lock(&journal->j_state_lock); in add_transaction_credits()
226 if (jbd2_log_space_left(journal) < jbd2_space_needed(journal)) in add_transaction_credits()
227 __jbd2_log_wait_for_space(journal); in add_transaction_credits()
228 write_unlock(&journal->j_state_lock); in add_transaction_credits()
236 needed = atomic_add_return(rsv_blocks, &journal->j_reserved_credits); in add_transaction_credits()
238 if (needed > journal->j_max_transaction_buffers / 2) { in add_transaction_credits()
239 sub_reserved_credits(journal, rsv_blocks); in add_transaction_credits()
241 read_unlock(&journal->j_state_lock); in add_transaction_credits()
242 wait_event(journal->j_wait_reserved, in add_transaction_credits()
243 atomic_read(&journal->j_reserved_credits) + rsv_blocks in add_transaction_credits()
244 <= journal->j_max_transaction_buffers / 2); in add_transaction_credits()
257 static int start_this_handle(journal_t *journal, handle_t *handle, in start_this_handle() argument
269 if (WARN_ON(blocks > journal->j_max_transaction_buffers / 2)) { in start_this_handle()
272 journal->j_max_transaction_buffers / 2); in start_this_handle()
280 if (!journal->j_running_transaction) { in start_this_handle()
306 read_lock(&journal->j_state_lock); in start_this_handle()
307 BUG_ON(journal->j_flags & JBD2_UNMOUNT); in start_this_handle()
308 if (is_journal_aborted(journal) || in start_this_handle()
309 (journal->j_errno != 0 && !(journal->j_flags & JBD2_ACK_ERR))) { in start_this_handle()
310 read_unlock(&journal->j_state_lock); in start_this_handle()
320 if (!handle->h_reserved && journal->j_barrier_count) { in start_this_handle()
321 read_unlock(&journal->j_state_lock); in start_this_handle()
322 wait_event(journal->j_wait_transaction_locked, in start_this_handle()
323 journal->j_barrier_count == 0); in start_this_handle()
327 if (!journal->j_running_transaction) { in start_this_handle()
328 read_unlock(&journal->j_state_lock); in start_this_handle()
331 write_lock(&journal->j_state_lock); in start_this_handle()
332 if (!journal->j_running_transaction && in start_this_handle()
333 (handle->h_reserved || !journal->j_barrier_count)) { in start_this_handle()
334 jbd2_get_transaction(journal, new_transaction); in start_this_handle()
337 write_unlock(&journal->j_state_lock); in start_this_handle()
341 transaction = journal->j_running_transaction; in start_this_handle()
345 if (add_transaction_credits(journal, blocks, rsv_blocks)) in start_this_handle()
353 sub_reserved_credits(journal, blocks); in start_this_handle()
369 jbd2_log_space_left(journal)); in start_this_handle()
370 read_unlock(&journal->j_state_lock); in start_this_handle()
414 handle_t *jbd2__journal_start(journal_t *journal, int nblocks, int rsv_blocks, in jbd2__journal_start() argument
421 if (!journal) in jbd2__journal_start()
425 J_ASSERT(handle->h_transaction->t_journal == journal); in jbd2__journal_start()
442 rsv_handle->h_journal = journal; in jbd2__journal_start()
446 err = start_this_handle(journal, handle, gfp_mask); in jbd2__journal_start()
455 trace_jbd2_handle_start(journal->j_fs_dev->bd_dev, in jbd2__journal_start()
463 handle_t *jbd2_journal_start(journal_t *journal, int nblocks) in jbd2_journal_start() argument
465 return jbd2__journal_start(journal, nblocks, 0, GFP_NOFS, 0, 0); in jbd2_journal_start()
471 journal_t *journal = handle->h_journal; in jbd2_journal_free_reserved() local
474 sub_reserved_credits(journal, handle->h_buffer_credits); in jbd2_journal_free_reserved()
494 journal_t *journal = handle->h_journal; in jbd2_journal_start_reserved() local
516 ret = start_this_handle(journal, handle, GFP_NOFS); in jbd2_journal_start_reserved()
550 journal_t *journal; in jbd2_journal_extend() local
557 journal = transaction->t_journal; in jbd2_journal_extend()
561 read_lock(&journal->j_state_lock); in jbd2_journal_extend()
574 if (wanted > journal->j_max_transaction_buffers) { in jbd2_journal_extend()
582 jbd2_log_space_left(journal)) { in jbd2_journal_extend()
589 trace_jbd2_handle_extend(journal->j_fs_dev->bd_dev, in jbd2_journal_extend()
603 read_unlock(&journal->j_state_lock); in jbd2_journal_extend()
626 journal_t *journal; in jbd2__journal_restart() local
635 journal = transaction->t_journal; in jbd2__journal_restart()
644 read_lock(&journal->j_state_lock); in jbd2__journal_restart()
649 sub_reserved_credits(journal, in jbd2__journal_restart()
653 wake_up(&journal->j_wait_updates); in jbd2__journal_restart()
660 need_to_start = !tid_geq(journal->j_commit_request, tid); in jbd2__journal_restart()
661 read_unlock(&journal->j_state_lock); in jbd2__journal_restart()
663 jbd2_log_start_commit(journal, tid); in jbd2__journal_restart()
667 ret = start_this_handle(journal, handle, gfp_mask); in jbd2__journal_restart()
689 void jbd2_journal_lock_updates(journal_t *journal) in jbd2_journal_lock_updates() argument
693 write_lock(&journal->j_state_lock); in jbd2_journal_lock_updates()
694 ++journal->j_barrier_count; in jbd2_journal_lock_updates()
697 if (atomic_read(&journal->j_reserved_credits)) { in jbd2_journal_lock_updates()
698 write_unlock(&journal->j_state_lock); in jbd2_journal_lock_updates()
699 wait_event(journal->j_wait_reserved, in jbd2_journal_lock_updates()
700 atomic_read(&journal->j_reserved_credits) == 0); in jbd2_journal_lock_updates()
701 write_lock(&journal->j_state_lock); in jbd2_journal_lock_updates()
706 transaction_t *transaction = journal->j_running_transaction; in jbd2_journal_lock_updates()
712 prepare_to_wait(&journal->j_wait_updates, &wait, in jbd2_journal_lock_updates()
716 finish_wait(&journal->j_wait_updates, &wait); in jbd2_journal_lock_updates()
720 write_unlock(&journal->j_state_lock); in jbd2_journal_lock_updates()
722 finish_wait(&journal->j_wait_updates, &wait); in jbd2_journal_lock_updates()
723 write_lock(&journal->j_state_lock); in jbd2_journal_lock_updates()
725 write_unlock(&journal->j_state_lock); in jbd2_journal_lock_updates()
733 mutex_lock(&journal->j_barrier); in jbd2_journal_lock_updates()
744 void jbd2_journal_unlock_updates (journal_t *journal) in jbd2_journal_unlock_updates() argument
746 J_ASSERT(journal->j_barrier_count != 0); in jbd2_journal_unlock_updates()
748 mutex_unlock(&journal->j_barrier); in jbd2_journal_unlock_updates()
749 write_lock(&journal->j_state_lock); in jbd2_journal_unlock_updates()
750 --journal->j_barrier_count; in jbd2_journal_unlock_updates()
751 write_unlock(&journal->j_state_lock); in jbd2_journal_unlock_updates()
752 wake_up(&journal->j_wait_transaction_locked); in jbd2_journal_unlock_updates()
782 journal_t *journal; in do_get_write_access() local
791 journal = transaction->t_journal; in do_get_write_access()
833 journal->j_committing_transaction); in do_get_write_access()
889 journal->j_committing_transaction); in do_get_write_access()
958 spin_lock(&journal->j_list_lock); in do_get_write_access()
960 spin_unlock(&journal->j_list_lock); in do_get_write_access()
1049 journal_t *journal; in jbd2_journal_get_create_access() local
1058 journal = transaction->t_journal; in jbd2_journal_get_create_access()
1072 (jh->b_transaction == journal->j_committing_transaction && in jbd2_journal_get_create_access()
1092 spin_lock(&journal->j_list_lock); in jbd2_journal_get_create_access()
1094 } else if (jh->b_transaction == journal->j_committing_transaction) { in jbd2_journal_get_create_access()
1099 spin_lock(&journal->j_list_lock); in jbd2_journal_get_create_access()
1102 spin_unlock(&journal->j_list_lock); in jbd2_journal_get_create_access()
1265 journal_t *journal; in jbd2_journal_dirty_metadata() local
1272 journal = transaction->t_journal; in jbd2_journal_dirty_metadata()
1307 journal->j_running_transaction)) { in jbd2_journal_dirty_metadata()
1311 journal->j_devname, in jbd2_journal_dirty_metadata()
1315 journal->j_running_transaction, in jbd2_journal_dirty_metadata()
1316 journal->j_running_transaction ? in jbd2_journal_dirty_metadata()
1317 journal->j_running_transaction->t_tid : 0); in jbd2_journal_dirty_metadata()
1334 journal->j_committing_transaction)) || in jbd2_journal_dirty_metadata()
1341 journal->j_devname, in jbd2_journal_dirty_metadata()
1363 spin_lock(&journal->j_list_lock); in jbd2_journal_dirty_metadata()
1365 spin_unlock(&journal->j_list_lock); in jbd2_journal_dirty_metadata()
1394 journal_t *journal; in jbd2_journal_forget() local
1403 journal = transaction->t_journal; in jbd2_journal_forget()
1460 spin_lock(&journal->j_list_lock); in jbd2_journal_forget()
1467 spin_unlock(&journal->j_list_lock); in jbd2_journal_forget()
1473 spin_unlock(&journal->j_list_lock); in jbd2_journal_forget()
1476 journal->j_committing_transaction)); in jbd2_journal_forget()
1485 spin_lock(&journal->j_list_lock); in jbd2_journal_forget()
1487 spin_unlock(&journal->j_list_lock); in jbd2_journal_forget()
1528 journal_t *journal; in jbd2_journal_stop() local
1535 journal = transaction->t_journal; in jbd2_journal_stop()
1551 trace_jbd2_handle_stats(journal->j_fs_dev->bd_dev, in jbd2_journal_stop()
1589 if (handle->h_sync && journal->j_last_sync_writer != pid && in jbd2_journal_stop()
1590 journal->j_max_batch_time) { in jbd2_journal_stop()
1593 journal->j_last_sync_writer = pid; in jbd2_journal_stop()
1595 read_lock(&journal->j_state_lock); in jbd2_journal_stop()
1596 commit_time = journal->j_average_commit_time; in jbd2_journal_stop()
1597 read_unlock(&journal->j_state_lock); in jbd2_journal_stop()
1603 1000*journal->j_min_batch_time); in jbd2_journal_stop()
1605 1000*journal->j_max_batch_time); in jbd2_journal_stop()
1629 journal->j_max_transaction_buffers) || in jbd2_journal_stop()
1638 jbd2_log_start_commit(journal, transaction->t_tid); in jbd2_journal_stop()
1656 wake_up(&journal->j_wait_updates); in jbd2_journal_stop()
1657 if (journal->j_barrier_count) in jbd2_journal_stop()
1658 wake_up(&journal->j_wait_transaction_locked); in jbd2_journal_stop()
1662 err = jbd2_log_wait_commit(journal, tid); in jbd2_journal_stop()
1790 void jbd2_journal_unfile_buffer(journal_t *journal, struct journal_head *jh) in jbd2_journal_unfile_buffer() argument
1797 spin_lock(&journal->j_list_lock); in jbd2_journal_unfile_buffer()
1799 spin_unlock(&journal->j_list_lock); in jbd2_journal_unfile_buffer()
1810 __journal_try_to_free_buffer(journal_t *journal, struct buffer_head *bh) in __journal_try_to_free_buffer() argument
1822 spin_lock(&journal->j_list_lock); in __journal_try_to_free_buffer()
1828 spin_unlock(&journal->j_list_lock); in __journal_try_to_free_buffer()
1871 int jbd2_journal_try_to_free_buffers(journal_t *journal, in jbd2_journal_try_to_free_buffers() argument
1895 __journal_try_to_free_buffer(journal, bh); in jbd2_journal_try_to_free_buffers()
1990 static int journal_unmap_buffer(journal_t *journal, struct buffer_head *bh, in journal_unmap_buffer() argument
2009 write_lock(&journal->j_state_lock); in journal_unmap_buffer()
2011 spin_lock(&journal->j_list_lock); in journal_unmap_buffer()
2060 if (journal->j_running_transaction) { in journal_unmap_buffer()
2066 journal->j_running_transaction); in journal_unmap_buffer()
2073 if (journal->j_committing_transaction) { in journal_unmap_buffer()
2076 journal->j_committing_transaction); in journal_unmap_buffer()
2085 } else if (transaction == journal->j_committing_transaction) { in journal_unmap_buffer()
2094 spin_unlock(&journal->j_list_lock); in journal_unmap_buffer()
2096 write_unlock(&journal->j_state_lock); in journal_unmap_buffer()
2106 if (journal->j_running_transaction && buffer_jbddirty(bh)) in journal_unmap_buffer()
2107 jh->b_next_transaction = journal->j_running_transaction; in journal_unmap_buffer()
2109 spin_unlock(&journal->j_list_lock); in journal_unmap_buffer()
2111 write_unlock(&journal->j_state_lock); in journal_unmap_buffer()
2120 J_ASSERT_JH(jh, transaction == journal->j_running_transaction); in journal_unmap_buffer()
2137 spin_unlock(&journal->j_list_lock); in journal_unmap_buffer()
2139 write_unlock(&journal->j_state_lock); in journal_unmap_buffer()
2164 int jbd2_journal_invalidatepage(journal_t *journal, in jbd2_journal_invalidatepage() argument
2198 ret = journal_unmap_buffer(journal, bh, partial_page); in jbd2_journal_invalidatepage()
2354 void jbd2_journal_refile_buffer(journal_t *journal, struct journal_head *jh) in jbd2_journal_refile_buffer() argument
2361 spin_lock(&journal->j_list_lock); in jbd2_journal_refile_buffer()
2364 spin_unlock(&journal->j_list_lock); in jbd2_journal_refile_buffer()
2374 journal_t *journal; in jbd2_journal_file_inode() local
2379 journal = transaction->t_journal; in jbd2_journal_file_inode()
2401 spin_lock(&journal->j_list_lock); in jbd2_journal_file_inode()
2419 journal->j_committing_transaction); in jbd2_journal_file_inode()
2428 spin_unlock(&journal->j_list_lock); in jbd2_journal_file_inode()
2453 int jbd2_journal_begin_ordered_truncate(journal_t *journal, in jbd2_journal_begin_ordered_truncate() argument
2466 read_lock(&journal->j_state_lock); in jbd2_journal_begin_ordered_truncate()
2467 commit_trans = journal->j_committing_transaction; in jbd2_journal_begin_ordered_truncate()
2468 read_unlock(&journal->j_state_lock); in jbd2_journal_begin_ordered_truncate()
2469 spin_lock(&journal->j_list_lock); in jbd2_journal_begin_ordered_truncate()
2471 spin_unlock(&journal->j_list_lock); in jbd2_journal_begin_ordered_truncate()
2476 jbd2_journal_abort(journal, ret); in jbd2_journal_begin_ordered_truncate()