Lines Matching refs:jh
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, in do_get_write_access() argument
790 jbd_debug(5, "journal_head %p, force_copy %d\n", jh, force_copy); in do_get_write_access()
792 JBUFFER_TRACE(jh, "entry"); in do_get_write_access()
794 bh = jh2bh(jh); in do_get_write_access()
826 if (jh->b_transaction) { in do_get_write_access()
827 J_ASSERT_JH(jh, in do_get_write_access()
828 jh->b_transaction == transaction || in do_get_write_access()
829 jh->b_transaction == in do_get_write_access()
831 if (jh->b_next_transaction) in do_get_write_access()
832 J_ASSERT_JH(jh, jh->b_next_transaction == in do_get_write_access()
841 JBUFFER_TRACE(jh, "Journalling dirty buffer"); in do_get_write_access()
859 if (jh->b_transaction == transaction || in do_get_write_access()
860 jh->b_next_transaction == transaction) in do_get_write_access()
867 jh->b_modified = 0; in do_get_write_access()
873 if (jh->b_frozen_data) { in do_get_write_access()
874 JBUFFER_TRACE(jh, "has frozen data"); in do_get_write_access()
875 J_ASSERT_JH(jh, jh->b_next_transaction == NULL); in do_get_write_access()
876 jh->b_next_transaction = transaction; in do_get_write_access()
882 if (jh->b_transaction && jh->b_transaction != transaction) { in do_get_write_access()
883 JBUFFER_TRACE(jh, "owned by older transaction"); in do_get_write_access()
884 J_ASSERT_JH(jh, jh->b_next_transaction == NULL); in do_get_write_access()
885 J_ASSERT_JH(jh, jh->b_transaction == in do_get_write_access()
898 JBUFFER_TRACE(jh, "on shadow: sleep"); in do_get_write_access()
919 if (jh->b_jlist == BJ_Metadata || force_copy) { in do_get_write_access()
920 JBUFFER_TRACE(jh, "generate frozen data"); in do_get_write_access()
922 JBUFFER_TRACE(jh, "allocate memory for buffer"); in do_get_write_access()
925 jbd2_alloc(jh2bh(jh)->b_size, in do_get_write_access()
931 JBUFFER_TRACE(jh, "oom!"); in do_get_write_access()
938 jh->b_frozen_data = frozen_buffer; in do_get_write_access()
942 jh->b_next_transaction = transaction; in do_get_write_access()
951 if (!jh->b_transaction) { in do_get_write_access()
952 JBUFFER_TRACE(jh, "no transaction"); in do_get_write_access()
953 J_ASSERT_JH(jh, !jh->b_next_transaction); in do_get_write_access()
954 JBUFFER_TRACE(jh, "file as BJ_Reserved"); in do_get_write_access()
956 __jbd2_journal_file_buffer(jh, transaction, BJ_Reserved); in do_get_write_access()
966 J_EXPECT_JH(jh, buffer_uptodate(jh2bh(jh)), in do_get_write_access()
968 page = jh2bh(jh)->b_page; in do_get_write_access()
969 offset = offset_in_page(jh2bh(jh)->b_data); in do_get_write_access()
972 jbd2_buffer_frozen_trigger(jh, source + offset, in do_get_write_access()
973 jh->b_triggers); in do_get_write_access()
974 memcpy(jh->b_frozen_data, source+offset, jh2bh(jh)->b_size); in do_get_write_access()
981 jh->b_frozen_triggers = jh->b_triggers; in do_get_write_access()
989 jbd2_journal_cancel_revoke(handle, jh); in do_get_write_access()
995 JBUFFER_TRACE(jh, "exit"); in do_get_write_access()
1012 struct journal_head *jh = jbd2_journal_add_journal_head(bh); in jbd2_journal_get_write_access() local
1018 rc = do_get_write_access(handle, jh, 0); in jbd2_journal_get_write_access()
1019 jbd2_journal_put_journal_head(jh); in jbd2_journal_get_write_access()
1047 struct journal_head *jh = jbd2_journal_add_journal_head(bh); in jbd2_journal_get_create_access() local
1050 jbd_debug(5, "journal_head %p\n", jh); in jbd2_journal_get_create_access()
1057 JBUFFER_TRACE(jh, "entry"); in jbd2_journal_get_create_access()
1066 J_ASSERT_JH(jh, (jh->b_transaction == transaction || in jbd2_journal_get_create_access()
1067 jh->b_transaction == NULL || in jbd2_journal_get_create_access()
1068 (jh->b_transaction == journal->j_committing_transaction && in jbd2_journal_get_create_access()
1069 jh->b_jlist == BJ_Forget))); in jbd2_journal_get_create_access()
1071 J_ASSERT_JH(jh, jh->b_next_transaction == NULL); in jbd2_journal_get_create_access()
1072 J_ASSERT_JH(jh, buffer_locked(jh2bh(jh))); in jbd2_journal_get_create_access()
1074 if (jh->b_transaction == NULL) { in jbd2_journal_get_create_access()
1083 clear_buffer_dirty(jh2bh(jh)); in jbd2_journal_get_create_access()
1085 jh->b_modified = 0; in jbd2_journal_get_create_access()
1087 JBUFFER_TRACE(jh, "file as BJ_Reserved"); in jbd2_journal_get_create_access()
1089 __jbd2_journal_file_buffer(jh, transaction, BJ_Reserved); in jbd2_journal_get_create_access()
1090 } else if (jh->b_transaction == journal->j_committing_transaction) { in jbd2_journal_get_create_access()
1092 jh->b_modified = 0; in jbd2_journal_get_create_access()
1094 JBUFFER_TRACE(jh, "set next transaction"); in jbd2_journal_get_create_access()
1096 jh->b_next_transaction = transaction; in jbd2_journal_get_create_access()
1108 JBUFFER_TRACE(jh, "cancelling revoke"); in jbd2_journal_get_create_access()
1109 jbd2_journal_cancel_revoke(handle, jh); in jbd2_journal_get_create_access()
1111 jbd2_journal_put_journal_head(jh); in jbd2_journal_get_create_access()
1144 struct journal_head *jh = jbd2_journal_add_journal_head(bh); in jbd2_journal_get_undo_access() local
1147 JBUFFER_TRACE(jh, "entry"); in jbd2_journal_get_undo_access()
1154 err = do_get_write_access(handle, jh, 1); in jbd2_journal_get_undo_access()
1159 if (!jh->b_committed_data) { in jbd2_journal_get_undo_access()
1160 committed_data = jbd2_alloc(jh2bh(jh)->b_size, GFP_NOFS); in jbd2_journal_get_undo_access()
1170 if (!jh->b_committed_data) { in jbd2_journal_get_undo_access()
1173 JBUFFER_TRACE(jh, "generate b_committed data"); in jbd2_journal_get_undo_access()
1179 jh->b_committed_data = committed_data; in jbd2_journal_get_undo_access()
1181 memcpy(jh->b_committed_data, bh->b_data, bh->b_size); in jbd2_journal_get_undo_access()
1185 jbd2_journal_put_journal_head(jh); in jbd2_journal_get_undo_access()
1205 struct journal_head *jh = jbd2_journal_grab_journal_head(bh); in jbd2_journal_set_triggers() local
1207 if (WARN_ON(!jh)) in jbd2_journal_set_triggers()
1209 jh->b_triggers = type; in jbd2_journal_set_triggers()
1210 jbd2_journal_put_journal_head(jh); in jbd2_journal_set_triggers()
1213 void jbd2_buffer_frozen_trigger(struct journal_head *jh, void *mapped_data, in jbd2_buffer_frozen_trigger() argument
1216 struct buffer_head *bh = jh2bh(jh); in jbd2_buffer_frozen_trigger()
1224 void jbd2_buffer_abort_trigger(struct journal_head *jh, in jbd2_buffer_abort_trigger() argument
1230 triggers->t_abort(triggers, jh2bh(jh)); in jbd2_buffer_abort_trigger()
1262 struct journal_head *jh; in jbd2_journal_dirty_metadata() local
1268 jh = jbd2_journal_grab_journal_head(bh); in jbd2_journal_dirty_metadata()
1269 if (!jh) { in jbd2_journal_dirty_metadata()
1273 jbd_debug(5, "journal_head %p\n", jh); in jbd2_journal_dirty_metadata()
1274 JBUFFER_TRACE(jh, "entry"); in jbd2_journal_dirty_metadata()
1278 if (jh->b_modified == 0) { in jbd2_journal_dirty_metadata()
1284 jh->b_modified = 1; in jbd2_journal_dirty_metadata()
1299 if (jh->b_transaction == transaction && jh->b_jlist == BJ_Metadata) { in jbd2_journal_dirty_metadata()
1300 JBUFFER_TRACE(jh, "fastpath"); in jbd2_journal_dirty_metadata()
1301 if (unlikely(jh->b_transaction != in jbd2_journal_dirty_metadata()
1308 jh->b_transaction, in jbd2_journal_dirty_metadata()
1309 jh->b_transaction ? jh->b_transaction->t_tid : 0, in jbd2_journal_dirty_metadata()
1326 if (jh->b_transaction != transaction) { in jbd2_journal_dirty_metadata()
1327 JBUFFER_TRACE(jh, "already on other transaction"); in jbd2_journal_dirty_metadata()
1328 if (unlikely(((jh->b_transaction != in jbd2_journal_dirty_metadata()
1330 (jh->b_next_transaction != transaction))) { in jbd2_journal_dirty_metadata()
1339 jh->b_transaction, in jbd2_journal_dirty_metadata()
1340 jh->b_transaction ? in jbd2_journal_dirty_metadata()
1341 jh->b_transaction->t_tid : 0, in jbd2_journal_dirty_metadata()
1342 jh->b_next_transaction, in jbd2_journal_dirty_metadata()
1343 jh->b_next_transaction ? in jbd2_journal_dirty_metadata()
1344 jh->b_next_transaction->t_tid : 0, in jbd2_journal_dirty_metadata()
1345 jh->b_jlist); in jbd2_journal_dirty_metadata()
1355 J_ASSERT_JH(jh, jh->b_frozen_data == NULL); in jbd2_journal_dirty_metadata()
1357 JBUFFER_TRACE(jh, "file as BJ_Metadata"); in jbd2_journal_dirty_metadata()
1359 __jbd2_journal_file_buffer(jh, transaction, BJ_Metadata); in jbd2_journal_dirty_metadata()
1363 jbd2_journal_put_journal_head(jh); in jbd2_journal_dirty_metadata()
1365 JBUFFER_TRACE(jh, "exit"); in jbd2_journal_dirty_metadata()
1390 struct journal_head *jh; in jbd2_journal_forget() local
1405 jh = bh2jh(bh); in jbd2_journal_forget()
1409 if (!J_EXPECT_JH(jh, !jh->b_committed_data, in jbd2_journal_forget()
1416 was_modified = jh->b_modified; in jbd2_journal_forget()
1422 jh->b_modified = 0; in jbd2_journal_forget()
1424 if (jh->b_transaction == transaction) { in jbd2_journal_forget()
1425 J_ASSERT_JH(jh, !jh->b_frozen_data); in jbd2_journal_forget()
1433 JBUFFER_TRACE(jh, "belongs to current transaction: unfile"); in jbd2_journal_forget()
1455 if (jh->b_cp_transaction) { in jbd2_journal_forget()
1456 __jbd2_journal_temp_unlink_buffer(jh); in jbd2_journal_forget()
1457 __jbd2_journal_file_buffer(jh, transaction, BJ_Forget); in jbd2_journal_forget()
1459 __jbd2_journal_unfile_buffer(jh); in jbd2_journal_forget()
1468 } else if (jh->b_transaction) { in jbd2_journal_forget()
1469 J_ASSERT_JH(jh, (jh->b_transaction == in jbd2_journal_forget()
1473 JBUFFER_TRACE(jh, "belongs to older transaction"); in jbd2_journal_forget()
1477 if (jh->b_next_transaction) { in jbd2_journal_forget()
1478 J_ASSERT(jh->b_next_transaction == transaction); in jbd2_journal_forget()
1480 jh->b_next_transaction = NULL; in jbd2_journal_forget()
1698 __blist_add_buffer(struct journal_head **list, struct journal_head *jh) in __blist_add_buffer() argument
1701 jh->b_tnext = jh->b_tprev = jh; in __blist_add_buffer()
1702 *list = jh; in __blist_add_buffer()
1706 jh->b_tprev = last; in __blist_add_buffer()
1707 jh->b_tnext = first; in __blist_add_buffer()
1708 last->b_tnext = first->b_tprev = jh; in __blist_add_buffer()
1722 __blist_del_buffer(struct journal_head **list, struct journal_head *jh) in __blist_del_buffer() argument
1724 if (*list == jh) { in __blist_del_buffer()
1725 *list = jh->b_tnext; in __blist_del_buffer()
1726 if (*list == jh) in __blist_del_buffer()
1729 jh->b_tprev->b_tnext = jh->b_tnext; in __blist_del_buffer()
1730 jh->b_tnext->b_tprev = jh->b_tprev; in __blist_del_buffer()
1744 static void __jbd2_journal_temp_unlink_buffer(struct journal_head *jh) in __jbd2_journal_temp_unlink_buffer() argument
1748 struct buffer_head *bh = jh2bh(jh); in __jbd2_journal_temp_unlink_buffer()
1750 J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh)); in __jbd2_journal_temp_unlink_buffer()
1751 transaction = jh->b_transaction; in __jbd2_journal_temp_unlink_buffer()
1755 J_ASSERT_JH(jh, jh->b_jlist < BJ_Types); in __jbd2_journal_temp_unlink_buffer()
1756 if (jh->b_jlist != BJ_None) in __jbd2_journal_temp_unlink_buffer()
1757 J_ASSERT_JH(jh, transaction != NULL); in __jbd2_journal_temp_unlink_buffer()
1759 switch (jh->b_jlist) { in __jbd2_journal_temp_unlink_buffer()
1764 J_ASSERT_JH(jh, transaction->t_nr_buffers >= 0); in __jbd2_journal_temp_unlink_buffer()
1778 __blist_del_buffer(list, jh); in __jbd2_journal_temp_unlink_buffer()
1779 jh->b_jlist = BJ_None; in __jbd2_journal_temp_unlink_buffer()
1791 static void __jbd2_journal_unfile_buffer(struct journal_head *jh) in __jbd2_journal_unfile_buffer() argument
1793 __jbd2_journal_temp_unlink_buffer(jh); in __jbd2_journal_unfile_buffer()
1794 jh->b_transaction = NULL; in __jbd2_journal_unfile_buffer()
1795 jbd2_journal_put_journal_head(jh); in __jbd2_journal_unfile_buffer()
1798 void jbd2_journal_unfile_buffer(journal_t *journal, struct journal_head *jh) in jbd2_journal_unfile_buffer() argument
1800 struct buffer_head *bh = jh2bh(jh); in jbd2_journal_unfile_buffer()
1806 __jbd2_journal_unfile_buffer(jh); in jbd2_journal_unfile_buffer()
1820 struct journal_head *jh; in __journal_try_to_free_buffer() local
1822 jh = bh2jh(bh); in __journal_try_to_free_buffer()
1827 if (jh->b_next_transaction != NULL || jh->b_transaction != NULL) in __journal_try_to_free_buffer()
1831 if (jh->b_cp_transaction != NULL) { in __journal_try_to_free_buffer()
1833 JBUFFER_TRACE(jh, "remove from checkpoint list"); in __journal_try_to_free_buffer()
1834 __jbd2_journal_remove_checkpoint(jh); in __journal_try_to_free_buffer()
1891 struct journal_head *jh; in jbd2_journal_try_to_free_buffers() local
1898 jh = jbd2_journal_grab_journal_head(bh); in jbd2_journal_try_to_free_buffers()
1899 if (!jh) in jbd2_journal_try_to_free_buffers()
1904 jbd2_journal_put_journal_head(jh); in jbd2_journal_try_to_free_buffers()
1928 static int __dispose_buffer(struct journal_head *jh, transaction_t *transaction) in __dispose_buffer() argument
1931 struct buffer_head *bh = jh2bh(jh); in __dispose_buffer()
1933 if (jh->b_cp_transaction) { in __dispose_buffer()
1934 JBUFFER_TRACE(jh, "on running+cp transaction"); in __dispose_buffer()
1935 __jbd2_journal_temp_unlink_buffer(jh); in __dispose_buffer()
1942 __jbd2_journal_file_buffer(jh, transaction, BJ_Forget); in __dispose_buffer()
1945 JBUFFER_TRACE(jh, "on running transaction"); in __dispose_buffer()
1946 __jbd2_journal_unfile_buffer(jh); in __dispose_buffer()
2002 struct journal_head *jh; in journal_unmap_buffer() local
2021 jh = jbd2_journal_grab_journal_head(bh); in journal_unmap_buffer()
2022 if (!jh) in journal_unmap_buffer()
2048 transaction = jh->b_transaction; in journal_unmap_buffer()
2054 if (!jh->b_cp_transaction) { in journal_unmap_buffer()
2055 JBUFFER_TRACE(jh, "not on any transaction: zap"); in journal_unmap_buffer()
2072 JBUFFER_TRACE(jh, "checkpointed: add to BJ_Forget"); in journal_unmap_buffer()
2073 may_free = __dispose_buffer(jh, in journal_unmap_buffer()
2082 JBUFFER_TRACE(jh, "give to committing trans"); in journal_unmap_buffer()
2083 may_free = __dispose_buffer(jh, in journal_unmap_buffer()
2094 JBUFFER_TRACE(jh, "on committing transaction"); in journal_unmap_buffer()
2101 jbd2_journal_put_journal_head(jh); in journal_unmap_buffer()
2115 jh->b_next_transaction = journal->j_running_transaction; in journal_unmap_buffer()
2116 jbd2_journal_put_journal_head(jh); in journal_unmap_buffer()
2128 J_ASSERT_JH(jh, transaction == journal->j_running_transaction); in journal_unmap_buffer()
2129 JBUFFER_TRACE(jh, "on running transaction"); in journal_unmap_buffer()
2130 may_free = __dispose_buffer(jh, transaction); in journal_unmap_buffer()
2142 jh->b_modified = 0; in journal_unmap_buffer()
2143 jbd2_journal_put_journal_head(jh); in journal_unmap_buffer()
2227 void __jbd2_journal_file_buffer(struct journal_head *jh, in __jbd2_journal_file_buffer() argument
2232 struct buffer_head *bh = jh2bh(jh); in __jbd2_journal_file_buffer()
2234 J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh)); in __jbd2_journal_file_buffer()
2237 J_ASSERT_JH(jh, jh->b_jlist < BJ_Types); in __jbd2_journal_file_buffer()
2238 J_ASSERT_JH(jh, jh->b_transaction == transaction || in __jbd2_journal_file_buffer()
2239 jh->b_transaction == NULL); in __jbd2_journal_file_buffer()
2241 if (jh->b_transaction && jh->b_jlist == jlist) in __jbd2_journal_file_buffer()
2260 if (jh->b_transaction) in __jbd2_journal_file_buffer()
2261 __jbd2_journal_temp_unlink_buffer(jh); in __jbd2_journal_file_buffer()
2264 jh->b_transaction = transaction; in __jbd2_journal_file_buffer()
2268 J_ASSERT_JH(jh, !jh->b_committed_data); in __jbd2_journal_file_buffer()
2269 J_ASSERT_JH(jh, !jh->b_frozen_data); in __jbd2_journal_file_buffer()
2286 __blist_add_buffer(list, jh); in __jbd2_journal_file_buffer()
2287 jh->b_jlist = jlist; in __jbd2_journal_file_buffer()
2293 void jbd2_journal_file_buffer(struct journal_head *jh, in jbd2_journal_file_buffer() argument
2296 jbd_lock_bh_state(jh2bh(jh)); in jbd2_journal_file_buffer()
2298 __jbd2_journal_file_buffer(jh, transaction, jlist); in jbd2_journal_file_buffer()
2300 jbd_unlock_bh_state(jh2bh(jh)); in jbd2_journal_file_buffer()
2314 void __jbd2_journal_refile_buffer(struct journal_head *jh) in __jbd2_journal_refile_buffer() argument
2317 struct buffer_head *bh = jh2bh(jh); in __jbd2_journal_refile_buffer()
2319 J_ASSERT_JH(jh, jbd_is_locked_bh_state(bh)); in __jbd2_journal_refile_buffer()
2320 if (jh->b_transaction) in __jbd2_journal_refile_buffer()
2321 assert_spin_locked(&jh->b_transaction->t_journal->j_list_lock); in __jbd2_journal_refile_buffer()
2324 if (jh->b_next_transaction == NULL) { in __jbd2_journal_refile_buffer()
2325 __jbd2_journal_unfile_buffer(jh); in __jbd2_journal_refile_buffer()
2335 __jbd2_journal_temp_unlink_buffer(jh); in __jbd2_journal_refile_buffer()
2341 jh->b_transaction = jh->b_next_transaction; in __jbd2_journal_refile_buffer()
2342 jh->b_next_transaction = NULL; in __jbd2_journal_refile_buffer()
2345 else if (jh->b_modified) in __jbd2_journal_refile_buffer()
2349 __jbd2_journal_file_buffer(jh, jh->b_transaction, jlist); in __jbd2_journal_refile_buffer()
2350 J_ASSERT_JH(jh, jh->b_transaction->t_state == T_RUNNING); in __jbd2_journal_refile_buffer()
2362 void jbd2_journal_refile_buffer(journal_t *journal, struct journal_head *jh) in jbd2_journal_refile_buffer() argument
2364 struct buffer_head *bh = jh2bh(jh); in jbd2_journal_refile_buffer()
2370 __jbd2_journal_refile_buffer(jh); in jbd2_journal_refile_buffer()