/linux-4.1.27/fs/jbd/ |
H A D | checkpoint.c | 33 static inline void __buffer_unlink_first(struct journal_head *jh) __buffer_unlink_first() argument 35 transaction_t *transaction = jh->b_cp_transaction; __buffer_unlink_first() 37 jh->b_cpnext->b_cpprev = jh->b_cpprev; __buffer_unlink_first() 38 jh->b_cpprev->b_cpnext = jh->b_cpnext; __buffer_unlink_first() 39 if (transaction->t_checkpoint_list == jh) { __buffer_unlink_first() 40 transaction->t_checkpoint_list = jh->b_cpnext; __buffer_unlink_first() 41 if (transaction->t_checkpoint_list == jh) __buffer_unlink_first() 51 static inline void __buffer_unlink(struct journal_head *jh) __buffer_unlink() argument 53 transaction_t *transaction = jh->b_cp_transaction; __buffer_unlink() 55 __buffer_unlink_first(jh); __buffer_unlink() 56 if (transaction->t_checkpoint_io_list == jh) { __buffer_unlink() 57 transaction->t_checkpoint_io_list = jh->b_cpnext; __buffer_unlink() 58 if (transaction->t_checkpoint_io_list == jh) __buffer_unlink() 68 static inline void __buffer_relink_io(struct journal_head *jh) __buffer_relink_io() argument 70 transaction_t *transaction = jh->b_cp_transaction; __buffer_relink_io() 72 __buffer_unlink_first(jh); __buffer_relink_io() 75 jh->b_cpnext = jh->b_cpprev = jh; __buffer_relink_io() 77 jh->b_cpnext = transaction->t_checkpoint_io_list; __buffer_relink_io() 78 jh->b_cpprev = transaction->t_checkpoint_io_list->b_cpprev; __buffer_relink_io() 79 jh->b_cpprev->b_cpnext = jh; __buffer_relink_io() 80 jh->b_cpnext->b_cpprev = jh; __buffer_relink_io() 82 transaction->t_checkpoint_io_list = jh; __buffer_relink_io() 91 * Called under jbd_lock_bh_state(jh2bh(jh)), and drops it 93 static int __try_to_free_cp_buf(struct journal_head *jh) __try_to_free_cp_buf() argument 96 struct buffer_head *bh = jh2bh(jh); __try_to_free_cp_buf() 98 if (jh->b_jlist == BJ_None && !buffer_locked(bh) && __try_to_free_cp_buf() 105 JBUFFER_TRACE(jh, "remove from checkpoint list"); __try_to_free_cp_buf() 106 ret = __journal_remove_checkpoint(jh) + 1; __try_to_free_cp_buf() 209 struct journal_head *jh; __wait_cp_io() local 222 jh = transaction->t_checkpoint_io_list; __wait_cp_io() 223 bh = jh2bh(jh); __wait_cp_io() 247 released = __journal_remove_checkpoint(jh); __wait_cp_io() 285 * Called under jbd_lock_bh_state(jh2bh(jh)), and drops it 287 static int __process_buffer(journal_t *journal, struct journal_head *jh, __process_buffer() argument 290 struct buffer_head *bh = jh2bh(jh); __process_buffer() 302 } else if (jh->b_transaction != NULL) { __process_buffer() 303 transaction_t *t = jh->b_transaction; __process_buffer() 316 J_ASSERT_JH(jh, !buffer_jbddirty(bh)); __process_buffer() 318 __journal_remove_checkpoint(jh); __process_buffer() 335 __buffer_relink_io(jh); __process_buffer() 394 struct journal_head *jh; log_do_checkpoint() local 400 jh = transaction->t_checkpoint_list; log_do_checkpoint() 401 bh = jh2bh(jh); log_do_checkpoint() 407 retry = __process_buffer(journal, jh, bhs,&batch_count); log_do_checkpoint() 557 static int journal_clean_one_cp_list(struct journal_head *jh, int *released) journal_clean_one_cp_list() argument 560 struct journal_head *next_jh = jh; journal_clean_one_cp_list() 564 if (!jh) journal_clean_one_cp_list() 567 last_jh = jh->b_cpprev; journal_clean_one_cp_list() 569 jh = next_jh; journal_clean_one_cp_list() 570 next_jh = jh->b_cpnext; journal_clean_one_cp_list() 572 if (jbd_trylock_bh_state(jh2bh(jh))) { journal_clean_one_cp_list() 573 ret = __try_to_free_cp_buf(jh); journal_clean_one_cp_list() 590 } while (jh != last_jh); journal_clean_one_cp_list() 659 * The function can free jh and bh. 662 * This function is called with jbd_lock_bh_state(jh2bh(jh)) 665 int __journal_remove_checkpoint(struct journal_head *jh) __journal_remove_checkpoint() argument 671 JBUFFER_TRACE(jh, "entry"); __journal_remove_checkpoint() 673 if ((transaction = jh->b_cp_transaction) == NULL) { __journal_remove_checkpoint() 674 JBUFFER_TRACE(jh, "not on transaction"); __journal_remove_checkpoint() 679 JBUFFER_TRACE(jh, "removing from transaction"); __journal_remove_checkpoint() 680 __buffer_unlink(jh); __journal_remove_checkpoint() 681 jh->b_cp_transaction = NULL; __journal_remove_checkpoint() 682 journal_put_journal_head(jh); __journal_remove_checkpoint() 721 void __journal_insert_checkpoint(struct journal_head *jh, __journal_insert_checkpoint() argument 724 JBUFFER_TRACE(jh, "entry"); __journal_insert_checkpoint() 725 J_ASSERT_JH(jh, buffer_dirty(jh2bh(jh)) || buffer_jbddirty(jh2bh(jh))); __journal_insert_checkpoint() 726 J_ASSERT_JH(jh, jh->b_cp_transaction == NULL); __journal_insert_checkpoint() 729 journal_grab_journal_head(jh2bh(jh)); __journal_insert_checkpoint() 730 jh->b_cp_transaction = transaction; __journal_insert_checkpoint() 733 jh->b_cpnext = jh->b_cpprev = jh; __journal_insert_checkpoint() 735 jh->b_cpnext = transaction->t_checkpoint_list; __journal_insert_checkpoint() 736 jh->b_cpprev = transaction->t_checkpoint_list->b_cpprev; __journal_insert_checkpoint() 737 jh->b_cpprev->b_cpnext = jh; __journal_insert_checkpoint() 738 jh->b_cpnext->b_cpprev = jh; __journal_insert_checkpoint() 740 transaction->t_checkpoint_list = jh; __journal_insert_checkpoint()
|
H A D | transaction.c | 30 static void __journal_temp_unlink_buffer(struct journal_head *jh); 519 do_get_write_access(handle_t *handle, struct journal_head *jh, do_get_write_access() argument 535 jbd_debug(5, "journal_head %p, force_copy %d\n", jh, force_copy); do_get_write_access() 537 JBUFFER_TRACE(jh, "entry"); do_get_write_access() 539 bh = jh2bh(jh); do_get_write_access() 564 if (jh->b_transaction) { do_get_write_access() 565 J_ASSERT_JH(jh, do_get_write_access() 566 jh->b_transaction == transaction || do_get_write_access() 567 jh->b_transaction == do_get_write_access() 569 if (jh->b_next_transaction) do_get_write_access() 570 J_ASSERT_JH(jh, jh->b_next_transaction == do_get_write_access() 579 JBUFFER_TRACE(jh, "Journalling dirty buffer"); do_get_write_access() 597 if (jh->b_transaction == transaction || do_get_write_access() 598 jh->b_next_transaction == transaction) do_get_write_access() 605 jh->b_modified = 0; do_get_write_access() 611 if (jh->b_frozen_data) { do_get_write_access() 612 JBUFFER_TRACE(jh, "has frozen data"); do_get_write_access() 613 J_ASSERT_JH(jh, jh->b_next_transaction == NULL); do_get_write_access() 614 jh->b_next_transaction = transaction; do_get_write_access() 620 if (jh->b_transaction && jh->b_transaction != transaction) { do_get_write_access() 621 JBUFFER_TRACE(jh, "owned by older transaction"); do_get_write_access() 622 J_ASSERT_JH(jh, jh->b_next_transaction == NULL); do_get_write_access() 623 J_ASSERT_JH(jh, jh->b_transaction == do_get_write_access() 635 if (jh->b_jlist == BJ_Shadow) { do_get_write_access() 641 JBUFFER_TRACE(jh, "on shadow: sleep"); do_get_write_access() 647 if (jh->b_jlist != BJ_Shadow) do_get_write_access() 669 if (jh->b_jlist != BJ_Forget || force_copy) { do_get_write_access() 670 JBUFFER_TRACE(jh, "generate frozen data"); do_get_write_access() 672 JBUFFER_TRACE(jh, "allocate memory for buffer"); do_get_write_access() 675 jbd_alloc(jh2bh(jh)->b_size, do_get_write_access() 681 JBUFFER_TRACE(jh, "oom!"); do_get_write_access() 688 jh->b_frozen_data = frozen_buffer; do_get_write_access() 692 jh->b_next_transaction = transaction; do_get_write_access() 701 if (!jh->b_transaction) { do_get_write_access() 702 JBUFFER_TRACE(jh, "no transaction"); do_get_write_access() 703 J_ASSERT_JH(jh, !jh->b_next_transaction); do_get_write_access() 704 JBUFFER_TRACE(jh, "file as BJ_Reserved"); do_get_write_access() 706 __journal_file_buffer(jh, transaction, BJ_Reserved); do_get_write_access() 716 J_EXPECT_JH(jh, buffer_uptodate(jh2bh(jh)), do_get_write_access() 718 page = jh2bh(jh)->b_page; do_get_write_access() 719 offset = offset_in_page(jh2bh(jh)->b_data); do_get_write_access() 721 memcpy(jh->b_frozen_data, source+offset, jh2bh(jh)->b_size); do_get_write_access() 730 journal_cancel_revoke(handle, jh); do_get_write_access() 736 JBUFFER_TRACE(jh, "exit"); do_get_write_access() 753 struct journal_head *jh = journal_add_journal_head(bh); journal_get_write_access() local 759 rc = do_get_write_access(handle, jh, 0); journal_get_write_access() 760 journal_put_journal_head(jh); journal_get_write_access() 788 struct journal_head *jh = journal_add_journal_head(bh); journal_get_create_access() local 791 jbd_debug(5, "journal_head %p\n", jh); journal_get_create_access() 797 JBUFFER_TRACE(jh, "entry"); journal_get_create_access() 807 J_ASSERT_JH(jh, (jh->b_transaction == transaction || journal_get_create_access() 808 jh->b_transaction == NULL || journal_get_create_access() 809 (jh->b_transaction == journal->j_committing_transaction && journal_get_create_access() 810 jh->b_jlist == BJ_Forget))); journal_get_create_access() 812 J_ASSERT_JH(jh, jh->b_next_transaction == NULL); journal_get_create_access() 813 J_ASSERT_JH(jh, buffer_locked(jh2bh(jh))); journal_get_create_access() 815 if (jh->b_transaction == NULL) { journal_get_create_access() 824 clear_buffer_dirty(jh2bh(jh)); journal_get_create_access() 827 jh->b_modified = 0; journal_get_create_access() 829 JBUFFER_TRACE(jh, "file as BJ_Reserved"); journal_get_create_access() 830 __journal_file_buffer(jh, transaction, BJ_Reserved); journal_get_create_access() 831 } else if (jh->b_transaction == journal->j_committing_transaction) { journal_get_create_access() 833 jh->b_modified = 0; journal_get_create_access() 835 JBUFFER_TRACE(jh, "set next transaction"); journal_get_create_access() 836 jh->b_next_transaction = transaction; journal_get_create_access() 848 JBUFFER_TRACE(jh, "cancelling revoke"); journal_get_create_access() 849 journal_cancel_revoke(handle, jh); journal_get_create_access() 851 journal_put_journal_head(jh); journal_get_create_access() 883 struct journal_head *jh = journal_add_journal_head(bh); journal_get_undo_access() local 886 JBUFFER_TRACE(jh, "entry"); journal_get_undo_access() 893 err = do_get_write_access(handle, jh, 1); journal_get_undo_access() 898 if (!jh->b_committed_data) { journal_get_undo_access() 899 committed_data = jbd_alloc(jh2bh(jh)->b_size, GFP_NOFS); journal_get_undo_access() 909 if (!jh->b_committed_data) { journal_get_undo_access() 912 JBUFFER_TRACE(jh, "generate b_committed data"); journal_get_undo_access() 918 jh->b_committed_data = committed_data; journal_get_undo_access() 920 memcpy(jh->b_committed_data, bh->b_data, bh->b_size); journal_get_undo_access() 924 journal_put_journal_head(jh); journal_get_undo_access() 951 struct journal_head *jh; journal_dirty_data() local 957 jh = journal_add_journal_head(bh); journal_dirty_data() 958 JBUFFER_TRACE(jh, "entry"); journal_dirty_data() 964 jbd_debug(4, "jh: %p, tid:%d\n", jh, handle->h_transaction->t_tid); journal_dirty_data() 992 JBUFFER_TRACE(jh, "unmapped buffer, bailing out"); journal_dirty_data() 996 if (jh->b_transaction) { journal_dirty_data() 997 JBUFFER_TRACE(jh, "has transaction"); journal_dirty_data() 998 if (jh->b_transaction != handle->h_transaction) { journal_dirty_data() 999 JBUFFER_TRACE(jh, "belongs to older transaction"); journal_dirty_data() 1000 J_ASSERT_JH(jh, jh->b_transaction == journal_dirty_data() 1020 //J_ASSERT_JH(jh, jh->b_next_transaction == NULL); journal_dirty_data() 1036 if (jh->b_jlist != BJ_None && journal_dirty_data() 1037 jh->b_jlist != BJ_SyncData && journal_dirty_data() 1038 jh->b_jlist != BJ_Locked) { journal_dirty_data() 1039 JBUFFER_TRACE(jh, "Not stealing"); journal_dirty_data() 1059 JBUFFER_TRACE(jh, "buffer got unmapped"); journal_dirty_data() 1076 if (jh->b_transaction != NULL && journal_dirty_data() 1077 jh->b_transaction != handle->h_transaction) { journal_dirty_data() 1078 JBUFFER_TRACE(jh, "unfile from commit"); journal_dirty_data() 1079 __journal_temp_unlink_buffer(jh); journal_dirty_data() 1084 jh->b_transaction = handle->h_transaction; journal_dirty_data() 1095 if (jh->b_jlist != BJ_SyncData && jh->b_jlist != BJ_Locked) { journal_dirty_data() 1096 JBUFFER_TRACE(jh, "not on correct data list: unfile"); journal_dirty_data() 1097 J_ASSERT_JH(jh, jh->b_jlist != BJ_Shadow); journal_dirty_data() 1098 JBUFFER_TRACE(jh, "file as data"); journal_dirty_data() 1099 __journal_file_buffer(jh, handle->h_transaction, journal_dirty_data() 1103 JBUFFER_TRACE(jh, "not on a transaction"); journal_dirty_data() 1104 __journal_file_buffer(jh, handle->h_transaction, BJ_SyncData); journal_dirty_data() 1113 JBUFFER_TRACE(jh, "exit"); journal_dirty_data() 1114 journal_put_journal_head(jh); journal_dirty_data() 1141 struct journal_head *jh = bh2jh(bh); journal_dirty_metadata() local 1143 jbd_debug(5, "journal_head %p\n", jh); journal_dirty_metadata() 1144 JBUFFER_TRACE(jh, "entry"); journal_dirty_metadata() 1150 if (jh->b_modified == 0) { journal_dirty_metadata() 1156 jh->b_modified = 1; journal_dirty_metadata() 1157 J_ASSERT_JH(jh, handle->h_buffer_credits > 0); journal_dirty_metadata() 1168 if (jh->b_transaction == transaction && jh->b_jlist == BJ_Metadata) { journal_dirty_metadata() 1169 JBUFFER_TRACE(jh, "fastpath"); journal_dirty_metadata() 1170 J_ASSERT_JH(jh, jh->b_transaction == journal_dirty_metadata() 1183 if (jh->b_transaction != transaction) { journal_dirty_metadata() 1184 JBUFFER_TRACE(jh, "already on other transaction"); journal_dirty_metadata() 1185 J_ASSERT_JH(jh, jh->b_transaction == journal_dirty_metadata() 1187 J_ASSERT_JH(jh, jh->b_next_transaction == transaction); journal_dirty_metadata() 1194 J_ASSERT_JH(jh, jh->b_frozen_data == NULL); journal_dirty_metadata() 1196 JBUFFER_TRACE(jh, "file as BJ_Metadata"); journal_dirty_metadata() 1198 __journal_file_buffer(jh, handle->h_transaction, BJ_Metadata); journal_dirty_metadata() 1203 JBUFFER_TRACE(jh, "exit"); journal_dirty_metadata() 1239 struct journal_head *jh; journal_forget() local 1251 jh = bh2jh(bh); journal_forget() 1255 if (!J_EXPECT_JH(jh, !jh->b_committed_data, journal_forget() 1262 was_modified = jh->b_modified; journal_forget() 1268 jh->b_modified = 0; journal_forget() 1270 if (jh->b_transaction == handle->h_transaction) { journal_forget() 1271 J_ASSERT_JH(jh, !jh->b_frozen_data); journal_forget() 1279 JBUFFER_TRACE(jh, "belongs to current transaction: unfile"); journal_forget() 1300 if (jh->b_cp_transaction) { journal_forget() 1301 __journal_temp_unlink_buffer(jh); journal_forget() 1302 __journal_file_buffer(jh, transaction, BJ_Forget); journal_forget() 1304 __journal_unfile_buffer(jh); journal_forget() 1312 } else if (jh->b_transaction) { journal_forget() 1313 J_ASSERT_JH(jh, (jh->b_transaction == journal_forget() 1317 JBUFFER_TRACE(jh, "belongs to older transaction"); journal_forget() 1321 if (jh->b_next_transaction) { journal_forget() 1322 J_ASSERT(jh->b_next_transaction == transaction); journal_forget() 1323 jh->b_next_transaction = NULL; journal_forget() 1521 * jbd_lock_bh_state(jh2bh(jh)) is held. 1525 __blist_add_buffer(struct journal_head **list, struct journal_head *jh) __blist_add_buffer() argument 1528 jh->b_tnext = jh->b_tprev = jh; __blist_add_buffer() 1529 *list = jh; __blist_add_buffer() 1533 jh->b_tprev = last; __blist_add_buffer() 1534 jh->b_tnext = first; __blist_add_buffer() 1535 last->b_tnext = first->b_tprev = jh; __blist_add_buffer() 1545 * jbd_lock_bh_state(jh2bh(jh)) is held. 1549 __blist_del_buffer(struct journal_head **list, struct journal_head *jh) __blist_del_buffer() argument 1551 if (*list == jh) { __blist_del_buffer() 1552 *list = jh->b_tnext; __blist_del_buffer() 1553 if (*list == jh) __blist_del_buffer() 1556 jh->b_tprev->b_tnext = jh->b_tnext; __blist_del_buffer() 1557 jh->b_tnext->b_tprev = jh->b_tprev; __blist_del_buffer() 1571 static void __journal_temp_unlink_buffer(struct journal_head *jh) __journal_temp_unlink_buffer() argument 1575 struct buffer_head *bh = jh2bh(jh); __journal_temp_unlink_buffer() 1577 J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh)); __journal_temp_unlink_buffer() 1578 transaction = jh->b_transaction; __journal_temp_unlink_buffer() 1582 J_ASSERT_JH(jh, jh->b_jlist < BJ_Types); __journal_temp_unlink_buffer() 1583 if (jh->b_jlist != BJ_None) __journal_temp_unlink_buffer() 1584 J_ASSERT_JH(jh, transaction != NULL); __journal_temp_unlink_buffer() 1586 switch (jh->b_jlist) { __journal_temp_unlink_buffer() 1594 J_ASSERT_JH(jh, transaction->t_nr_buffers >= 0); __journal_temp_unlink_buffer() 1617 __blist_del_buffer(list, jh); __journal_temp_unlink_buffer() 1618 jh->b_jlist = BJ_None; __journal_temp_unlink_buffer() 1628 * jh and bh may be already freed when this function returns. 1630 void __journal_unfile_buffer(struct journal_head *jh) __journal_unfile_buffer() argument 1632 __journal_temp_unlink_buffer(jh); __journal_unfile_buffer() 1633 jh->b_transaction = NULL; __journal_unfile_buffer() 1634 journal_put_journal_head(jh); __journal_unfile_buffer() 1637 void journal_unfile_buffer(journal_t *journal, struct journal_head *jh) journal_unfile_buffer() argument 1639 struct buffer_head *bh = jh2bh(jh); journal_unfile_buffer() 1645 __journal_unfile_buffer(jh); journal_unfile_buffer() 1659 struct journal_head *jh; __journal_try_to_free_buffer() local 1661 jh = bh2jh(bh); __journal_try_to_free_buffer() 1666 if (jh->b_next_transaction != NULL) __journal_try_to_free_buffer() 1670 if (jh->b_transaction != NULL && jh->b_cp_transaction == NULL) { __journal_try_to_free_buffer() 1671 if (jh->b_jlist == BJ_SyncData || jh->b_jlist == BJ_Locked) { __journal_try_to_free_buffer() 1673 JBUFFER_TRACE(jh, "release data"); __journal_try_to_free_buffer() 1674 __journal_unfile_buffer(jh); __journal_try_to_free_buffer() 1676 } else if (jh->b_cp_transaction != NULL && jh->b_transaction == NULL) { __journal_try_to_free_buffer() 1678 if (jh->b_jlist == BJ_None) { __journal_try_to_free_buffer() 1679 JBUFFER_TRACE(jh, "remove from checkpoint list"); __journal_try_to_free_buffer() 1680 __journal_remove_checkpoint(jh); __journal_try_to_free_buffer() 1738 struct journal_head *jh; journal_try_to_free_buffers() local 1745 jh = journal_grab_journal_head(bh); journal_try_to_free_buffers() 1746 if (!jh) journal_try_to_free_buffers() 1751 journal_put_journal_head(jh); journal_try_to_free_buffers() 1775 static int __dispose_buffer(struct journal_head *jh, transaction_t *transaction) __dispose_buffer() argument 1778 struct buffer_head *bh = jh2bh(jh); __dispose_buffer() 1780 if (jh->b_cp_transaction) { __dispose_buffer() 1781 JBUFFER_TRACE(jh, "on running+cp transaction"); __dispose_buffer() 1782 __journal_temp_unlink_buffer(jh); __dispose_buffer() 1789 __journal_file_buffer(jh, transaction, BJ_Forget); __dispose_buffer() 1792 JBUFFER_TRACE(jh, "on running transaction"); __dispose_buffer() 1793 __journal_unfile_buffer(jh); __dispose_buffer() 1849 struct journal_head *jh; journal_unmap_buffer() local 1868 jh = journal_grab_journal_head(bh); journal_unmap_buffer() 1869 if (!jh) journal_unmap_buffer() 1895 transaction = jh->b_transaction; journal_unmap_buffer() 1901 if (!jh->b_cp_transaction) { journal_unmap_buffer() 1902 JBUFFER_TRACE(jh, "not on any transaction: zap"); journal_unmap_buffer() 1919 JBUFFER_TRACE(jh, "checkpointed: add to BJ_Forget"); journal_unmap_buffer() 1920 may_free = __dispose_buffer(jh, journal_unmap_buffer() 1929 JBUFFER_TRACE(jh, "give to committing trans"); journal_unmap_buffer() 1930 may_free = __dispose_buffer(jh, journal_unmap_buffer() 1941 JBUFFER_TRACE(jh, "on committing transaction"); journal_unmap_buffer() 1942 if (jh->b_jlist == BJ_Locked) { journal_unmap_buffer() 1948 may_free = __dispose_buffer(jh, transaction); journal_unmap_buffer() 1959 journal_put_journal_head(jh); journal_unmap_buffer() 1976 jh->b_next_transaction = journal->j_running_transaction; journal_unmap_buffer() 1977 journal_put_journal_head(jh); journal_unmap_buffer() 1989 J_ASSERT_JH(jh, transaction == journal->j_running_transaction); journal_unmap_buffer() 1990 JBUFFER_TRACE(jh, "on running transaction"); journal_unmap_buffer() 1991 may_free = __dispose_buffer(jh, transaction); journal_unmap_buffer() 2002 jh->b_modified = 0; journal_unmap_buffer() 2003 journal_put_journal_head(jh); journal_unmap_buffer() 2078 void __journal_file_buffer(struct journal_head *jh, __journal_file_buffer() argument 2083 struct buffer_head *bh = jh2bh(jh); __journal_file_buffer() 2085 J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh)); __journal_file_buffer() 2088 J_ASSERT_JH(jh, jh->b_jlist < BJ_Types); __journal_file_buffer() 2089 J_ASSERT_JH(jh, jh->b_transaction == transaction || __journal_file_buffer() 2090 jh->b_transaction == NULL); __journal_file_buffer() 2092 if (jh->b_transaction && jh->b_jlist == jlist) __journal_file_buffer() 2111 if (jh->b_transaction) __journal_file_buffer() 2112 __journal_temp_unlink_buffer(jh); __journal_file_buffer() 2115 jh->b_transaction = transaction; __journal_file_buffer() 2119 J_ASSERT_JH(jh, !jh->b_committed_data); __journal_file_buffer() 2120 J_ASSERT_JH(jh, !jh->b_frozen_data); __journal_file_buffer() 2149 __blist_add_buffer(list, jh); __journal_file_buffer() 2150 jh->b_jlist = jlist; __journal_file_buffer() 2156 void journal_file_buffer(struct journal_head *jh, journal_file_buffer() argument 2159 jbd_lock_bh_state(jh2bh(jh)); journal_file_buffer() 2161 __journal_file_buffer(jh, transaction, jlist); journal_file_buffer() 2163 jbd_unlock_bh_state(jh2bh(jh)); journal_file_buffer() 2173 * Called under jbd_lock_bh_state(jh2bh(jh)) 2175 * jh and bh may be already free when this function returns 2177 void __journal_refile_buffer(struct journal_head *jh) __journal_refile_buffer() argument 2180 struct buffer_head *bh = jh2bh(jh); __journal_refile_buffer() 2182 J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh)); __journal_refile_buffer() 2183 if (jh->b_transaction) __journal_refile_buffer() 2184 assert_spin_locked(&jh->b_transaction->t_journal->j_list_lock); __journal_refile_buffer() 2187 if (jh->b_next_transaction == NULL) { __journal_refile_buffer() 2188 __journal_unfile_buffer(jh); __journal_refile_buffer() 2198 __journal_temp_unlink_buffer(jh); __journal_refile_buffer() 2201 * our jh reference and thus __journal_file_buffer() must not take a __journal_refile_buffer() 2204 jh->b_transaction = jh->b_next_transaction; __journal_refile_buffer() 2205 jh->b_next_transaction = NULL; __journal_refile_buffer() 2208 else if (jh->b_modified) __journal_refile_buffer() 2212 __journal_file_buffer(jh, jh->b_transaction, jlist); __journal_refile_buffer() 2213 J_ASSERT_JH(jh, jh->b_transaction->t_state == T_RUNNING); __journal_refile_buffer() 2223 * The jh and bh may be freed by this call. 2225 void journal_refile_buffer(journal_t *journal, struct journal_head *jh) journal_refile_buffer() argument 2227 struct buffer_head *bh = jh2bh(jh); journal_refile_buffer() 2233 __journal_refile_buffer(jh); journal_refile_buffer()
|
H A D | commit.c | 186 struct journal_head *jh; journal_submit_data_buffers() local 206 jh = commit_transaction->t_sync_datalist; journal_submit_data_buffers() 207 bh = jh2bh(jh); journal_submit_data_buffers() 238 if (!buffer_jbd(bh) || bh2jh(bh) != jh journal_submit_data_buffers() 239 || jh->b_transaction != commit_transaction journal_submit_data_buffers() 240 || jh->b_jlist != BJ_SyncData) { journal_submit_data_buffers() 251 __journal_file_buffer(jh, commit_transaction, journal_submit_data_buffers() 263 __journal_file_buffer(jh, commit_transaction, journal_submit_data_buffers() 271 __journal_unfile_buffer(jh); journal_submit_data_buffers() 299 struct journal_head *jh, *new_jh, *descriptor; journal_commit_transaction() local 390 jh = commit_transaction->t_reserved_list; journal_commit_transaction() 391 JBUFFER_TRACE(jh, "reserved, unused: refile"); journal_commit_transaction() 396 if (jh->b_committed_data) { journal_commit_transaction() 397 struct buffer_head *bh = jh2bh(jh); journal_commit_transaction() 400 jbd_free(jh->b_committed_data, bh->b_size); journal_commit_transaction() 401 jh->b_committed_data = NULL; journal_commit_transaction() 404 journal_refile_buffer(journal, jh); journal_commit_transaction() 459 jh = commit_transaction->t_locked_list->b_tprev; journal_commit_transaction() 460 bh = jh2bh(jh); journal_commit_transaction() 485 if (buffer_jbd(bh) && bh2jh(bh) == jh && journal_commit_transaction() 486 jh->b_transaction == commit_transaction && journal_commit_transaction() 487 jh->b_jlist == BJ_Locked) journal_commit_transaction() 488 __journal_unfile_buffer(jh); journal_commit_transaction() 539 jh = commit_transaction->t_buffers; journal_commit_transaction() 545 clear_buffer_jbddirty(jh2bh(jh)); journal_commit_transaction() 546 JBUFFER_TRACE(jh, "journal is aborting: refile"); journal_commit_transaction() 547 journal_refile_buffer(journal, jh); journal_commit_transaction() 616 get_bh(jh2bh(jh)); journal_commit_transaction() 622 set_buffer_jwrite(jh2bh(jh)); journal_commit_transaction() 629 JBUFFER_TRACE(jh, "ph3: write metadata"); journal_commit_transaction() 631 jh, &new_jh, blocknr); journal_commit_transaction() 645 tag->t_blocknr = cpu_to_be32(jh2bh(jh)->b_blocknr); journal_commit_transaction() 723 jh = commit_transaction->t_iobuf_list->b_tprev; journal_commit_transaction() 724 bh = jh2bh(jh); journal_commit_transaction() 737 JBUFFER_TRACE(jh, "ph4: unfile after journal write"); journal_commit_transaction() 738 journal_unfile_buffer(journal, jh); journal_commit_transaction() 745 journal_put_journal_head(jh); journal_commit_transaction() 752 jh = commit_transaction->t_shadow_list->b_tprev; journal_commit_transaction() 753 bh = jh2bh(jh); journal_commit_transaction() 761 JBUFFER_TRACE(jh, "file as BJ_Forget"); journal_commit_transaction() 762 journal_file_buffer(jh, commit_transaction, BJ_Forget); journal_commit_transaction() 771 JBUFFER_TRACE(jh, "brelse shadowed buffer"); journal_commit_transaction() 784 jh = commit_transaction->t_log_list->b_tprev; journal_commit_transaction() 785 bh = jh2bh(jh); journal_commit_transaction() 798 journal_unfile_buffer(journal, jh); journal_commit_transaction() 799 journal_put_journal_head(jh); journal_commit_transaction() 846 jh = commit_transaction->t_forget; journal_commit_transaction() 848 bh = jh2bh(jh); journal_commit_transaction() 855 J_ASSERT_JH(jh, jh->b_transaction == commit_transaction || journal_commit_transaction() 856 jh->b_transaction == journal->j_running_transaction); journal_commit_transaction() 868 if (jh->b_committed_data) { journal_commit_transaction() 869 jbd_free(jh->b_committed_data, bh->b_size); journal_commit_transaction() 870 jh->b_committed_data = NULL; journal_commit_transaction() 871 if (jh->b_frozen_data) { journal_commit_transaction() 872 jh->b_committed_data = jh->b_frozen_data; journal_commit_transaction() 873 jh->b_frozen_data = NULL; journal_commit_transaction() 875 } else if (jh->b_frozen_data) { journal_commit_transaction() 876 jbd_free(jh->b_frozen_data, bh->b_size); journal_commit_transaction() 877 jh->b_frozen_data = NULL; journal_commit_transaction() 881 cp_transaction = jh->b_cp_transaction; journal_commit_transaction() 883 JBUFFER_TRACE(jh, "remove from old cp transaction"); journal_commit_transaction() 884 __journal_remove_checkpoint(jh); journal_commit_transaction() 913 jh->b_modified = 0; journal_commit_transaction() 914 if (!jh->b_next_transaction) { journal_commit_transaction() 925 JBUFFER_TRACE(jh, "add to new checkpointing trans"); journal_commit_transaction() 926 __journal_insert_checkpoint(jh, commit_transaction); journal_commit_transaction() 940 if (!jh->b_next_transaction) journal_commit_transaction() 943 JBUFFER_TRACE(jh, "refile or unfile freed buffer"); journal_commit_transaction() 944 __journal_refile_buffer(jh); journal_commit_transaction()
|
H A D | journal.c | 1886 static void journal_free_journal_head(struct journal_head *jh) journal_free_journal_head() argument 1890 memset(jh, JBD_POISON_FREE, sizeof(*jh)); journal_free_journal_head() 1892 kmem_cache_free(journal_head_cache, jh); journal_free_journal_head() 1922 * struct journal_head *jh = journal_add_journal_head(bh); 1926 * jh->b_transaction = xxx; 1928 * journal_put_journal_head(jh); 1938 struct journal_head *jh; journal_add_journal_head() local 1947 jh = bh2jh(bh); journal_add_journal_head() 1958 jh = new_jh; journal_add_journal_head() 1961 bh->b_private = jh; journal_add_journal_head() 1962 jh->b_bh = bh; journal_add_journal_head() 1966 jh->b_jcount++; journal_add_journal_head() 1979 struct journal_head *jh = NULL; journal_grab_journal_head() local 1983 jh = bh2jh(bh); journal_grab_journal_head() 1984 jh->b_jcount++; journal_grab_journal_head() 1987 return jh; journal_grab_journal_head() 1992 struct journal_head *jh = bh2jh(bh); __journal_remove_journal_head() local 1994 J_ASSERT_JH(jh, jh->b_jcount >= 0); __journal_remove_journal_head() 1995 J_ASSERT_JH(jh, jh->b_transaction == NULL); __journal_remove_journal_head() 1996 J_ASSERT_JH(jh, jh->b_next_transaction == NULL); __journal_remove_journal_head() 1997 J_ASSERT_JH(jh, jh->b_cp_transaction == NULL); __journal_remove_journal_head() 1998 J_ASSERT_JH(jh, jh->b_jlist == BJ_None); __journal_remove_journal_head() 2000 J_ASSERT_BH(bh, jh2bh(jh) == bh); __journal_remove_journal_head() 2002 if (jh->b_frozen_data) { __journal_remove_journal_head() 2004 jbd_free(jh->b_frozen_data, bh->b_size); __journal_remove_journal_head() 2006 if (jh->b_committed_data) { __journal_remove_journal_head() 2008 jbd_free(jh->b_committed_data, bh->b_size); __journal_remove_journal_head() 2011 jh->b_bh = NULL; /* debug, really */ __journal_remove_journal_head() 2013 journal_free_journal_head(jh); __journal_remove_journal_head() 2020 void journal_put_journal_head(struct journal_head *jh) journal_put_journal_head() argument 2022 struct buffer_head *bh = jh2bh(jh); journal_put_journal_head() 2025 J_ASSERT_JH(jh, jh->b_jcount > 0); journal_put_journal_head() 2026 --jh->b_jcount; journal_put_journal_head() 2027 if (!jh->b_jcount) { journal_put_journal_head()
|
H A D | revoke.c | 423 int journal_cancel_revoke(handle_t *handle, struct journal_head *jh) journal_cancel_revoke() argument 429 struct buffer_head *bh = jh2bh(jh); journal_cancel_revoke() 431 jbd_debug(4, "journal_head %p, cancelling revoke\n", jh); journal_cancel_revoke() 460 J_ASSERT_JH(jh, record == NULL); journal_cancel_revoke()
|
/linux-4.1.27/fs/jbd2/ |
H A D | checkpoint.c | 33 static inline void __buffer_unlink_first(struct journal_head *jh) __buffer_unlink_first() argument 35 transaction_t *transaction = jh->b_cp_transaction; __buffer_unlink_first() 37 jh->b_cpnext->b_cpprev = jh->b_cpprev; __buffer_unlink_first() 38 jh->b_cpprev->b_cpnext = jh->b_cpnext; __buffer_unlink_first() 39 if (transaction->t_checkpoint_list == jh) { __buffer_unlink_first() 40 transaction->t_checkpoint_list = jh->b_cpnext; __buffer_unlink_first() 41 if (transaction->t_checkpoint_list == jh) __buffer_unlink_first() 51 static inline void __buffer_unlink(struct journal_head *jh) __buffer_unlink() argument 53 transaction_t *transaction = jh->b_cp_transaction; __buffer_unlink() 55 __buffer_unlink_first(jh); __buffer_unlink() 56 if (transaction->t_checkpoint_io_list == jh) { __buffer_unlink() 57 transaction->t_checkpoint_io_list = jh->b_cpnext; __buffer_unlink() 58 if (transaction->t_checkpoint_io_list == jh) __buffer_unlink() 68 static inline void __buffer_relink_io(struct journal_head *jh) __buffer_relink_io() argument 70 transaction_t *transaction = jh->b_cp_transaction; __buffer_relink_io() 72 __buffer_unlink_first(jh); __buffer_relink_io() 75 jh->b_cpnext = jh->b_cpprev = jh; __buffer_relink_io() 77 jh->b_cpnext = transaction->t_checkpoint_io_list; __buffer_relink_io() 78 jh->b_cpprev = transaction->t_checkpoint_io_list->b_cpprev; __buffer_relink_io() 79 jh->b_cpprev->b_cpnext = jh; __buffer_relink_io() 80 jh->b_cpnext->b_cpprev = jh; __buffer_relink_io() 82 transaction->t_checkpoint_io_list = jh; __buffer_relink_io() 92 static int __try_to_free_cp_buf(struct journal_head *jh) __try_to_free_cp_buf() argument 95 struct buffer_head *bh = jh2bh(jh); __try_to_free_cp_buf() 97 if (jh->b_transaction == NULL && !buffer_locked(bh) && __try_to_free_cp_buf() 99 JBUFFER_TRACE(jh, "remove from checkpoint list"); __try_to_free_cp_buf() 100 ret = __jbd2_journal_remove_checkpoint(jh) + 1; __try_to_free_cp_buf() 210 struct journal_head *jh; jbd2_log_do_checkpoint() local 253 jh = transaction->t_checkpoint_list; jbd2_log_do_checkpoint() 254 bh = jh2bh(jh); jbd2_log_do_checkpoint() 265 if (jh->b_transaction != NULL) { jbd2_log_do_checkpoint() 266 transaction_t *t = jh->b_transaction; jbd2_log_do_checkpoint() 290 if (__jbd2_journal_remove_checkpoint(jh)) jbd2_log_do_checkpoint() 307 __buffer_relink_io(jh); jbd2_log_do_checkpoint() 336 jh = transaction->t_checkpoint_io_list; jbd2_log_do_checkpoint() 337 bh = jh2bh(jh); jbd2_log_do_checkpoint() 356 if (__jbd2_journal_remove_checkpoint(jh)) jbd2_log_do_checkpoint() 425 static int journal_clean_one_cp_list(struct journal_head *jh, bool destroy) journal_clean_one_cp_list() argument 428 struct journal_head *next_jh = jh; journal_clean_one_cp_list() 432 if (!jh) journal_clean_one_cp_list() 435 last_jh = jh->b_cpprev; journal_clean_one_cp_list() 437 jh = next_jh; journal_clean_one_cp_list() 438 next_jh = jh->b_cpnext; journal_clean_one_cp_list() 440 ret = __try_to_free_cp_buf(jh); journal_clean_one_cp_list() 442 ret = __jbd2_journal_remove_checkpoint(jh) + 1; journal_clean_one_cp_list() 456 } while (jh != last_jh); journal_clean_one_cp_list() 549 * The function can free jh and bh. 553 int __jbd2_journal_remove_checkpoint(struct journal_head *jh) __jbd2_journal_remove_checkpoint() argument 560 JBUFFER_TRACE(jh, "entry"); __jbd2_journal_remove_checkpoint() 562 if ((transaction = jh->b_cp_transaction) == NULL) { __jbd2_journal_remove_checkpoint() 563 JBUFFER_TRACE(jh, "not on transaction"); __jbd2_journal_remove_checkpoint() 568 JBUFFER_TRACE(jh, "removing from transaction"); __jbd2_journal_remove_checkpoint() 569 __buffer_unlink(jh); __jbd2_journal_remove_checkpoint() 570 jh->b_cp_transaction = NULL; __jbd2_journal_remove_checkpoint() 571 jbd2_journal_put_journal_head(jh); __jbd2_journal_remove_checkpoint() 613 void __jbd2_journal_insert_checkpoint(struct journal_head *jh, __jbd2_journal_insert_checkpoint() argument 616 JBUFFER_TRACE(jh, "entry"); __jbd2_journal_insert_checkpoint() 617 J_ASSERT_JH(jh, buffer_dirty(jh2bh(jh)) || buffer_jbddirty(jh2bh(jh))); __jbd2_journal_insert_checkpoint() 618 J_ASSERT_JH(jh, jh->b_cp_transaction == NULL); __jbd2_journal_insert_checkpoint() 621 jbd2_journal_grab_journal_head(jh2bh(jh)); __jbd2_journal_insert_checkpoint() 622 jh->b_cp_transaction = transaction; __jbd2_journal_insert_checkpoint() 625 jh->b_cpnext = jh->b_cpprev = jh; __jbd2_journal_insert_checkpoint() 627 jh->b_cpnext = transaction->t_checkpoint_list; __jbd2_journal_insert_checkpoint() 628 jh->b_cpprev = transaction->t_checkpoint_list->b_cpprev; __jbd2_journal_insert_checkpoint() 629 jh->b_cpprev->b_cpnext = jh; __jbd2_journal_insert_checkpoint() 630 jh->b_cpnext->b_cpprev = jh; __jbd2_journal_insert_checkpoint() 632 transaction->t_checkpoint_list = jh; __jbd2_journal_insert_checkpoint()
|
H A D | transaction.c | 35 static void __jbd2_journal_temp_unlink_buffer(struct journal_head *jh); 36 static void __jbd2_journal_unfile_buffer(struct journal_head *jh); 775 do_get_write_access(handle_t *handle, struct journal_head *jh, do_get_write_access() argument 790 jbd_debug(5, "journal_head %p, force_copy %d\n", jh, force_copy); do_get_write_access() 792 JBUFFER_TRACE(jh, "entry"); do_get_write_access() 794 bh = jh2bh(jh); do_get_write_access() 826 if (jh->b_transaction) { do_get_write_access() 827 J_ASSERT_JH(jh, do_get_write_access() 828 jh->b_transaction == transaction || do_get_write_access() 829 jh->b_transaction == do_get_write_access() 831 if (jh->b_next_transaction) do_get_write_access() 832 J_ASSERT_JH(jh, jh->b_next_transaction == do_get_write_access() 841 JBUFFER_TRACE(jh, "Journalling dirty buffer"); do_get_write_access() 859 if (jh->b_transaction == transaction || do_get_write_access() 860 jh->b_next_transaction == transaction) do_get_write_access() 867 jh->b_modified = 0; do_get_write_access() 873 if (jh->b_frozen_data) { do_get_write_access() 874 JBUFFER_TRACE(jh, "has frozen data"); do_get_write_access() 875 J_ASSERT_JH(jh, jh->b_next_transaction == NULL); do_get_write_access() 876 jh->b_next_transaction = transaction; do_get_write_access() 882 if (jh->b_transaction && jh->b_transaction != transaction) { do_get_write_access() 883 JBUFFER_TRACE(jh, "owned by older transaction"); do_get_write_access() 884 J_ASSERT_JH(jh, jh->b_next_transaction == NULL); do_get_write_access() 885 J_ASSERT_JH(jh, jh->b_transaction == do_get_write_access() 898 JBUFFER_TRACE(jh, "on shadow: sleep"); do_get_write_access() 919 if (jh->b_jlist == BJ_Metadata || force_copy) { do_get_write_access() 920 JBUFFER_TRACE(jh, "generate frozen data"); do_get_write_access() 922 JBUFFER_TRACE(jh, "allocate memory for buffer"); do_get_write_access() 925 jbd2_alloc(jh2bh(jh)->b_size, do_get_write_access() 931 JBUFFER_TRACE(jh, "oom!"); do_get_write_access() 938 jh->b_frozen_data = frozen_buffer; do_get_write_access() 942 jh->b_next_transaction = transaction; do_get_write_access() 951 if (!jh->b_transaction) { do_get_write_access() 952 JBUFFER_TRACE(jh, "no transaction"); do_get_write_access() 953 J_ASSERT_JH(jh, !jh->b_next_transaction); do_get_write_access() 954 JBUFFER_TRACE(jh, "file as BJ_Reserved"); do_get_write_access() 956 __jbd2_journal_file_buffer(jh, transaction, BJ_Reserved); do_get_write_access() 966 J_EXPECT_JH(jh, buffer_uptodate(jh2bh(jh)), do_get_write_access() 968 page = jh2bh(jh)->b_page; do_get_write_access() 969 offset = offset_in_page(jh2bh(jh)->b_data); do_get_write_access() 972 jbd2_buffer_frozen_trigger(jh, source + offset, do_get_write_access() 973 jh->b_triggers); do_get_write_access() 974 memcpy(jh->b_frozen_data, source+offset, jh2bh(jh)->b_size); do_get_write_access() 981 jh->b_frozen_triggers = jh->b_triggers; do_get_write_access() 989 jbd2_journal_cancel_revoke(handle, jh); do_get_write_access() 995 JBUFFER_TRACE(jh, "exit"); do_get_write_access() 1012 struct journal_head *jh = jbd2_journal_add_journal_head(bh); jbd2_journal_get_write_access() local 1018 rc = do_get_write_access(handle, jh, 0); jbd2_journal_get_write_access() 1019 jbd2_journal_put_journal_head(jh); jbd2_journal_get_write_access() 1047 struct journal_head *jh = jbd2_journal_add_journal_head(bh); jbd2_journal_get_create_access() local 1050 jbd_debug(5, "journal_head %p\n", jh); jbd2_journal_get_create_access() 1057 JBUFFER_TRACE(jh, "entry"); jbd2_journal_get_create_access() 1066 J_ASSERT_JH(jh, (jh->b_transaction == transaction || jbd2_journal_get_create_access() 1067 jh->b_transaction == NULL || jbd2_journal_get_create_access() 1068 (jh->b_transaction == journal->j_committing_transaction && jbd2_journal_get_create_access() 1069 jh->b_jlist == BJ_Forget))); jbd2_journal_get_create_access() 1071 J_ASSERT_JH(jh, jh->b_next_transaction == NULL); jbd2_journal_get_create_access() 1072 J_ASSERT_JH(jh, buffer_locked(jh2bh(jh))); jbd2_journal_get_create_access() 1074 if (jh->b_transaction == NULL) { jbd2_journal_get_create_access() 1083 clear_buffer_dirty(jh2bh(jh)); jbd2_journal_get_create_access() 1085 jh->b_modified = 0; jbd2_journal_get_create_access() 1087 JBUFFER_TRACE(jh, "file as BJ_Reserved"); jbd2_journal_get_create_access() 1089 __jbd2_journal_file_buffer(jh, transaction, BJ_Reserved); jbd2_journal_get_create_access() 1090 } else if (jh->b_transaction == journal->j_committing_transaction) { jbd2_journal_get_create_access() 1092 jh->b_modified = 0; jbd2_journal_get_create_access() 1094 JBUFFER_TRACE(jh, "set next transaction"); jbd2_journal_get_create_access() 1096 jh->b_next_transaction = transaction; jbd2_journal_get_create_access() 1108 JBUFFER_TRACE(jh, "cancelling revoke"); jbd2_journal_get_create_access() 1109 jbd2_journal_cancel_revoke(handle, jh); jbd2_journal_get_create_access() 1111 jbd2_journal_put_journal_head(jh); jbd2_journal_get_create_access() 1144 struct journal_head *jh = jbd2_journal_add_journal_head(bh); jbd2_journal_get_undo_access() local 1147 JBUFFER_TRACE(jh, "entry"); jbd2_journal_get_undo_access() 1154 err = do_get_write_access(handle, jh, 1); jbd2_journal_get_undo_access() 1159 if (!jh->b_committed_data) { jbd2_journal_get_undo_access() 1160 committed_data = jbd2_alloc(jh2bh(jh)->b_size, GFP_NOFS); jbd2_journal_get_undo_access() 1170 if (!jh->b_committed_data) { jbd2_journal_get_undo_access() 1173 JBUFFER_TRACE(jh, "generate b_committed data"); jbd2_journal_get_undo_access() 1179 jh->b_committed_data = committed_data; jbd2_journal_get_undo_access() 1181 memcpy(jh->b_committed_data, bh->b_data, bh->b_size); jbd2_journal_get_undo_access() 1185 jbd2_journal_put_journal_head(jh); jbd2_journal_get_undo_access() 1205 struct journal_head *jh = jbd2_journal_grab_journal_head(bh); jbd2_journal_set_triggers() local 1207 if (WARN_ON(!jh)) jbd2_journal_set_triggers() 1209 jh->b_triggers = type; jbd2_journal_set_triggers() 1210 jbd2_journal_put_journal_head(jh); jbd2_journal_set_triggers() 1213 void jbd2_buffer_frozen_trigger(struct journal_head *jh, void *mapped_data, jbd2_buffer_frozen_trigger() argument 1216 struct buffer_head *bh = jh2bh(jh); jbd2_buffer_frozen_trigger() 1224 void jbd2_buffer_abort_trigger(struct journal_head *jh, jbd2_buffer_abort_trigger() argument 1230 triggers->t_abort(triggers, jh2bh(jh)); jbd2_buffer_abort_trigger() 1262 struct journal_head *jh; jbd2_journal_dirty_metadata() local 1268 jh = jbd2_journal_grab_journal_head(bh); jbd2_journal_dirty_metadata() 1269 if (!jh) { jbd2_journal_dirty_metadata() 1273 jbd_debug(5, "journal_head %p\n", jh); jbd2_journal_dirty_metadata() 1274 JBUFFER_TRACE(jh, "entry"); jbd2_journal_dirty_metadata() 1278 if (jh->b_modified == 0) { jbd2_journal_dirty_metadata() 1284 jh->b_modified = 1; jbd2_journal_dirty_metadata() 1299 if (jh->b_transaction == transaction && jh->b_jlist == BJ_Metadata) { jbd2_journal_dirty_metadata() 1300 JBUFFER_TRACE(jh, "fastpath"); jbd2_journal_dirty_metadata() 1301 if (unlikely(jh->b_transaction != jbd2_journal_dirty_metadata() 1304 "jh->b_transaction (%llu, %p, %u) != " jbd2_journal_dirty_metadata() 1308 jh->b_transaction, jbd2_journal_dirty_metadata() 1309 jh->b_transaction ? jh->b_transaction->t_tid : 0, jbd2_journal_dirty_metadata() 1326 if (jh->b_transaction != transaction) { jbd2_journal_dirty_metadata() 1327 JBUFFER_TRACE(jh, "already on other transaction"); jbd2_journal_dirty_metadata() 1328 if (unlikely(((jh->b_transaction != jbd2_journal_dirty_metadata() 1330 (jh->b_next_transaction != transaction))) { jbd2_journal_dirty_metadata() 1332 "bad jh for block %llu: " jbd2_journal_dirty_metadata() 1334 "jh->b_transaction (%p, %u), " jbd2_journal_dirty_metadata() 1335 "jh->b_next_transaction (%p, %u), jlist %u\n", jbd2_journal_dirty_metadata() 1339 jh->b_transaction, jbd2_journal_dirty_metadata() 1340 jh->b_transaction ? jbd2_journal_dirty_metadata() 1341 jh->b_transaction->t_tid : 0, jbd2_journal_dirty_metadata() 1342 jh->b_next_transaction, jbd2_journal_dirty_metadata() 1343 jh->b_next_transaction ? jbd2_journal_dirty_metadata() 1344 jh->b_next_transaction->t_tid : 0, jbd2_journal_dirty_metadata() 1345 jh->b_jlist); jbd2_journal_dirty_metadata() 1355 J_ASSERT_JH(jh, jh->b_frozen_data == NULL); jbd2_journal_dirty_metadata() 1357 JBUFFER_TRACE(jh, "file as BJ_Metadata"); jbd2_journal_dirty_metadata() 1359 __jbd2_journal_file_buffer(jh, transaction, BJ_Metadata); jbd2_journal_dirty_metadata() 1363 jbd2_journal_put_journal_head(jh); jbd2_journal_dirty_metadata() 1365 JBUFFER_TRACE(jh, "exit"); jbd2_journal_dirty_metadata() 1390 struct journal_head *jh; jbd2_journal_forget() local 1405 jh = bh2jh(bh); jbd2_journal_forget() 1409 if (!J_EXPECT_JH(jh, !jh->b_committed_data, jbd2_journal_forget() 1416 was_modified = jh->b_modified; jbd2_journal_forget() 1422 jh->b_modified = 0; jbd2_journal_forget() 1424 if (jh->b_transaction == transaction) { jbd2_journal_forget() 1425 J_ASSERT_JH(jh, !jh->b_frozen_data); jbd2_journal_forget() 1433 JBUFFER_TRACE(jh, "belongs to current transaction: unfile"); jbd2_journal_forget() 1455 if (jh->b_cp_transaction) { jbd2_journal_forget() 1456 __jbd2_journal_temp_unlink_buffer(jh); jbd2_journal_forget() 1457 __jbd2_journal_file_buffer(jh, transaction, BJ_Forget); jbd2_journal_forget() 1459 __jbd2_journal_unfile_buffer(jh); jbd2_journal_forget() 1468 } else if (jh->b_transaction) { jbd2_journal_forget() 1469 J_ASSERT_JH(jh, (jh->b_transaction == jbd2_journal_forget() 1473 JBUFFER_TRACE(jh, "belongs to older transaction"); jbd2_journal_forget() 1477 if (jh->b_next_transaction) { jbd2_journal_forget() 1478 J_ASSERT(jh->b_next_transaction == transaction); jbd2_journal_forget() 1480 jh->b_next_transaction = NULL; jbd2_journal_forget() 1694 * jbd_lock_bh_state(jh2bh(jh)) is held. 1698 __blist_add_buffer(struct journal_head **list, struct journal_head *jh) __blist_add_buffer() argument 1701 jh->b_tnext = jh->b_tprev = jh; __blist_add_buffer() 1702 *list = jh; __blist_add_buffer() 1706 jh->b_tprev = last; __blist_add_buffer() 1707 jh->b_tnext = first; __blist_add_buffer() 1708 last->b_tnext = first->b_tprev = jh; __blist_add_buffer() 1718 * jbd_lock_bh_state(jh2bh(jh)) is held. 1722 __blist_del_buffer(struct journal_head **list, struct journal_head *jh) __blist_del_buffer() argument 1724 if (*list == jh) { __blist_del_buffer() 1725 *list = jh->b_tnext; __blist_del_buffer() 1726 if (*list == jh) __blist_del_buffer() 1729 jh->b_tprev->b_tnext = jh->b_tnext; __blist_del_buffer() 1730 jh->b_tnext->b_tprev = jh->b_tprev; __blist_del_buffer() 1744 static void __jbd2_journal_temp_unlink_buffer(struct journal_head *jh) __jbd2_journal_temp_unlink_buffer() argument 1748 struct buffer_head *bh = jh2bh(jh); __jbd2_journal_temp_unlink_buffer() 1750 J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh)); __jbd2_journal_temp_unlink_buffer() 1751 transaction = jh->b_transaction; __jbd2_journal_temp_unlink_buffer() 1755 J_ASSERT_JH(jh, jh->b_jlist < BJ_Types); __jbd2_journal_temp_unlink_buffer() 1756 if (jh->b_jlist != BJ_None) __jbd2_journal_temp_unlink_buffer() 1757 J_ASSERT_JH(jh, transaction != NULL); __jbd2_journal_temp_unlink_buffer() 1759 switch (jh->b_jlist) { __jbd2_journal_temp_unlink_buffer() 1764 J_ASSERT_JH(jh, transaction->t_nr_buffers >= 0); __jbd2_journal_temp_unlink_buffer() 1778 __blist_del_buffer(list, jh); __jbd2_journal_temp_unlink_buffer() 1779 jh->b_jlist = BJ_None; __jbd2_journal_temp_unlink_buffer() 1789 * jh and bh may be already freed when this function returns. 1791 static void __jbd2_journal_unfile_buffer(struct journal_head *jh) __jbd2_journal_unfile_buffer() argument 1793 __jbd2_journal_temp_unlink_buffer(jh); __jbd2_journal_unfile_buffer() 1794 jh->b_transaction = NULL; __jbd2_journal_unfile_buffer() 1795 jbd2_journal_put_journal_head(jh); __jbd2_journal_unfile_buffer() 1798 void jbd2_journal_unfile_buffer(journal_t *journal, struct journal_head *jh) jbd2_journal_unfile_buffer() argument 1800 struct buffer_head *bh = jh2bh(jh); jbd2_journal_unfile_buffer() 1806 __jbd2_journal_unfile_buffer(jh); jbd2_journal_unfile_buffer() 1820 struct journal_head *jh; __journal_try_to_free_buffer() local 1822 jh = bh2jh(bh); __journal_try_to_free_buffer() 1827 if (jh->b_next_transaction != NULL || jh->b_transaction != NULL) __journal_try_to_free_buffer() 1831 if (jh->b_cp_transaction != NULL) { __journal_try_to_free_buffer() 1833 JBUFFER_TRACE(jh, "remove from checkpoint list"); __journal_try_to_free_buffer() 1834 __jbd2_journal_remove_checkpoint(jh); __journal_try_to_free_buffer() 1891 struct journal_head *jh; jbd2_journal_try_to_free_buffers() local 1898 jh = jbd2_journal_grab_journal_head(bh); jbd2_journal_try_to_free_buffers() 1899 if (!jh) jbd2_journal_try_to_free_buffers() 1904 jbd2_journal_put_journal_head(jh); jbd2_journal_try_to_free_buffers() 1928 static int __dispose_buffer(struct journal_head *jh, transaction_t *transaction) __dispose_buffer() argument 1931 struct buffer_head *bh = jh2bh(jh); __dispose_buffer() 1933 if (jh->b_cp_transaction) { __dispose_buffer() 1934 JBUFFER_TRACE(jh, "on running+cp transaction"); __dispose_buffer() 1935 __jbd2_journal_temp_unlink_buffer(jh); __dispose_buffer() 1942 __jbd2_journal_file_buffer(jh, transaction, BJ_Forget); __dispose_buffer() 1945 JBUFFER_TRACE(jh, "on running transaction"); __dispose_buffer() 1946 __jbd2_journal_unfile_buffer(jh); __dispose_buffer() 2002 struct journal_head *jh; journal_unmap_buffer() local 2021 jh = jbd2_journal_grab_journal_head(bh); journal_unmap_buffer() 2022 if (!jh) journal_unmap_buffer() 2048 transaction = jh->b_transaction; journal_unmap_buffer() 2054 if (!jh->b_cp_transaction) { journal_unmap_buffer() 2055 JBUFFER_TRACE(jh, "not on any transaction: zap"); journal_unmap_buffer() 2072 JBUFFER_TRACE(jh, "checkpointed: add to BJ_Forget"); journal_unmap_buffer() 2073 may_free = __dispose_buffer(jh, journal_unmap_buffer() 2082 JBUFFER_TRACE(jh, "give to committing trans"); journal_unmap_buffer() 2083 may_free = __dispose_buffer(jh, journal_unmap_buffer() 2094 JBUFFER_TRACE(jh, "on committing transaction"); journal_unmap_buffer() 2101 jbd2_journal_put_journal_head(jh); journal_unmap_buffer() 2115 jh->b_next_transaction = journal->j_running_transaction; journal_unmap_buffer() 2116 jbd2_journal_put_journal_head(jh); journal_unmap_buffer() 2128 J_ASSERT_JH(jh, transaction == journal->j_running_transaction); journal_unmap_buffer() 2129 JBUFFER_TRACE(jh, "on running transaction"); journal_unmap_buffer() 2130 may_free = __dispose_buffer(jh, transaction); journal_unmap_buffer() 2142 jh->b_modified = 0; journal_unmap_buffer() 2143 jbd2_journal_put_journal_head(jh); journal_unmap_buffer() 2227 void __jbd2_journal_file_buffer(struct journal_head *jh, __jbd2_journal_file_buffer() argument 2232 struct buffer_head *bh = jh2bh(jh); __jbd2_journal_file_buffer() 2234 J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh)); __jbd2_journal_file_buffer() 2237 J_ASSERT_JH(jh, jh->b_jlist < BJ_Types); __jbd2_journal_file_buffer() 2238 J_ASSERT_JH(jh, jh->b_transaction == transaction || __jbd2_journal_file_buffer() 2239 jh->b_transaction == NULL); __jbd2_journal_file_buffer() 2241 if (jh->b_transaction && jh->b_jlist == jlist) __jbd2_journal_file_buffer() 2260 if (jh->b_transaction) __jbd2_journal_file_buffer() 2261 __jbd2_journal_temp_unlink_buffer(jh); __jbd2_journal_file_buffer() 2264 jh->b_transaction = transaction; __jbd2_journal_file_buffer() 2268 J_ASSERT_JH(jh, !jh->b_committed_data); __jbd2_journal_file_buffer() 2269 J_ASSERT_JH(jh, !jh->b_frozen_data); __jbd2_journal_file_buffer() 2286 __blist_add_buffer(list, jh); __jbd2_journal_file_buffer() 2287 jh->b_jlist = jlist; __jbd2_journal_file_buffer() 2293 void jbd2_journal_file_buffer(struct journal_head *jh, jbd2_journal_file_buffer() argument 2296 jbd_lock_bh_state(jh2bh(jh)); jbd2_journal_file_buffer() 2298 __jbd2_journal_file_buffer(jh, transaction, jlist); jbd2_journal_file_buffer() 2300 jbd_unlock_bh_state(jh2bh(jh)); jbd2_journal_file_buffer() 2310 * Called under jbd_lock_bh_state(jh2bh(jh)) 2312 * jh and bh may be already free when this function returns 2314 void __jbd2_journal_refile_buffer(struct journal_head *jh) __jbd2_journal_refile_buffer() argument 2317 struct buffer_head *bh = jh2bh(jh); __jbd2_journal_refile_buffer() 2319 J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh)); __jbd2_journal_refile_buffer() 2320 if (jh->b_transaction) __jbd2_journal_refile_buffer() 2321 assert_spin_locked(&jh->b_transaction->t_journal->j_list_lock); __jbd2_journal_refile_buffer() 2324 if (jh->b_next_transaction == NULL) { __jbd2_journal_refile_buffer() 2325 __jbd2_journal_unfile_buffer(jh); __jbd2_journal_refile_buffer() 2335 __jbd2_journal_temp_unlink_buffer(jh); __jbd2_journal_refile_buffer() 2338 * our jh reference and thus __jbd2_journal_file_buffer() must not __jbd2_journal_refile_buffer() 2341 jh->b_transaction = jh->b_next_transaction; __jbd2_journal_refile_buffer() 2342 jh->b_next_transaction = NULL; __jbd2_journal_refile_buffer() 2345 else if (jh->b_modified) __jbd2_journal_refile_buffer() 2349 __jbd2_journal_file_buffer(jh, jh->b_transaction, jlist); __jbd2_journal_refile_buffer() 2350 J_ASSERT_JH(jh, jh->b_transaction->t_state == T_RUNNING); __jbd2_journal_refile_buffer() 2360 * The jh and bh may be freed by this call. 2362 void jbd2_journal_refile_buffer(journal_t *journal, struct journal_head *jh) jbd2_journal_refile_buffer() argument 2364 struct buffer_head *bh = jh2bh(jh); jbd2_journal_refile_buffer() 2370 __jbd2_journal_refile_buffer(jh); jbd2_journal_refile_buffer()
|
H A D | commit.c | 374 struct journal_head *jh; jbd2_journal_commit_transaction() local 490 jh = commit_transaction->t_reserved_list; jbd2_journal_commit_transaction() 491 JBUFFER_TRACE(jh, "reserved, unused: refile"); jbd2_journal_commit_transaction() 496 if (jh->b_committed_data) { jbd2_journal_commit_transaction() 497 struct buffer_head *bh = jh2bh(jh); jbd2_journal_commit_transaction() 500 jbd2_free(jh->b_committed_data, bh->b_size); jbd2_journal_commit_transaction() 501 jh->b_committed_data = NULL; jbd2_journal_commit_transaction() 504 jbd2_journal_refile_buffer(journal, jh); jbd2_journal_commit_transaction() 591 jh = commit_transaction->t_buffers; jbd2_journal_commit_transaction() 597 clear_buffer_jbddirty(jh2bh(jh)); jbd2_journal_commit_transaction() 598 JBUFFER_TRACE(jh, "journal is aborting: refile"); jbd2_journal_commit_transaction() 599 jbd2_buffer_abort_trigger(jh, jbd2_journal_commit_transaction() 600 jh->b_frozen_data ? jbd2_journal_commit_transaction() 601 jh->b_frozen_triggers : jbd2_journal_commit_transaction() 602 jh->b_triggers); jbd2_journal_commit_transaction() 603 jbd2_journal_refile_buffer(journal, jh); jbd2_journal_commit_transaction() 670 atomic_inc(&jh2bh(jh)->b_count); jbd2_journal_commit_transaction() 676 set_bit(BH_JWrite, &jh2bh(jh)->b_state); jbd2_journal_commit_transaction() 677 JBUFFER_TRACE(jh, "ph3: write metadata"); jbd2_journal_commit_transaction() 679 jh, &wbuf[bufs], blocknr); jbd2_journal_commit_transaction() 696 write_tag_block(journal, tag, jh2bh(jh)->b_blocknr); jbd2_journal_commit_transaction() 845 jh = commit_transaction->t_shadow_list->b_tprev; jbd2_journal_commit_transaction() 846 bh = jh2bh(jh); jbd2_journal_commit_transaction() 855 JBUFFER_TRACE(jh, "file as BJ_Forget"); jbd2_journal_commit_transaction() 856 jbd2_journal_file_buffer(jh, commit_transaction, BJ_Forget); jbd2_journal_commit_transaction() 857 JBUFFER_TRACE(jh, "brelse shadowed buffer"); jbd2_journal_commit_transaction() 941 jh = commit_transaction->t_forget; jbd2_journal_commit_transaction() 943 bh = jh2bh(jh); jbd2_journal_commit_transaction() 950 J_ASSERT_JH(jh, jh->b_transaction == commit_transaction); jbd2_journal_commit_transaction() 965 if (jh->b_committed_data) { jbd2_journal_commit_transaction() 966 jbd2_free(jh->b_committed_data, bh->b_size); jbd2_journal_commit_transaction() 967 jh->b_committed_data = NULL; jbd2_journal_commit_transaction() 968 if (jh->b_frozen_data) { jbd2_journal_commit_transaction() 969 jh->b_committed_data = jh->b_frozen_data; jbd2_journal_commit_transaction() 970 jh->b_frozen_data = NULL; jbd2_journal_commit_transaction() 971 jh->b_frozen_triggers = NULL; jbd2_journal_commit_transaction() 973 } else if (jh->b_frozen_data) { jbd2_journal_commit_transaction() 974 jbd2_free(jh->b_frozen_data, bh->b_size); jbd2_journal_commit_transaction() 975 jh->b_frozen_data = NULL; jbd2_journal_commit_transaction() 976 jh->b_frozen_triggers = NULL; jbd2_journal_commit_transaction() 980 cp_transaction = jh->b_cp_transaction; jbd2_journal_commit_transaction() 982 JBUFFER_TRACE(jh, "remove from old cp transaction"); jbd2_journal_commit_transaction() 984 __jbd2_journal_remove_checkpoint(jh); jbd2_journal_commit_transaction() 1013 jh->b_modified = 0; jbd2_journal_commit_transaction() 1014 if (!jh->b_next_transaction) { jbd2_journal_commit_transaction() 1025 JBUFFER_TRACE(jh, "add to new checkpointing trans"); jbd2_journal_commit_transaction() 1026 __jbd2_journal_insert_checkpoint(jh, commit_transaction); jbd2_journal_commit_transaction() 1040 if (!jh->b_next_transaction) jbd2_journal_commit_transaction() 1043 JBUFFER_TRACE(jh, "refile or unfile buffer"); jbd2_journal_commit_transaction() 1044 __jbd2_journal_refile_buffer(jh); jbd2_journal_commit_transaction()
|
H A D | journal.c | 2417 static void journal_free_journal_head(struct journal_head *jh) journal_free_journal_head() argument 2421 memset(jh, JBD2_POISON_FREE, sizeof(*jh)); journal_free_journal_head() 2423 kmem_cache_free(jbd2_journal_head_cache, jh); journal_free_journal_head() 2453 * struct journal_head *jh = jbd2_journal_add_journal_head(bh); 2457 * jh->b_transaction = xxx; 2459 * jbd2_journal_put_journal_head(jh); 2469 struct journal_head *jh; jbd2_journal_add_journal_head() local 2478 jh = bh2jh(bh); jbd2_journal_add_journal_head() 2489 jh = new_jh; jbd2_journal_add_journal_head() 2492 bh->b_private = jh; jbd2_journal_add_journal_head() 2493 jh->b_bh = bh; jbd2_journal_add_journal_head() 2497 jh->b_jcount++; jbd2_journal_add_journal_head() 2510 struct journal_head *jh = NULL; jbd2_journal_grab_journal_head() local 2514 jh = bh2jh(bh); jbd2_journal_grab_journal_head() 2515 jh->b_jcount++; jbd2_journal_grab_journal_head() 2518 return jh; jbd2_journal_grab_journal_head() 2523 struct journal_head *jh = bh2jh(bh); __journal_remove_journal_head() local 2525 J_ASSERT_JH(jh, jh->b_jcount >= 0); __journal_remove_journal_head() 2526 J_ASSERT_JH(jh, jh->b_transaction == NULL); __journal_remove_journal_head() 2527 J_ASSERT_JH(jh, jh->b_next_transaction == NULL); __journal_remove_journal_head() 2528 J_ASSERT_JH(jh, jh->b_cp_transaction == NULL); __journal_remove_journal_head() 2529 J_ASSERT_JH(jh, jh->b_jlist == BJ_None); __journal_remove_journal_head() 2531 J_ASSERT_BH(bh, jh2bh(jh) == bh); __journal_remove_journal_head() 2533 if (jh->b_frozen_data) { __journal_remove_journal_head() 2535 jbd2_free(jh->b_frozen_data, bh->b_size); __journal_remove_journal_head() 2537 if (jh->b_committed_data) { __journal_remove_journal_head() 2539 jbd2_free(jh->b_committed_data, bh->b_size); __journal_remove_journal_head() 2542 jh->b_bh = NULL; /* debug, really */ __journal_remove_journal_head() 2544 journal_free_journal_head(jh); __journal_remove_journal_head() 2551 void jbd2_journal_put_journal_head(struct journal_head *jh) jbd2_journal_put_journal_head() argument 2553 struct buffer_head *bh = jh2bh(jh); jbd2_journal_put_journal_head() 2556 J_ASSERT_JH(jh, jh->b_jcount > 0); jbd2_journal_put_journal_head() 2557 --jh->b_jcount; jbd2_journal_put_journal_head() 2558 if (!jh->b_jcount) { jbd2_journal_put_journal_head()
|
H A D | revoke.c | 420 int jbd2_journal_cancel_revoke(handle_t *handle, struct journal_head *jh) jbd2_journal_cancel_revoke() argument 426 struct buffer_head *bh = jh2bh(jh); jbd2_journal_cancel_revoke() 428 jbd_debug(4, "journal_head %p, cancelling revoke\n", jh); jbd2_journal_cancel_revoke() 457 J_ASSERT_JH(jh, record == NULL); jbd2_journal_cancel_revoke()
|
/linux-4.1.27/include/linux/ |
H A D | jbd_common.h | 6 static inline struct buffer_head *jh2bh(struct journal_head *jh) jh2bh() argument 8 return jh->b_bh; jh2bh()
|
H A D | jbd.h | 253 BH_JournalHead, /* Pins bh->b_private and jh->b_bh */ 273 #define J_ASSERT_JH(jh, expr) J_ASSERT(expr) 278 #define J_EXPECT_JH(jh, expr, why...) J_ASSERT_JH(jh, expr) 292 #define J_EXPECT_JH(jh, expr, why...) __journal_expect(expr, ## why) 902 void journal_put_journal_head(struct journal_head *jh); 1043 #define JBUFFER_TRACE(jh, info) do {} while (0)
|
H A D | jbd2.h | 321 BH_JournalHead, /* Pins bh->b_private and jh->b_bh */ 344 #define J_ASSERT_JH(jh, expr) J_ASSERT(expr) 349 #define J_EXPECT_JH(jh, expr, why...) J_ASSERT_JH(jh, expr) 364 #define J_EXPECT_JH(jh, expr, why...) __journal_expect(expr, ## why) 1075 extern void jbd2_buffer_frozen_trigger(struct journal_head *jh, 1078 extern void jbd2_buffer_abort_trigger(struct journal_head *jh, 1183 void jbd2_journal_put_journal_head(struct journal_head *jh); 1405 #define JBUFFER_TRACE(jh, info) do {} while (0)
|
/linux-4.1.27/fs/logfs/ |
H A D | journal.c | 142 struct logfs_journal_header *jh = from; unpack() local 147 inlen = be16_to_cpu(jh->h_len); unpack() 148 outlen = be16_to_cpu(jh->h_datalen); unpack() 150 if (jh->h_compr == COMPR_NONE) unpack() 160 struct logfs_journal_header *jh) __read_je_header() 169 err = wbuf_read(sb, ofs, sizeof(*jh), jh); __read_je_header() 172 type = be16_to_cpu(jh->h_type); __read_je_header() 173 len = be16_to_cpu(jh->h_len); __read_je_header() 174 datalen = be16_to_cpu(jh->h_datalen); __read_je_header() 185 struct logfs_journal_header *jh) __read_je_payload() 190 len = be16_to_cpu(jh->h_len); __read_je_payload() 191 err = wbuf_read(sb, ofs + sizeof(*jh), len, jh + 1); __read_je_payload() 194 if (jh->h_crc != logfs_crc32(jh, len + sizeof(*jh), 4)) { __read_je_payload() 200 if (jh->h_crc == logfs_crc32(jh, len, 4)) __read_je_payload() 209 * jh needs to be large enough to hold the complete entry, not just the header 212 struct logfs_journal_header *jh) __read_je() 216 err = __read_je_header(sb, ofs, jh); __read_je() 219 return __read_je_payload(sb, ofs, jh); __read_je() 225 struct logfs_journal_header *jh = super->s_compressed_je; read_je() local 230 err = __read_je(sb, ofs, jh); read_je() 233 type = be16_to_cpu(jh->h_type); read_je() 234 datalen = be16_to_cpu(jh->h_datalen); read_je() 238 read_dynsb(sb, unpack(jh, scratch)); read_je() 241 read_anchor(sb, unpack(jh, scratch)); read_je() 244 read_erasecount(sb, unpack(jh, scratch)); read_je() 247 err = read_area(sb, unpack(jh, scratch)); read_je() 250 err = logfs_load_object_aliases(sb, unpack(jh, scratch), read_je() 263 struct logfs_journal_header *jh = super->s_compressed_je; logfs_read_segment() local 270 for (h_ofs = 0; h_ofs < super->s_segsize; h_ofs += sizeof(*jh)) { logfs_read_segment() 272 err = __read_je_header(sb, ofs, jh); logfs_read_segment() 275 if (jh->h_type != cpu_to_be16(JE_COMMIT)) logfs_read_segment() 277 err = __read_je_payload(sb, ofs, jh); logfs_read_segment() 280 len = be16_to_cpu(jh->h_len); logfs_read_segment() 281 datalen = be16_to_cpu(jh->h_datalen); logfs_read_segment() 287 h_ofs += ALIGN(len, sizeof(*jh)) - sizeof(*jh); logfs_read_segment() 294 err = __read_je(sb, ofs, jh); logfs_read_segment() 299 unpack(jh, super->s_je_array); logfs_read_segment() 421 struct logfs_journal_header *jh, size_t len, size_t datalen, __logfs_write_header() 424 jh->h_len = cpu_to_be16(len); __logfs_write_header() 425 jh->h_type = cpu_to_be16(type); __logfs_write_header() 426 jh->h_datalen = cpu_to_be16(datalen); __logfs_write_header() 427 jh->h_compr = compr; __logfs_write_header() 428 jh->h_pad[0] = 'H'; __logfs_write_header() 429 jh->h_pad[1] = 'E'; __logfs_write_header() 430 jh->h_pad[2] = 'A'; __logfs_write_header() 431 jh->h_pad[3] = 'D'; __logfs_write_header() 432 jh->h_pad[4] = 'R'; __logfs_write_header() 433 jh->h_crc = logfs_crc32(jh, len + sizeof(*jh), 4); __logfs_write_header() 434 return ALIGN(len, 16) + sizeof(*jh); __logfs_write_header() 438 struct logfs_journal_header *jh, size_t datalen, u16 type) logfs_write_header() 442 return __logfs_write_header(super, jh, len, datalen, type, COMPR_NONE); logfs_write_header() 655 struct logfs_journal_header *jh = super->s_compressed_je; logfs_write_je_buf() local 661 if (jh->h_type == cpu_to_be16(JE_COMMIT)) logfs_write_je_buf() 159 __read_je_header(struct super_block *sb, u64 ofs, struct logfs_journal_header *jh) __read_je_header() argument 184 __read_je_payload(struct super_block *sb, u64 ofs, struct logfs_journal_header *jh) __read_je_payload() argument 211 __read_je(struct super_block *sb, u64 ofs, struct logfs_journal_header *jh) __read_je() argument 420 __logfs_write_header(struct logfs_super *super, struct logfs_journal_header *jh, size_t len, size_t datalen, u16 type, u8 compr) __logfs_write_header() argument 437 logfs_write_header(struct logfs_super *super, struct logfs_journal_header *jh, size_t datalen, u16 type) logfs_write_header() argument
|
/linux-4.1.27/fs/reiserfs/ |
H A D | journal.c | 716 struct reiserfs_jh *jh; alloc_jh() local 718 jh = kmalloc(sizeof(*jh), GFP_NOFS); alloc_jh() 719 if (jh) { alloc_jh() 721 return jh; alloc_jh() 728 * we want to free the jh when the buffer has been written 733 struct reiserfs_jh *jh; reiserfs_free_jh() local 735 jh = bh->b_private; reiserfs_free_jh() 736 if (jh) { reiserfs_free_jh() 738 jh->bh = NULL; reiserfs_free_jh() 739 list_del_init(&jh->list); reiserfs_free_jh() 740 kfree(jh); reiserfs_free_jh() 751 struct reiserfs_jh *jh; __add_jh() local 759 jh = bh->b_private; __add_jh() 760 list_del_init(&jh->list); __add_jh() 764 jh = alloc_jh(); __add_jh() 771 jh->bh = bh; __add_jh() 772 bh->b_private = jh; __add_jh() 774 jh->jl = j->j_current_jl; __add_jh() 776 list_add_tail(&jh->list, &jh->jl->j_tail_bh_list); __add_jh() 778 list_add_tail(&jh->list, &jh->jl->j_bh_list); __add_jh() 800 struct reiserfs_jh *jh; write_ordered_buffers() local 809 jh = JH_ENTRY(list->next); write_ordered_buffers() 810 bh = jh->bh; write_ordered_buffers() 814 list_move(&jh->list, &tmp); write_ordered_buffers() 835 list_move(&jh->list, &tmp); write_ordered_buffers() 851 jh = JH_ENTRY(tmp.prev); write_ordered_buffers() 852 bh = jh->bh; write_ordered_buffers() 1242 struct reiserfs_journal_header *jh; _update_journal_header_block() local 1264 jh = (struct reiserfs_journal_header *)(journal->j_header_bh-> _update_journal_header_block() 1266 jh->j_last_flush_trans_id = cpu_to_le32(trans_id); _update_journal_header_block() 1267 jh->j_first_unflushed_offset = cpu_to_le32(offset); _update_journal_header_block() 1268 jh->j_mount_id = cpu_to_le32(journal->j_mount_id); _update_journal_header_block() 2385 struct reiserfs_journal_header *jh; journal_read() local 2408 jh = (struct reiserfs_journal_header *)(journal->j_header_bh->b_data); journal_read() 2409 if (le32_to_cpu(jh->j_first_unflushed_offset) < journal_read() 2411 && le32_to_cpu(jh->j_last_flush_trans_id) > 0) { journal_read() 2414 le32_to_cpu(jh->j_first_unflushed_offset); journal_read() 2415 oldest_trans_id = le32_to_cpu(jh->j_last_flush_trans_id) + 1; journal_read() 2416 newest_mount_id = le32_to_cpu(jh->j_mount_id); journal_read() 2420 "%lu", le32_to_cpu(jh->j_first_unflushed_offset), journal_read() 2421 le32_to_cpu(jh->j_last_flush_trans_id)); journal_read() 2432 le32_to_cpu(jh->j_first_unflushed_offset)); journal_read() 2538 journal->j_start = le32_to_cpu(jh->j_first_unflushed_offset); journal_read() 2540 le32_to_cpu(jh->j_last_flush_trans_id) + 1; journal_read() 2545 le32_to_cpu(jh->j_last_flush_trans_id); journal_read() 2546 journal->j_mount_id = le32_to_cpu(jh->j_mount_id) + 1; journal_read() 2724 struct reiserfs_journal_header *jh; journal_init() local 2790 jh = (struct reiserfs_journal_header *)(bhjh->b_data); journal_init() 2794 && (le32_to_cpu(jh->jh_journal.jp_journal_magic) != journal_init() 2799 jh->jh_journal.jp_journal_magic, journal_init() 2806 journal->j_trans_max = le32_to_cpu(jh->jh_journal.jp_journal_trans_max); journal_init() 2807 journal->j_max_batch = le32_to_cpu(jh->jh_journal.jp_journal_max_batch); journal_init() 2809 le32_to_cpu(jh->jh_journal.jp_journal_max_commit_age); journal_init()
|
H A D | inode.c | 3146 struct reiserfs_jh *jh = bh->b_private; invalidatepage_can_drop() local 3162 if (jh && (jl = jh->jl) invalidatepage_can_drop()
|
/linux-4.1.27/arch/s390/net/ |
H A D | bpf_jit.S | 54 jh sk_load_##NAME##_slow; \
|
H A D | bpf_jit_comp.c | 985 mask = 0x2000; /* jh */ bpf_jit_insn() 991 mask = 0x2000; /* jh */ bpf_jit_insn() 1011 mask = 0x2000; /* jh */ bpf_jit_insn() 1017 mask = 0x2000; /* jh */ bpf_jit_insn()
|
/linux-4.1.27/fs/ext3/ |
H A D | balloc.c | 716 struct journal_head *jh = bh2jh(bh); ext3_test_allocatable() local 722 if (!jh->b_committed_data) ext3_test_allocatable() 725 ret = !ext3_test_bit(nr, jh->b_committed_data); ext3_test_allocatable() 745 struct journal_head *jh = bh2jh(bh); bitmap_search_next_usable_block() local 754 if (jh->b_committed_data) bitmap_search_next_usable_block() 755 start = ext3_find_next_zero_bit(jh->b_committed_data, bitmap_search_next_usable_block() 835 struct journal_head *jh = bh2jh(bh); claim_block() local 841 if (jh->b_committed_data && ext3_test_bit(block,jh->b_committed_data)) { claim_block()
|
/linux-4.1.27/arch/s390/kernel/ |
H A D | entry.S | 95 jh .+42 857 jh 0f 864 jh 0f 874 jh 0f 881 jh 0f
|
/linux-4.1.27/fs/ubifs/ |
H A D | replay.c | 486 struct ubifs_jhead *jh = &c->jheads[bud->jhead]; is_last_bud() local 491 if (list_is_last(&bud->list, &jh->buds_list)) is_last_bud() 522 if (!list_is_last(&next->list, &jh->buds_list)) is_last_bud()
|
/linux-4.1.27/fs/coda/ |
H A D | upcall.c | 664 * are all mapped to -EINTR, while showing a nice warning message. (jh)
|