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()
212 if (atomic_read(&journal->j_reserved_credits) + total > in add_transaction_credits()
213 journal->j_max_transaction_buffers) { in add_transaction_credits()
214 read_unlock(&journal->j_state_lock); in add_transaction_credits()
215 wait_event(journal->j_wait_reserved, in add_transaction_credits()
216 atomic_read(&journal->j_reserved_credits) + total <= in add_transaction_credits()
217 journal->j_max_transaction_buffers); in add_transaction_credits()
221 wait_transaction_locked(journal); in add_transaction_credits()
236 if (jbd2_log_space_left(journal) < jbd2_space_needed(journal)) { in add_transaction_credits()
238 read_unlock(&journal->j_state_lock); in add_transaction_credits()
239 write_lock(&journal->j_state_lock); in add_transaction_credits()
240 if (jbd2_log_space_left(journal) < jbd2_space_needed(journal)) in add_transaction_credits()
241 __jbd2_log_wait_for_space(journal); in add_transaction_credits()
242 write_unlock(&journal->j_state_lock); in add_transaction_credits()
250 needed = atomic_add_return(rsv_blocks, &journal->j_reserved_credits); in add_transaction_credits()
252 if (needed > journal->j_max_transaction_buffers / 2) { in add_transaction_credits()
253 sub_reserved_credits(journal, rsv_blocks); in add_transaction_credits()
255 read_unlock(&journal->j_state_lock); in add_transaction_credits()
256 wait_event(journal->j_wait_reserved, in add_transaction_credits()
257 atomic_read(&journal->j_reserved_credits) + rsv_blocks in add_transaction_credits()
258 <= journal->j_max_transaction_buffers / 2); in add_transaction_credits()
271 static int start_this_handle(journal_t *journal, handle_t *handle, in start_this_handle() argument
287 if ((rsv_blocks > journal->j_max_transaction_buffers / 2) || in start_this_handle()
288 (rsv_blocks + blocks > journal->j_max_transaction_buffers)) { in start_this_handle()
292 journal->j_max_transaction_buffers); in start_this_handle()
298 if (!journal->j_running_transaction) { in start_this_handle()
318 read_lock(&journal->j_state_lock); in start_this_handle()
319 BUG_ON(journal->j_flags & JBD2_UNMOUNT); in start_this_handle()
320 if (is_journal_aborted(journal) || in start_this_handle()
321 (journal->j_errno != 0 && !(journal->j_flags & JBD2_ACK_ERR))) { in start_this_handle()
322 read_unlock(&journal->j_state_lock); in start_this_handle()
332 if (!handle->h_reserved && journal->j_barrier_count) { in start_this_handle()
333 read_unlock(&journal->j_state_lock); in start_this_handle()
334 wait_event(journal->j_wait_transaction_locked, in start_this_handle()
335 journal->j_barrier_count == 0); in start_this_handle()
339 if (!journal->j_running_transaction) { in start_this_handle()
340 read_unlock(&journal->j_state_lock); in start_this_handle()
343 write_lock(&journal->j_state_lock); in start_this_handle()
344 if (!journal->j_running_transaction && in start_this_handle()
345 (handle->h_reserved || !journal->j_barrier_count)) { in start_this_handle()
346 jbd2_get_transaction(journal, new_transaction); in start_this_handle()
349 write_unlock(&journal->j_state_lock); in start_this_handle()
353 transaction = journal->j_running_transaction; in start_this_handle()
357 if (add_transaction_credits(journal, blocks, rsv_blocks)) in start_this_handle()
365 sub_reserved_credits(journal, blocks); in start_this_handle()
381 jbd2_log_space_left(journal)); in start_this_handle()
382 read_unlock(&journal->j_state_lock); in start_this_handle()
426 handle_t *jbd2__journal_start(journal_t *journal, int nblocks, int rsv_blocks, in jbd2__journal_start() argument
433 if (!journal) in jbd2__journal_start()
437 J_ASSERT(handle->h_transaction->t_journal == journal); in jbd2__journal_start()
454 rsv_handle->h_journal = journal; in jbd2__journal_start()
458 err = start_this_handle(journal, handle, gfp_mask); in jbd2__journal_start()
467 trace_jbd2_handle_start(journal->j_fs_dev->bd_dev, in jbd2__journal_start()
475 handle_t *jbd2_journal_start(journal_t *journal, int nblocks) in jbd2_journal_start() argument
477 return jbd2__journal_start(journal, nblocks, 0, GFP_NOFS, 0, 0); in jbd2_journal_start()
483 journal_t *journal = handle->h_journal; in jbd2_journal_free_reserved() local
486 sub_reserved_credits(journal, handle->h_buffer_credits); in jbd2_journal_free_reserved()
506 journal_t *journal = handle->h_journal; in jbd2_journal_start_reserved() local
528 ret = start_this_handle(journal, handle, GFP_NOFS); in jbd2_journal_start_reserved()
562 journal_t *journal; in jbd2_journal_extend() local
568 journal = transaction->t_journal; in jbd2_journal_extend()
572 read_lock(&journal->j_state_lock); in jbd2_journal_extend()
585 if (wanted > journal->j_max_transaction_buffers) { in jbd2_journal_extend()
593 jbd2_log_space_left(journal)) { in jbd2_journal_extend()
600 trace_jbd2_handle_extend(journal->j_fs_dev->bd_dev, in jbd2_journal_extend()
614 read_unlock(&journal->j_state_lock); in jbd2_journal_extend()
637 journal_t *journal; in jbd2__journal_restart() local
645 journal = transaction->t_journal; in jbd2__journal_restart()
654 read_lock(&journal->j_state_lock); in jbd2__journal_restart()
659 sub_reserved_credits(journal, in jbd2__journal_restart()
663 wake_up(&journal->j_wait_updates); in jbd2__journal_restart()
670 need_to_start = !tid_geq(journal->j_commit_request, tid); in jbd2__journal_restart()
671 read_unlock(&journal->j_state_lock); in jbd2__journal_restart()
673 jbd2_log_start_commit(journal, tid); in jbd2__journal_restart()
677 ret = start_this_handle(journal, handle, gfp_mask); in jbd2__journal_restart()
699 void jbd2_journal_lock_updates(journal_t *journal) in jbd2_journal_lock_updates() argument
703 write_lock(&journal->j_state_lock); in jbd2_journal_lock_updates()
704 ++journal->j_barrier_count; in jbd2_journal_lock_updates()
707 if (atomic_read(&journal->j_reserved_credits)) { in jbd2_journal_lock_updates()
708 write_unlock(&journal->j_state_lock); in jbd2_journal_lock_updates()
709 wait_event(journal->j_wait_reserved, in jbd2_journal_lock_updates()
710 atomic_read(&journal->j_reserved_credits) == 0); in jbd2_journal_lock_updates()
711 write_lock(&journal->j_state_lock); in jbd2_journal_lock_updates()
716 transaction_t *transaction = journal->j_running_transaction; in jbd2_journal_lock_updates()
722 prepare_to_wait(&journal->j_wait_updates, &wait, in jbd2_journal_lock_updates()
726 finish_wait(&journal->j_wait_updates, &wait); in jbd2_journal_lock_updates()
730 write_unlock(&journal->j_state_lock); in jbd2_journal_lock_updates()
732 finish_wait(&journal->j_wait_updates, &wait); in jbd2_journal_lock_updates()
733 write_lock(&journal->j_state_lock); in jbd2_journal_lock_updates()
735 write_unlock(&journal->j_state_lock); in jbd2_journal_lock_updates()
743 mutex_lock(&journal->j_barrier); in jbd2_journal_lock_updates()
754 void jbd2_journal_unlock_updates (journal_t *journal) in jbd2_journal_unlock_updates() argument
756 J_ASSERT(journal->j_barrier_count != 0); in jbd2_journal_unlock_updates()
758 mutex_unlock(&journal->j_barrier); in jbd2_journal_unlock_updates()
759 write_lock(&journal->j_state_lock); in jbd2_journal_unlock_updates()
760 --journal->j_barrier_count; in jbd2_journal_unlock_updates()
761 write_unlock(&journal->j_state_lock); in jbd2_journal_unlock_updates()
762 wake_up(&journal->j_wait_transaction_locked); in jbd2_journal_unlock_updates()
816 journal_t *journal; in do_get_write_access() local
823 journal = transaction->t_journal; in do_get_write_access()
865 journal->j_committing_transaction); in do_get_write_access()
919 spin_lock(&journal->j_list_lock); in do_get_write_access()
921 spin_unlock(&journal->j_list_lock); in do_get_write_access()
936 J_ASSERT_JH(jh, jh->b_transaction == journal->j_committing_transaction); in do_get_write_access()
1115 journal_t *journal; in jbd2_journal_get_create_access() local
1123 journal = transaction->t_journal; in jbd2_journal_get_create_access()
1137 (jh->b_transaction == journal->j_committing_transaction && in jbd2_journal_get_create_access()
1157 spin_lock(&journal->j_list_lock); in jbd2_journal_get_create_access()
1159 } else if (jh->b_transaction == journal->j_committing_transaction) { in jbd2_journal_get_create_access()
1164 spin_lock(&journal->j_list_lock); in jbd2_journal_get_create_access()
1167 spin_unlock(&journal->j_list_lock); in jbd2_journal_get_create_access()
1331 journal_t *journal; in jbd2_journal_dirty_metadata() local
1371 journal = transaction->t_journal; in jbd2_journal_dirty_metadata()
1401 journal->j_running_transaction)) { in jbd2_journal_dirty_metadata()
1405 journal->j_devname, in jbd2_journal_dirty_metadata()
1409 journal->j_running_transaction, in jbd2_journal_dirty_metadata()
1410 journal->j_running_transaction ? in jbd2_journal_dirty_metadata()
1411 journal->j_running_transaction->t_tid : 0); in jbd2_journal_dirty_metadata()
1428 journal->j_committing_transaction)) || in jbd2_journal_dirty_metadata()
1435 journal->j_devname, in jbd2_journal_dirty_metadata()
1457 spin_lock(&journal->j_list_lock); in jbd2_journal_dirty_metadata()
1459 spin_unlock(&journal->j_list_lock); in jbd2_journal_dirty_metadata()
1487 journal_t *journal; in jbd2_journal_forget() local
1495 journal = transaction->t_journal; in jbd2_journal_forget()
1552 spin_lock(&journal->j_list_lock); in jbd2_journal_forget()
1559 spin_unlock(&journal->j_list_lock); in jbd2_journal_forget()
1565 spin_unlock(&journal->j_list_lock); in jbd2_journal_forget()
1568 journal->j_committing_transaction)); in jbd2_journal_forget()
1577 spin_lock(&journal->j_list_lock); in jbd2_journal_forget()
1579 spin_unlock(&journal->j_list_lock); in jbd2_journal_forget()
1620 journal_t *journal; in jbd2_journal_stop() local
1641 journal = transaction->t_journal; in jbd2_journal_stop()
1657 trace_jbd2_handle_stats(journal->j_fs_dev->bd_dev, in jbd2_journal_stop()
1695 if (handle->h_sync && journal->j_last_sync_writer != pid && in jbd2_journal_stop()
1696 journal->j_max_batch_time) { in jbd2_journal_stop()
1699 journal->j_last_sync_writer = pid; in jbd2_journal_stop()
1701 read_lock(&journal->j_state_lock); in jbd2_journal_stop()
1702 commit_time = journal->j_average_commit_time; in jbd2_journal_stop()
1703 read_unlock(&journal->j_state_lock); in jbd2_journal_stop()
1709 1000*journal->j_min_batch_time); in jbd2_journal_stop()
1711 1000*journal->j_max_batch_time); in jbd2_journal_stop()
1735 journal->j_max_transaction_buffers) || in jbd2_journal_stop()
1744 jbd2_log_start_commit(journal, transaction->t_tid); in jbd2_journal_stop()
1762 wake_up(&journal->j_wait_updates); in jbd2_journal_stop()
1763 if (journal->j_barrier_count) in jbd2_journal_stop()
1764 wake_up(&journal->j_wait_transaction_locked); in jbd2_journal_stop()
1768 err = jbd2_log_wait_commit(journal, tid); in jbd2_journal_stop()
1896 void jbd2_journal_unfile_buffer(journal_t *journal, struct journal_head *jh) in jbd2_journal_unfile_buffer() argument
1903 spin_lock(&journal->j_list_lock); in jbd2_journal_unfile_buffer()
1905 spin_unlock(&journal->j_list_lock); in jbd2_journal_unfile_buffer()
1916 __journal_try_to_free_buffer(journal_t *journal, struct buffer_head *bh) in __journal_try_to_free_buffer() argument
1928 spin_lock(&journal->j_list_lock); in __journal_try_to_free_buffer()
1934 spin_unlock(&journal->j_list_lock); in __journal_try_to_free_buffer()
1977 int jbd2_journal_try_to_free_buffers(journal_t *journal, in jbd2_journal_try_to_free_buffers() argument
2001 __journal_try_to_free_buffer(journal, bh); in jbd2_journal_try_to_free_buffers()
2096 static int journal_unmap_buffer(journal_t *journal, struct buffer_head *bh, in journal_unmap_buffer() argument
2115 write_lock(&journal->j_state_lock); in journal_unmap_buffer()
2117 spin_lock(&journal->j_list_lock); in journal_unmap_buffer()
2167 if (journal->j_running_transaction) { in journal_unmap_buffer()
2173 journal->j_running_transaction); in journal_unmap_buffer()
2180 if (journal->j_committing_transaction) { in journal_unmap_buffer()
2183 journal->j_committing_transaction); in journal_unmap_buffer()
2193 } else if (transaction == journal->j_committing_transaction) { in journal_unmap_buffer()
2202 spin_unlock(&journal->j_list_lock); in journal_unmap_buffer()
2204 write_unlock(&journal->j_state_lock); in journal_unmap_buffer()
2214 if (journal->j_running_transaction && buffer_jbddirty(bh)) in journal_unmap_buffer()
2215 jh->b_next_transaction = journal->j_running_transaction; in journal_unmap_buffer()
2217 spin_unlock(&journal->j_list_lock); in journal_unmap_buffer()
2219 write_unlock(&journal->j_state_lock); in journal_unmap_buffer()
2228 J_ASSERT_JH(jh, transaction == journal->j_running_transaction); in journal_unmap_buffer()
2245 spin_unlock(&journal->j_list_lock); in journal_unmap_buffer()
2247 write_unlock(&journal->j_state_lock); in journal_unmap_buffer()
2272 int jbd2_journal_invalidatepage(journal_t *journal, in jbd2_journal_invalidatepage() argument
2306 ret = journal_unmap_buffer(journal, bh, partial_page); in jbd2_journal_invalidatepage()
2462 void jbd2_journal_refile_buffer(journal_t *journal, struct journal_head *jh) in jbd2_journal_refile_buffer() argument
2469 spin_lock(&journal->j_list_lock); in jbd2_journal_refile_buffer()
2472 spin_unlock(&journal->j_list_lock); in jbd2_journal_refile_buffer()
2482 journal_t *journal; in jbd2_journal_file_inode() local
2486 journal = transaction->t_journal; in jbd2_journal_file_inode()
2508 spin_lock(&journal->j_list_lock); in jbd2_journal_file_inode()
2526 journal->j_committing_transaction); in jbd2_journal_file_inode()
2535 spin_unlock(&journal->j_list_lock); in jbd2_journal_file_inode()
2560 int jbd2_journal_begin_ordered_truncate(journal_t *journal, in jbd2_journal_begin_ordered_truncate() argument
2573 read_lock(&journal->j_state_lock); in jbd2_journal_begin_ordered_truncate()
2574 commit_trans = journal->j_committing_transaction; in jbd2_journal_begin_ordered_truncate()
2575 read_unlock(&journal->j_state_lock); in jbd2_journal_begin_ordered_truncate()
2576 spin_lock(&journal->j_list_lock); in jbd2_journal_begin_ordered_truncate()
2578 spin_unlock(&journal->j_list_lock); in jbd2_journal_begin_ordered_truncate()
2583 jbd2_journal_abort(journal, ret); in jbd2_journal_begin_ordered_truncate()