Lines Matching refs:journal

79 jbd2_get_transaction(journal_t *journal, transaction_t *transaction)  in jbd2_get_transaction()  argument
81 transaction->t_journal = journal; in jbd2_get_transaction()
84 transaction->t_tid = journal->j_transaction_sequence++; in jbd2_get_transaction()
85 transaction->t_expires = jiffies + journal->j_commit_interval; in jbd2_get_transaction()
89 atomic_read(&journal->j_reserved_credits)); in jbd2_get_transaction()
95 journal->j_commit_timer.expires = round_jiffies_up(transaction->t_expires); in jbd2_get_transaction()
96 add_timer(&journal->j_commit_timer); in jbd2_get_transaction()
98 J_ASSERT(journal->j_running_transaction == NULL); in jbd2_get_transaction()
99 journal->j_running_transaction = transaction; in jbd2_get_transaction()
145 static void wait_transaction_locked(journal_t *journal) in wait_transaction_locked() argument
146 __releases(journal->j_state_lock) in wait_transaction_locked()
150 tid_t tid = journal->j_running_transaction->t_tid; in wait_transaction_locked()
152 prepare_to_wait(&journal->j_wait_transaction_locked, &wait, in wait_transaction_locked()
154 need_to_start = !tid_geq(journal->j_commit_request, tid); in wait_transaction_locked()
155 read_unlock(&journal->j_state_lock); in wait_transaction_locked()
157 jbd2_log_start_commit(journal, tid); in wait_transaction_locked()
158 jbd2_might_wait_for_commit(journal); in wait_transaction_locked()
160 finish_wait(&journal->j_wait_transaction_locked, &wait); in wait_transaction_locked()
163 static void sub_reserved_credits(journal_t *journal, int blocks) in sub_reserved_credits() argument
165 atomic_sub(blocks, &journal->j_reserved_credits); in sub_reserved_credits()
166 wake_up(&journal->j_wait_reserved); in sub_reserved_credits()
175 static int add_transaction_credits(journal_t *journal, int blocks, in add_transaction_credits() argument
178 transaction_t *t = journal->j_running_transaction; in add_transaction_credits()
187 wait_transaction_locked(journal); in add_transaction_credits()
197 if (needed > journal->j_max_transaction_buffers) { in add_transaction_credits()
209 if (atomic_read(&journal->j_reserved_credits) + total > in add_transaction_credits()
210 journal->j_max_transaction_buffers) { in add_transaction_credits()
211 read_unlock(&journal->j_state_lock); in add_transaction_credits()
212 jbd2_might_wait_for_commit(journal); in add_transaction_credits()
213 wait_event(journal->j_wait_reserved, in add_transaction_credits()
214 atomic_read(&journal->j_reserved_credits) + total <= in add_transaction_credits()
215 journal->j_max_transaction_buffers); in add_transaction_credits()
219 wait_transaction_locked(journal); in add_transaction_credits()
234 if (jbd2_log_space_left(journal) < jbd2_space_needed(journal)) { in add_transaction_credits()
236 read_unlock(&journal->j_state_lock); in add_transaction_credits()
237 jbd2_might_wait_for_commit(journal); in add_transaction_credits()
238 write_lock(&journal->j_state_lock); in add_transaction_credits()
239 if (jbd2_log_space_left(journal) < jbd2_space_needed(journal)) in add_transaction_credits()
240 __jbd2_log_wait_for_space(journal); in add_transaction_credits()
241 write_unlock(&journal->j_state_lock); in add_transaction_credits()
249 needed = atomic_add_return(rsv_blocks, &journal->j_reserved_credits); in add_transaction_credits()
251 if (needed > journal->j_max_transaction_buffers / 2) { in add_transaction_credits()
252 sub_reserved_credits(journal, rsv_blocks); in add_transaction_credits()
254 read_unlock(&journal->j_state_lock); in add_transaction_credits()
255 jbd2_might_wait_for_commit(journal); 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()
385 rwsem_acquire_read(&journal->j_trans_commit_map, 0, 0, _THIS_IP_); in start_this_handle()
407 handle_t *jbd2__journal_start(journal_t *journal, int nblocks, int rsv_blocks, in jbd2__journal_start() argument
414 if (!journal) in jbd2__journal_start()
418 J_ASSERT(handle->h_transaction->t_journal == journal); in jbd2__journal_start()
435 rsv_handle->h_journal = journal; in jbd2__journal_start()
439 err = start_this_handle(journal, handle, gfp_mask); in jbd2__journal_start()
448 trace_jbd2_handle_start(journal->j_fs_dev->bd_dev, in jbd2__journal_start()
476 handle_t *jbd2_journal_start(journal_t *journal, int nblocks) in jbd2_journal_start() argument
478 return jbd2__journal_start(journal, nblocks, 0, GFP_NOFS, 0, 0); in jbd2_journal_start()
484 journal_t *journal = handle->h_journal; in jbd2_journal_free_reserved() local
487 sub_reserved_credits(journal, handle->h_buffer_credits); in jbd2_journal_free_reserved()
509 journal_t *journal = handle->h_journal; in jbd2_journal_start_reserved() local
531 ret = start_this_handle(journal, handle, GFP_NOFS); in jbd2_journal_start_reserved()
533 handle->h_journal = journal; in jbd2_journal_start_reserved()
566 journal_t *journal; in jbd2_journal_extend() local
572 journal = transaction->t_journal; in jbd2_journal_extend()
576 read_lock(&journal->j_state_lock); in jbd2_journal_extend()
589 if (wanted > journal->j_max_transaction_buffers) { in jbd2_journal_extend()
597 jbd2_log_space_left(journal)) { in jbd2_journal_extend()
604 trace_jbd2_handle_extend(journal->j_fs_dev->bd_dev, in jbd2_journal_extend()
618 read_unlock(&journal->j_state_lock); in jbd2_journal_extend()
642 journal_t *journal; in jbd2__journal_restart() local
650 journal = transaction->t_journal; in jbd2__journal_restart()
659 read_lock(&journal->j_state_lock); in jbd2__journal_restart()
664 sub_reserved_credits(journal, in jbd2__journal_restart()
668 wake_up(&journal->j_wait_updates); in jbd2__journal_restart()
675 need_to_start = !tid_geq(journal->j_commit_request, tid); in jbd2__journal_restart()
676 read_unlock(&journal->j_state_lock); in jbd2__journal_restart()
678 jbd2_log_start_commit(journal, tid); in jbd2__journal_restart()
680 rwsem_release(&journal->j_trans_commit_map, 1, _THIS_IP_); in jbd2__journal_restart()
688 ret = start_this_handle(journal, handle, gfp_mask); in jbd2__journal_restart()
710 void jbd2_journal_lock_updates(journal_t *journal) in jbd2_journal_lock_updates() argument
714 jbd2_might_wait_for_commit(journal); in jbd2_journal_lock_updates()
716 write_lock(&journal->j_state_lock); in jbd2_journal_lock_updates()
717 ++journal->j_barrier_count; in jbd2_journal_lock_updates()
720 if (atomic_read(&journal->j_reserved_credits)) { in jbd2_journal_lock_updates()
721 write_unlock(&journal->j_state_lock); in jbd2_journal_lock_updates()
722 wait_event(journal->j_wait_reserved, in jbd2_journal_lock_updates()
723 atomic_read(&journal->j_reserved_credits) == 0); in jbd2_journal_lock_updates()
724 write_lock(&journal->j_state_lock); in jbd2_journal_lock_updates()
729 transaction_t *transaction = journal->j_running_transaction; in jbd2_journal_lock_updates()
735 prepare_to_wait(&journal->j_wait_updates, &wait, in jbd2_journal_lock_updates()
739 finish_wait(&journal->j_wait_updates, &wait); in jbd2_journal_lock_updates()
743 write_unlock(&journal->j_state_lock); in jbd2_journal_lock_updates()
745 finish_wait(&journal->j_wait_updates, &wait); in jbd2_journal_lock_updates()
746 write_lock(&journal->j_state_lock); in jbd2_journal_lock_updates()
748 write_unlock(&journal->j_state_lock); in jbd2_journal_lock_updates()
756 mutex_lock(&journal->j_barrier); in jbd2_journal_lock_updates()
767 void jbd2_journal_unlock_updates (journal_t *journal) in jbd2_journal_unlock_updates() argument
769 J_ASSERT(journal->j_barrier_count != 0); in jbd2_journal_unlock_updates()
771 mutex_unlock(&journal->j_barrier); in jbd2_journal_unlock_updates()
772 write_lock(&journal->j_state_lock); in jbd2_journal_unlock_updates()
773 --journal->j_barrier_count; in jbd2_journal_unlock_updates()
774 write_unlock(&journal->j_state_lock); in jbd2_journal_unlock_updates()
775 wake_up(&journal->j_wait_transaction_locked); in jbd2_journal_unlock_updates()
827 journal_t *journal; in do_get_write_access() local
834 journal = transaction->t_journal; in do_get_write_access()
876 journal->j_committing_transaction); in do_get_write_access()
930 spin_lock(&journal->j_list_lock); in do_get_write_access()
932 spin_unlock(&journal->j_list_lock); in do_get_write_access()
947 J_ASSERT_JH(jh, jh->b_transaction == journal->j_committing_transaction); in do_get_write_access()
1120 journal_t *journal; in jbd2_journal_get_create_access() local
1128 journal = transaction->t_journal; in jbd2_journal_get_create_access()
1142 (jh->b_transaction == journal->j_committing_transaction && in jbd2_journal_get_create_access()
1162 spin_lock(&journal->j_list_lock); in jbd2_journal_get_create_access()
1164 spin_unlock(&journal->j_list_lock); in jbd2_journal_get_create_access()
1165 } else if (jh->b_transaction == journal->j_committing_transaction) { in jbd2_journal_get_create_access()
1170 spin_lock(&journal->j_list_lock); in jbd2_journal_get_create_access()
1172 spin_unlock(&journal->j_list_lock); in jbd2_journal_get_create_access()
1331 journal_t *journal; in jbd2_journal_dirty_metadata() local
1378 journal = transaction->t_journal; in jbd2_journal_dirty_metadata()
1408 journal->j_running_transaction)) { in jbd2_journal_dirty_metadata()
1412 journal->j_devname, in jbd2_journal_dirty_metadata()
1416 journal->j_running_transaction, in jbd2_journal_dirty_metadata()
1417 journal->j_running_transaction ? in jbd2_journal_dirty_metadata()
1418 journal->j_running_transaction->t_tid : 0); in jbd2_journal_dirty_metadata()
1435 journal->j_committing_transaction)) || in jbd2_journal_dirty_metadata()
1442 journal->j_devname, in jbd2_journal_dirty_metadata()
1464 spin_lock(&journal->j_list_lock); in jbd2_journal_dirty_metadata()
1466 spin_unlock(&journal->j_list_lock); in jbd2_journal_dirty_metadata()
1494 journal_t *journal; in jbd2_journal_forget() local
1502 journal = transaction->t_journal; in jbd2_journal_forget()
1559 spin_lock(&journal->j_list_lock); in jbd2_journal_forget()
1566 spin_unlock(&journal->j_list_lock); in jbd2_journal_forget()
1572 spin_unlock(&journal->j_list_lock); in jbd2_journal_forget()
1575 journal->j_committing_transaction)); in jbd2_journal_forget()
1584 spin_lock(&journal->j_list_lock); in jbd2_journal_forget()
1586 spin_unlock(&journal->j_list_lock); in jbd2_journal_forget()
1627 journal_t *journal; in jbd2_journal_stop() local
1648 journal = transaction->t_journal; in jbd2_journal_stop()
1664 trace_jbd2_handle_stats(journal->j_fs_dev->bd_dev, in jbd2_journal_stop()
1702 if (handle->h_sync && journal->j_last_sync_writer != pid && in jbd2_journal_stop()
1703 journal->j_max_batch_time) { in jbd2_journal_stop()
1706 journal->j_last_sync_writer = pid; in jbd2_journal_stop()
1708 read_lock(&journal->j_state_lock); in jbd2_journal_stop()
1709 commit_time = journal->j_average_commit_time; in jbd2_journal_stop()
1710 read_unlock(&journal->j_state_lock); in jbd2_journal_stop()
1716 1000*journal->j_min_batch_time); in jbd2_journal_stop()
1718 1000*journal->j_max_batch_time); in jbd2_journal_stop()
1742 journal->j_max_transaction_buffers) || in jbd2_journal_stop()
1751 jbd2_log_start_commit(journal, transaction->t_tid); in jbd2_journal_stop()
1769 wake_up(&journal->j_wait_updates); in jbd2_journal_stop()
1770 if (journal->j_barrier_count) in jbd2_journal_stop()
1771 wake_up(&journal->j_wait_transaction_locked); in jbd2_journal_stop()
1774 rwsem_release(&journal->j_trans_commit_map, 1, _THIS_IP_); in jbd2_journal_stop()
1777 err = jbd2_log_wait_commit(journal, tid); in jbd2_journal_stop()
1910 void jbd2_journal_unfile_buffer(journal_t *journal, struct journal_head *jh) in jbd2_journal_unfile_buffer() argument
1917 spin_lock(&journal->j_list_lock); in jbd2_journal_unfile_buffer()
1919 spin_unlock(&journal->j_list_lock); in jbd2_journal_unfile_buffer()
1930 __journal_try_to_free_buffer(journal_t *journal, struct buffer_head *bh) in __journal_try_to_free_buffer() argument
1942 spin_lock(&journal->j_list_lock); in __journal_try_to_free_buffer()
1948 spin_unlock(&journal->j_list_lock); in __journal_try_to_free_buffer()
1991 int jbd2_journal_try_to_free_buffers(journal_t *journal, in jbd2_journal_try_to_free_buffers() argument
2015 __journal_try_to_free_buffer(journal, bh); in jbd2_journal_try_to_free_buffers()
2110 static int journal_unmap_buffer(journal_t *journal, struct buffer_head *bh, in journal_unmap_buffer() argument
2129 write_lock(&journal->j_state_lock); in journal_unmap_buffer()
2131 spin_lock(&journal->j_list_lock); in journal_unmap_buffer()
2181 if (journal->j_running_transaction) { in journal_unmap_buffer()
2187 journal->j_running_transaction); in journal_unmap_buffer()
2194 if (journal->j_committing_transaction) { in journal_unmap_buffer()
2197 journal->j_committing_transaction); in journal_unmap_buffer()
2207 } else if (transaction == journal->j_committing_transaction) { in journal_unmap_buffer()
2216 spin_unlock(&journal->j_list_lock); in journal_unmap_buffer()
2218 write_unlock(&journal->j_state_lock); in journal_unmap_buffer()
2228 if (journal->j_running_transaction && buffer_jbddirty(bh)) in journal_unmap_buffer()
2229 jh->b_next_transaction = journal->j_running_transaction; in journal_unmap_buffer()
2231 spin_unlock(&journal->j_list_lock); in journal_unmap_buffer()
2233 write_unlock(&journal->j_state_lock); in journal_unmap_buffer()
2242 J_ASSERT_JH(jh, transaction == journal->j_running_transaction); in journal_unmap_buffer()
2259 spin_unlock(&journal->j_list_lock); in journal_unmap_buffer()
2261 write_unlock(&journal->j_state_lock); in journal_unmap_buffer()
2286 int jbd2_journal_invalidatepage(journal_t *journal, in jbd2_journal_invalidatepage() argument
2320 ret = journal_unmap_buffer(journal, bh, partial_page); in jbd2_journal_invalidatepage()
2476 void jbd2_journal_refile_buffer(journal_t *journal, struct journal_head *jh) in jbd2_journal_refile_buffer() argument
2483 spin_lock(&journal->j_list_lock); in jbd2_journal_refile_buffer()
2486 spin_unlock(&journal->j_list_lock); in jbd2_journal_refile_buffer()
2497 journal_t *journal; in jbd2_journal_file_inode() local
2501 journal = transaction->t_journal; in jbd2_journal_file_inode()
2524 spin_lock(&journal->j_list_lock); in jbd2_journal_file_inode()
2543 journal->j_committing_transaction); in jbd2_journal_file_inode()
2552 spin_unlock(&journal->j_list_lock); in jbd2_journal_file_inode()
2588 int jbd2_journal_begin_ordered_truncate(journal_t *journal, in jbd2_journal_begin_ordered_truncate() argument
2601 read_lock(&journal->j_state_lock); in jbd2_journal_begin_ordered_truncate()
2602 commit_trans = journal->j_committing_transaction; in jbd2_journal_begin_ordered_truncate()
2603 read_unlock(&journal->j_state_lock); in jbd2_journal_begin_ordered_truncate()
2604 spin_lock(&journal->j_list_lock); in jbd2_journal_begin_ordered_truncate()
2606 spin_unlock(&journal->j_list_lock); in jbd2_journal_begin_ordered_truncate()
2611 jbd2_journal_abort(journal, ret); in jbd2_journal_begin_ordered_truncate()