Lines Matching full:journal
75 /* journal list state bits */
94 struct reiserfs_journal *journal);
102 JBEGIN_REG = 0, /* regular journal begin */
115 struct reiserfs_journal *journal = SB_JOURNAL(sb); in init_journal_hash() local
116 memset(journal->j_hash_table, 0, in init_journal_hash()
157 struct reiserfs_journal *journal = SB_JOURNAL(sb); in get_bitmap_node() local
159 struct list_head *entry = journal->j_bitmap_nodes.next; in get_bitmap_node()
161 journal->j_used_bitmap_nodes++; in get_bitmap_node()
164 if (entry != &journal->j_bitmap_nodes) { in get_bitmap_node()
168 journal->j_free_bitmap_nodes--; in get_bitmap_node()
181 struct reiserfs_journal *journal = SB_JOURNAL(sb); in free_bitmap_node() local
182 journal->j_used_bitmap_nodes--; in free_bitmap_node()
183 if (journal->j_free_bitmap_nodes > REISERFS_MAX_BITMAP_NODES) { in free_bitmap_node()
187 list_add(&bn->list, &journal->j_bitmap_nodes); in free_bitmap_node()
188 journal->j_free_bitmap_nodes++; in free_bitmap_node()
195 struct reiserfs_journal *journal = SB_JOURNAL(sb); in allocate_bitmap_nodes() local
200 list_add(&bn->list, &journal->j_bitmap_nodes); in allocate_bitmap_nodes()
201 journal->j_free_bitmap_nodes++; in allocate_bitmap_nodes()
258 struct reiserfs_journal *journal = SB_JOURNAL(sb); in free_bitmap_nodes() local
259 struct list_head *next = journal->j_bitmap_nodes.next; in free_bitmap_nodes()
262 while (next != &journal->j_bitmap_nodes) { in free_bitmap_nodes()
267 next = journal->j_bitmap_nodes.next; in free_bitmap_nodes()
268 journal->j_free_bitmap_nodes--; in free_bitmap_nodes()
293 "allocate bitmaps for journal lists"); in reiserfs_allocate_list_bitmaps()
314 struct reiserfs_journal *journal = SB_JOURNAL(sb); in get_list_bitmap() local
318 i = journal->j_list_bitmap_index; in get_list_bitmap()
319 journal->j_list_bitmap_index = (i + 1) % JOURNAL_NUM_BITMAPS; in get_list_bitmap()
320 jb = journal->j_list_bitmap + i; in get_list_bitmap()
321 if (journal->j_list_bitmap[i].journal_list) { in get_list_bitmap()
323 journal->j_list_bitmap[i]. in get_list_bitmap()
325 if (!journal->j_list_bitmap[i].journal_list) { in get_list_bitmap()
370 struct reiserfs_journal *journal = SB_JOURNAL(sb); in get_cnode() local
374 if (journal->j_cnode_free <= 0) { in get_cnode()
377 journal->j_cnode_used++; in get_cnode()
378 journal->j_cnode_free--; in get_cnode()
379 cn = journal->j_cnode_free_list; in get_cnode()
386 journal->j_cnode_free_list = cn->next; in get_cnode()
397 struct reiserfs_journal *journal = SB_JOURNAL(sb); in free_cnode() local
401 journal->j_cnode_used--; in free_cnode()
402 journal->j_cnode_free++; in free_cnode()
404 cn->next = journal->j_cnode_free_list; in free_cnode()
405 if (journal->j_cnode_free_list) { in free_cnode()
406 journal->j_cnode_free_list->prev = cn; in free_cnode()
409 journal->j_cnode_free_list = cn; in free_cnode()
452 * when bl is rejected because it is set in a journal list bitmap, we search
463 struct reiserfs_journal *journal = SB_JOURNAL(sb); in reiserfs_in_journal() local
470 PROC_INFO_INC(sb, journal.in_journal); in reiserfs_in_journal()
479 PROC_INFO_INC(sb, journal.in_journal_bitmap); in reiserfs_in_journal()
480 jb = journal->j_list_bitmap + i; in reiserfs_in_journal()
499 && (get_journal_hash_dev(sb, journal->j_list_hash_table, bl))) { in reiserfs_in_journal()
504 if ((get_journal_hash_dev(sb, journal->j_hash_table, bl))) { in reiserfs_in_journal()
509 PROC_INFO_INC(sb, journal.in_journal_reusable); in reiserfs_in_journal()
532 PROC_INFO_INC(sb, journal.lock_journal); in lock_journal()
552 reiserfs_panic(s, "journal-2", "trans id %u, refcount at %d", in put_journal_list()
579 struct reiserfs_journal *journal = SB_JOURNAL(s); in journal_list_still_alive() local
580 struct list_head *entry = &journal->j_journal_list; in journal_list_still_alive()
595 * logged via data=journal.
863 * valid journal head from an older transaction. If someone in write_ordered_buffers()
867 * page one last time after freeing the journal header. in write_ordered_buffers()
884 struct reiserfs_journal *journal = SB_JOURNAL(s); in flush_older_commits() local
899 if (entry == &journal->j_journal_list || in flush_older_commits()
937 if (entry == &journal->j_journal_list) in flush_older_commits()
964 * if this journal list still has commit blocks unflushed, send them to disk.
977 struct reiserfs_journal *journal = SB_JOURNAL(s); in flush_commit_list() local
993 BUG_ON(trans_id == journal->j_trans_id); in flush_commit_list()
1032 ret = write_ordered_buffers(&journal->j_dirty_buffers_lock, in flush_commit_list()
1033 journal, jl, &jl->j_bh_list); in flush_commit_list()
1046 atomic_inc(&journal->j_async_throttle); in flush_commit_list()
1063 if (atomic_dec_and_test(&journal->j_async_throttle)) in flush_commit_list()
1064 wake_up_var(&journal->j_async_throttle); in flush_commit_list()
1086 reiserfs_warning(s, "journal-601", in flush_commit_list()
1101 * If there was a write error in the journal - we can't commit in flush_commit_list()
1106 if (likely(!retval && !reiserfs_is_journal_aborted (journal))) { in flush_commit_list()
1120 * If there was a write error in the journal - we can't commit this in flush_commit_list()
1126 reiserfs_warning(s, "journal-615", "buffer write failed"); in flush_commit_list()
1131 if (journal->j_last_commit_id != 0 && in flush_commit_list()
1132 (jl->j_trans_id - journal->j_last_commit_id) != 1) { in flush_commit_list()
1134 journal->j_last_commit_id, jl->j_trans_id); in flush_commit_list()
1136 journal->j_last_commit_id = jl->j_trans_id; in flush_commit_list()
1144 retval = retval ? retval : journal->j_errno; in flush_commit_list()
1159 reiserfs_abort(s, retval, "Journal write error in %s", in flush_commit_list()
1192 * from the journal list for this transaction. Aside from freeing the
1200 struct reiserfs_journal *journal = SB_JOURNAL(sb); in remove_all_from_journal_list() local
1217 remove_journal_hash(sb, journal->j_list_hash_table, in remove_all_from_journal_list()
1240 struct reiserfs_journal *journal = SB_JOURNAL(sb); in _update_journal_header_block() local
1243 if (reiserfs_is_journal_aborted(journal)) in _update_journal_header_block()
1246 if (trans_id >= journal->j_last_flush_trans_id) { in _update_journal_header_block()
1247 if (buffer_locked((journal->j_header_bh))) { in _update_journal_header_block()
1249 __wait_on_buffer(journal->j_header_bh); in _update_journal_header_block()
1251 if (unlikely(!buffer_uptodate(journal->j_header_bh))) { in _update_journal_header_block()
1253 reiserfs_warning(sb, "journal-699", in _update_journal_header_block()
1259 journal->j_last_flush_trans_id = trans_id; in _update_journal_header_block()
1260 journal->j_first_unflushed_offset = offset; in _update_journal_header_block()
1261 jh = (struct reiserfs_journal_header *)(journal->j_header_bh-> in _update_journal_header_block()
1265 jh->j_mount_id = cpu_to_le32(journal->j_mount_id); in _update_journal_header_block()
1267 set_buffer_dirty(journal->j_header_bh); in _update_journal_header_block()
1271 __sync_dirty_buffer(journal->j_header_bh, in _update_journal_header_block()
1274 sync_dirty_buffer(journal->j_header_bh); in _update_journal_header_block()
1277 if (!buffer_uptodate(journal->j_header_bh)) { in _update_journal_header_block()
1278 reiserfs_warning(sb, "journal-837", in _update_journal_header_block()
1279 "IO error during journal replay"); in _update_journal_header_block()
1294 ** flush any and all journal lists older than you are
1302 struct reiserfs_journal *journal = SB_JOURNAL(sb); in flush_older_journal_lists() local
1310 entry = journal->j_journal_list.next; in flush_older_journal_lists()
1312 if (entry == &journal->j_journal_list) in flush_older_journal_lists()
1329 struct reiserfs_journal *journal = SB_JOURNAL(s); in del_from_work_list() local
1332 journal->j_num_work_lists--; in del_from_work_list()
1337 * flush a journal list, both commit and real blocks
1342 * IMPORTANT. This can only be called while there are no journal writers,
1343 * and the journal is locked. That means it can only be called from
1356 struct reiserfs_journal *journal = SB_JOURNAL(s); in flush_journal_list() local
1362 if (atomic_read(&journal->j_wcount) != 0) { in flush_journal_list()
1364 atomic_read(&journal->j_wcount)); in flush_journal_list()
1369 reiserfs_mutex_lock_safe(&journal->j_flush_mutex, s); in flush_journal_list()
1370 } else if (mutex_trylock(&journal->j_flush_mutex)) { in flush_journal_list()
1375 if (j_len_saved > journal->j_trans_max) { in flush_journal_list()
1376 reiserfs_panic(s, "journal-715", "length is %lu, trans id %lu", in flush_journal_list()
1394 && !reiserfs_is_journal_aborted(journal)) in flush_journal_list()
1407 if (atomic_read(&journal->j_wcount) != 0) { in flush_journal_list()
1408 reiserfs_panic(s, "journal-844", "journal list is flushing, " in flush_journal_list()
1480 reiserfs_warning(s, "journal-813", in flush_journal_list()
1516 reiserfs_warning(s, "journal-945", in flush_journal_list()
1526 reiserfs_panic(s, "journal-1011", in flush_journal_list()
1535 reiserfs_panic(s, "journal-1012", in flush_journal_list()
1540 reiserfs_warning(s, "journal-949", in flush_journal_list()
1569 * before we can update the journal header block, we _must_ flush all in flush_journal_list()
1578 err = journal->j_errno; in flush_journal_list()
1584 * are no allocations going on while we are flushing journal lists. So, in flush_journal_list()
1585 * we only need to update the journal header block for the last list in flush_journal_list()
1596 "Write error while updating journal header in %s", in flush_journal_list()
1601 journal->j_num_lists--; in flush_journal_list()
1604 if (journal->j_last_flush_id != 0 && in flush_journal_list()
1605 (jl->j_trans_id - journal->j_last_flush_id) != 1) { in flush_journal_list()
1607 journal->j_last_flush_id, jl->j_trans_id); in flush_journal_list()
1609 journal->j_last_flush_id = jl->j_trans_id; in flush_journal_list()
1624 mutex_unlock(&journal->j_flush_mutex); in flush_journal_list()
1727 struct reiserfs_journal *journal = SB_JOURNAL(s); in kupdate_transactions() local
1730 reiserfs_mutex_lock_safe(&journal->j_flush_mutex, s); in kupdate_transactions()
1757 if (entry == &journal->j_journal_list) { in kupdate_transactions()
1771 mutex_unlock(&journal->j_flush_mutex); in kupdate_transactions()
1781 * This function tries to clear out a large chunk of the journal lists
1782 * at once, which makes everything faster since only the newest journal
1795 struct reiserfs_journal *journal = SB_JOURNAL(s); in flush_used_journal_lists() local
1814 if (tjl->j_list.next == &journal->j_journal_list) in flush_used_journal_lists()
1882 struct reiserfs_journal *journal = SB_JOURNAL(sb); in free_journal_ram() local
1883 kfree(journal->j_current_jl); in free_journal_ram()
1884 journal->j_num_lists--; in free_journal_ram()
1886 vfree(journal->j_cnode_free_orig); in free_journal_ram()
1887 free_list_bitmaps(sb, journal->j_list_bitmap); in free_journal_ram()
1889 if (journal->j_header_bh) { in free_journal_ram()
1890 brelse(journal->j_header_bh); in free_journal_ram()
1893 * j_header_bh is on the journal dev, make sure in free_journal_ram()
1894 * not to release the journal dev until we brelse j_header_bh in free_journal_ram()
1896 release_journal_dev(sb, journal); in free_journal_ram()
1897 vfree(journal); in free_journal_ram()
1908 struct reiserfs_journal *journal = SB_JOURNAL(sb); in do_journal_release() local
1933 if (!error && reiserfs_is_journal_aborted(journal)) { in do_journal_release()
1967 /* * call on unmount. flush all journal trans, release all alloc'd ram */
2023 "journal-986: transaction " in journal_transaction_is_valid()
2033 "journal-1087: transaction " in journal_transaction_is_valid()
2041 reiserfs_warning(sb, "journal-2018", in journal_transaction_is_valid()
2050 * ok, we have a journal description block, in journal_transaction_is_valid()
2074 "journal-1004: " in journal_transaction_is_valid()
2083 "journal-1006: found valid " in journal_transaction_is_valid()
2115 struct reiserfs_journal *journal = SB_JOURNAL(sb); in journal_read_transaction() local
2132 reiserfs_debug(sb, REISERFS_DEBUG_CODE, "journal-1037: " in journal_read_transaction()
2137 reiserfs_debug(sb, REISERFS_DEBUG_CODE, "journal-1039: " in journal_read_transaction()
2145 reiserfs_debug(sb, REISERFS_DEBUG_CODE, "journal-1146: " in journal_read_transaction()
2197 reiserfs_warning(sb, "journal-1169", in journal_read_transaction()
2220 reiserfs_warning(sb, "journal-1207", in journal_read_transaction()
2229 reiserfs_warning(sb, "journal-1204", in journal_read_transaction()
2248 reiserfs_warning(sb, "journal-1212", in journal_read_transaction()
2273 reiserfs_warning(sb, "journal-1226", in journal_read_transaction()
2291 "journal-1095: setting journal " "start to offset %ld", in journal_read_transaction()
2298 journal->j_start = cur_dblock - SB_ONDISK_JOURNAL_1st_BLOCK(sb); in journal_read_transaction()
2299 journal->j_last_flush_trans_id = trans_id; in journal_read_transaction()
2300 journal->j_trans_id = trans_id + 1; in journal_read_transaction()
2302 if (journal->j_trans_id == 0) in journal_read_transaction()
2303 journal->j_trans_id = 10; in journal_read_transaction()
2315 * Right now it is only used from journal code. But later we might use it
2361 * on a clean unmount, the journal header's next unflushed pointer will be
2373 struct reiserfs_journal *journal = SB_JOURNAL(sb); in journal_read() local
2390 journal->j_dev_bd); in journal_read()
2394 * step 1, read in the journal header block. Check the transaction in journal_read()
2398 journal->j_header_bh = journal_bread(sb, in journal_read()
2401 if (!journal->j_header_bh) { in journal_read()
2404 jh = (struct reiserfs_journal_header *)(journal->j_header_bh->b_data); in journal_read()
2414 "journal-1153: found in " in journal_read()
2448 * device and journal device to be the same in journal_read()
2451 reiserfs_breada(journal->j_dev_bd, cur_dblock, in journal_read()
2466 "journal-1179: Setting " in journal_read()
2476 "journal-1180: Resetting " in journal_read()
2485 "journal-1299: Setting " in journal_read()
2500 "journal-1206: Starting replay " in journal_read()
2517 SB_ONDISK_JOURNAL_1st_BLOCK(sb) + journal->j_start; in journal_read()
2525 "journal-1225: No valid " "transactions found"); in journal_read()
2534 journal->j_start = le32_to_cpu(jh->j_first_unflushed_offset); in journal_read()
2535 journal->j_trans_id = in journal_read()
2538 if (journal->j_trans_id == 0) in journal_read()
2539 journal->j_trans_id = 10; in journal_read()
2540 journal->j_last_flush_trans_id = in journal_read()
2542 journal->j_mount_id = le32_to_cpu(jh->j_mount_id) + 1; in journal_read()
2544 journal->j_mount_id = newest_mount_id + 1; in journal_read()
2546 reiserfs_debug(sb, REISERFS_DEBUG_CODE, "journal-1299: Setting " in journal_read()
2547 "newest_mount_id to %lu", journal->j_mount_id); in journal_read()
2548 journal->j_first_unflushed_offset = journal->j_start; in journal_read()
2557 _update_journal_header_block(sb, journal->j_start, in journal_read()
2558 journal->j_last_flush_trans_id)) { in journal_read()
2591 struct reiserfs_journal *journal) in release_journal_dev() argument
2593 if (journal->j_dev_bd != NULL) { in release_journal_dev()
2596 if (journal->j_dev_bd->bd_dev != super->s_dev) in release_journal_dev()
2597 holder = journal; in release_journal_dev()
2599 blkdev_put(journal->j_dev_bd, holder); in release_journal_dev()
2600 journal->j_dev_bd = NULL; in release_journal_dev()
2605 struct reiserfs_journal *journal, in journal_init_dev() argument
2609 void *holder = journal; in journal_init_dev()
2615 journal->j_dev_bd = NULL; in journal_init_dev()
2622 /* there is no "jdev" option and journal is on separate device */ in journal_init_dev()
2626 journal->j_dev_bd = blkdev_get_by_dev(jdev, blkdev_mode, holder, in journal_init_dev()
2628 if (IS_ERR(journal->j_dev_bd)) { in journal_init_dev()
2629 result = PTR_ERR(journal->j_dev_bd); in journal_init_dev()
2630 journal->j_dev_bd = NULL; in journal_init_dev()
2632 "cannot init journal device unknown-block(%u,%u): %i", in journal_init_dev()
2636 set_blocksize(journal->j_dev_bd, super->s_blocksize); in journal_init_dev()
2641 journal->j_dev_bd = blkdev_get_by_path(jdev_name, blkdev_mode, holder, in journal_init_dev()
2643 if (IS_ERR(journal->j_dev_bd)) { in journal_init_dev()
2644 result = PTR_ERR(journal->j_dev_bd); in journal_init_dev()
2645 journal->j_dev_bd = NULL; in journal_init_dev()
2652 set_blocksize(journal->j_dev_bd, super->s_blocksize); in journal_init_dev()
2654 "journal_init_dev: journal device: %pg\n", in journal_init_dev()
2655 journal->j_dev_bd); in journal_init_dev()
2661 * journal params within boundaries which depend on the ratio
2674 struct reiserfs_journal *journal) in check_advise_trans_params() argument
2676 if (journal->j_trans_max) { in check_advise_trans_params()
2677 /* Non-default journal params. Do sanity check for them. */ in check_advise_trans_params()
2682 if (journal->j_trans_max > JOURNAL_TRANS_MAX_DEFAULT / ratio || in check_advise_trans_params()
2683 journal->j_trans_max < JOURNAL_TRANS_MIN_DEFAULT / ratio || in check_advise_trans_params()
2684 SB_ONDISK_JOURNAL_SIZE(sb) / journal->j_trans_max < in check_advise_trans_params()
2688 "FSCK?", journal->j_trans_max); in check_advise_trans_params()
2691 if (journal->j_max_batch != (journal->j_trans_max) * in check_advise_trans_params()
2695 "FSCK?", journal->j_max_batch); in check_advise_trans_params()
2700 * Default journal params. in check_advise_trans_params()
2710 journal->j_trans_max = JOURNAL_TRANS_MAX_DEFAULT; in check_advise_trans_params()
2711 journal->j_max_batch = JOURNAL_MAX_BATCH_DEFAULT; in check_advise_trans_params()
2712 journal->j_max_commit_age = JOURNAL_MAX_COMMIT_AGE; in check_advise_trans_params()
2725 struct reiserfs_journal *journal; in journal_init() local
2729 journal = SB_JOURNAL(sb) = vzalloc(sizeof(struct reiserfs_journal)); in journal_init()
2730 if (!journal) { in journal_init()
2731 reiserfs_warning(sb, "journal-1256", in journal_init()
2732 "unable to get memory for journal structure"); in journal_init()
2735 INIT_LIST_HEAD(&journal->j_bitmap_nodes); in journal_init()
2736 INIT_LIST_HEAD(&journal->j_prealloc_list); in journal_init()
2737 INIT_LIST_HEAD(&journal->j_working_list); in journal_init()
2738 INIT_LIST_HEAD(&journal->j_journal_list); in journal_init()
2739 journal->j_persistent_trans = 0; in journal_init()
2740 if (reiserfs_allocate_list_bitmaps(sb, journal->j_list_bitmap, in journal_init()
2746 /* reserved for journal area support */ in journal_init()
2756 * Sanity check to see is the standard journal fitting in journal_init()
2762 reiserfs_warning(sb, "journal-1393", in journal_init()
2763 "journal does not fit for area addressed " in journal_init()
2773 * Sanity check to see if journal first block is correct. in journal_init()
2774 * If journal first block is invalid it can cause in journal_init()
2779 reiserfs_warning(sb, "journal-1393", in journal_init()
2780 "journal 1st super block is invalid: 1st reserved block %d, but actual 1st block is %d", in journal_init()
2786 if (journal_init_dev(sb, journal, j_dev_name) != 0) { in journal_init()
2788 "unable to initialize journal device"); in journal_init()
2794 /* read journal header */ in journal_init()
2800 "unable to read journal header"); in journal_init()
2805 /* make sure that journal matches to the super block */ in journal_init()
2810 "journal header magic %x (device %pg) does " in journal_init()
2813 journal->j_dev_bd, in journal_init()
2819 journal->j_trans_max = le32_to_cpu(jh->jh_journal.jp_journal_trans_max); in journal_init()
2820 journal->j_max_batch = le32_to_cpu(jh->jh_journal.jp_journal_max_batch); in journal_init()
2821 journal->j_max_commit_age = in journal_init()
2823 journal->j_max_trans_age = JOURNAL_MAX_TRANS_AGE; in journal_init()
2825 if (check_advise_trans_params(sb, journal) != 0) in journal_init()
2827 journal->j_default_max_commit_age = journal->j_max_commit_age; in journal_init()
2830 journal->j_max_commit_age = commit_max_age; in journal_init()
2831 journal->j_max_trans_age = commit_max_age; in journal_init()
2834 reiserfs_info(sb, "journal params: device %pg, size %u, " in journal_init()
2835 "journal first block %u, max trans len %u, max batch %u, " in journal_init()
2837 journal->j_dev_bd, in journal_init()
2840 journal->j_trans_max, in journal_init()
2841 journal->j_max_batch, in journal_init()
2842 journal->j_max_commit_age, journal->j_max_trans_age); in journal_init()
2846 journal->j_list_bitmap_index = 0; in journal_init()
2849 memset(journal->j_list_hash_table, 0, in journal_init()
2852 INIT_LIST_HEAD(&journal->j_dirty_buffers); in journal_init()
2853 spin_lock_init(&journal->j_dirty_buffers_lock); in journal_init()
2855 journal->j_start = 0; in journal_init()
2856 journal->j_len = 0; in journal_init()
2857 journal->j_len_alloc = 0; in journal_init()
2858 atomic_set(&journal->j_wcount, 0); in journal_init()
2859 atomic_set(&journal->j_async_throttle, 0); in journal_init()
2860 journal->j_bcount = 0; in journal_init()
2861 journal->j_trans_start_time = 0; in journal_init()
2862 journal->j_last = NULL; in journal_init()
2863 journal->j_first = NULL; in journal_init()
2864 init_waitqueue_head(&journal->j_join_wait); in journal_init()
2865 mutex_init(&journal->j_mutex); in journal_init()
2866 mutex_init(&journal->j_flush_mutex); in journal_init()
2868 journal->j_trans_id = 10; in journal_init()
2869 journal->j_mount_id = 10; in journal_init()
2870 journal->j_state = 0; in journal_init()
2871 atomic_set(&journal->j_jlock, 0); in journal_init()
2872 journal->j_cnode_free_list = allocate_cnodes(num_cnodes); in journal_init()
2873 journal->j_cnode_free_orig = journal->j_cnode_free_list; in journal_init()
2874 journal->j_cnode_free = journal->j_cnode_free_list ? num_cnodes : 0; in journal_init()
2875 journal->j_cnode_used = 0; in journal_init()
2876 journal->j_must_wait = 0; in journal_init()
2878 if (journal->j_cnode_free == 0) { in journal_init()
2879 reiserfs_warning(sb, "journal-2004", "Journal cnode memory " in journal_init()
2880 "allocation failed (%ld bytes). Journal is " in journal_init()
2882 "this is due to a journal that is too large.", in journal_init()
2888 jl = journal->j_current_jl; in journal_init()
2899 reiserfs_warning(sb, "journal-2005", in journal_init()
2900 "get_list_bitmap failed for journal list 0"); in journal_init()
2911 INIT_DELAYED_WORK(&journal->j_work, flush_async_commits); in journal_init()
2912 journal->j_work_sb = sb; in journal_init()
2927 struct reiserfs_journal *journal = SB_JOURNAL(th->t_super); in journal_transaction_should_end() local
2933 if (journal->j_must_wait > 0 || in journal_transaction_should_end()
2934 (journal->j_len_alloc + new_alloc) >= journal->j_max_batch || in journal_transaction_should_end()
2935 atomic_read(&journal->j_jlock) || in journal_transaction_should_end()
2936 (now - journal->j_trans_start_time) > journal->j_max_trans_age || in journal_transaction_should_end()
2937 journal->j_cnode_free < (journal->j_trans_max * 3)) { in journal_transaction_should_end()
2941 journal->j_len_alloc += new_alloc; in journal_transaction_should_end()
2949 struct reiserfs_journal *journal = SB_JOURNAL(th->t_super); in reiserfs_block_writes() local
2951 journal->j_must_wait = 1; in reiserfs_block_writes()
2952 set_bit(J_WRITERS_BLOCKED, &journal->j_state); in reiserfs_block_writes()
2959 struct reiserfs_journal *journal = SB_JOURNAL(s); in reiserfs_allow_writes() local
2960 clear_bit(J_WRITERS_BLOCKED, &journal->j_state); in reiserfs_allow_writes()
2961 wake_up(&journal->j_join_wait); in reiserfs_allow_writes()
2967 struct reiserfs_journal *journal = SB_JOURNAL(s); in reiserfs_wait_on_write_block() local
2968 wait_event(journal->j_join_wait, in reiserfs_wait_on_write_block()
2969 !test_bit(J_WRITERS_BLOCKED, &journal->j_state)); in reiserfs_wait_on_write_block()
2975 struct reiserfs_journal *journal = SB_JOURNAL(s); in queue_log_writer() local
2976 set_bit(J_WRITERS_QUEUED, &journal->j_state); in queue_log_writer()
2983 add_wait_queue(&journal->j_join_wait, &wait); in queue_log_writer()
2985 if (test_bit(J_WRITERS_QUEUED, &journal->j_state)) { in queue_log_writer()
2991 remove_wait_queue(&journal->j_join_wait, &wait); in queue_log_writer()
2996 struct reiserfs_journal *journal = SB_JOURNAL(s); in wake_queued_writers() local
2997 if (test_and_clear_bit(J_WRITERS_QUEUED, &journal->j_state)) in wake_queued_writers()
2998 wake_up(&journal->j_join_wait); in wake_queued_writers()
3003 struct reiserfs_journal *journal = SB_JOURNAL(sb); in let_transaction_grow() local
3004 unsigned long bcount = journal->j_bcount; in let_transaction_grow()
3012 journal->j_current_jl->j_state |= LIST_COMMIT_PENDING; in let_transaction_grow()
3013 while ((atomic_read(&journal->j_wcount) > 0 || in let_transaction_grow()
3014 atomic_read(&journal->j_jlock)) && in let_transaction_grow()
3015 journal->j_trans_id == trans_id) { in let_transaction_grow()
3018 if (journal->j_trans_id != trans_id) in let_transaction_grow()
3020 if (bcount == journal->j_bcount) in let_transaction_grow()
3022 bcount = journal->j_bcount; in let_transaction_grow()
3039 struct reiserfs_journal *journal = SB_JOURNAL(sb); in do_journal_begin_r() local
3045 BUG_ON(nblocks > journal->j_trans_max); in do_journal_begin_r()
3047 PROC_INFO_INC(sb, journal.journal_being); in do_journal_begin_r()
3054 if (join != JBEGIN_ABORT && reiserfs_is_journal_aborted(journal)) { in do_journal_begin_r()
3056 retval = journal->j_errno; in do_journal_begin_r()
3059 journal->j_bcount++; in do_journal_begin_r()
3061 if (test_bit(J_WRITERS_BLOCKED, &journal->j_state)) { in do_journal_begin_r()
3066 PROC_INFO_INC(sb, journal.journal_relock_writers); in do_journal_begin_r()
3072 * if there is no room in the journal OR in do_journal_begin_r()
3078 if ((!join && journal->j_must_wait > 0) || in do_journal_begin_r()
3080 && (journal->j_len_alloc + nblocks + 2) >= journal->j_max_batch) in do_journal_begin_r()
3081 || (!join && atomic_read(&journal->j_wcount) > 0 in do_journal_begin_r()
3082 && journal->j_trans_start_time > 0 in do_journal_begin_r()
3083 && (now - journal->j_trans_start_time) > in do_journal_begin_r()
3084 journal->j_max_trans_age) || (!join in do_journal_begin_r()
3085 && atomic_read(&journal->j_jlock)) in do_journal_begin_r()
3086 || (!join && journal->j_cnode_free < (journal->j_trans_max * 3))) { in do_journal_begin_r()
3088 old_trans_id = journal->j_trans_id; in do_journal_begin_r()
3092 if (!join && (journal->j_len_alloc + nblocks + 2) >= in do_journal_begin_r()
3093 journal->j_max_batch && in do_journal_begin_r()
3094 ((journal->j_len + nblocks + 2) * 100) < in do_journal_begin_r()
3095 (journal->j_len_alloc * 75)) { in do_journal_begin_r()
3096 if (atomic_read(&journal->j_wcount) > 10) { in do_journal_begin_r()
3105 if (atomic_read(&journal->j_jlock)) { in do_journal_begin_r()
3106 while (journal->j_trans_id == old_trans_id && in do_journal_begin_r()
3107 atomic_read(&journal->j_jlock)) { in do_journal_begin_r()
3117 if (old_trans_id != journal->j_trans_id) { in do_journal_begin_r()
3126 PROC_INFO_INC(sb, journal.journal_relock_wcount); in do_journal_begin_r()
3130 if (journal->j_trans_start_time == 0) { in do_journal_begin_r()
3131 journal->j_trans_start_time = ktime_get_seconds(); in do_journal_begin_r()
3133 atomic_inc(&journal->j_wcount); in do_journal_begin_r()
3134 journal->j_len_alloc += nblocks; in do_journal_begin_r()
3137 th->t_trans_id = journal->j_trans_id; in do_journal_begin_r()
3289 struct reiserfs_journal *journal = SB_JOURNAL(sb); in journal_mark_dirty() local
3295 PROC_INFO_INC(sb, journal.mark_dirty); in journal_mark_dirty()
3296 if (th->t_trans_id != journal->j_trans_id) { in journal_mark_dirty()
3297 reiserfs_panic(th->t_super, "journal-1577", in journal_mark_dirty()
3299 th->t_trans_id, journal->j_trans_id); in journal_mark_dirty()
3306 PROC_INFO_INC(sb, journal.mark_dirty_already); in journal_mark_dirty()
3316 reiserfs_warning(sb, "journal-1777", in journal_mark_dirty()
3326 if (atomic_read(&journal->j_wcount) <= 0) { in journal_mark_dirty()
3327 reiserfs_warning(sb, "journal-1409", in journal_mark_dirty()
3329 atomic_read(&journal->j_wcount)); in journal_mark_dirty()
3337 if (journal->j_len >= journal->j_trans_max) { in journal_mark_dirty()
3338 reiserfs_panic(th->t_super, "journal-1413", in journal_mark_dirty()
3340 journal->j_len); in journal_mark_dirty()
3345 PROC_INFO_INC(sb, journal.mark_dirty_notjournal); in journal_mark_dirty()
3349 if (journal->j_len > journal->j_len_alloc) { in journal_mark_dirty()
3350 journal->j_len_alloc = journal->j_len + JOURNAL_PER_BALANCE_CNT; in journal_mark_dirty()
3359 reiserfs_panic(sb, "journal-4", "get_cnode failed!"); in journal_mark_dirty()
3364 journal->j_len_alloc += JOURNAL_PER_BALANCE_CNT; in journal_mark_dirty()
3367 journal->j_len++; in journal_mark_dirty()
3373 insert_journal_hash(journal->j_hash_table, cn); in journal_mark_dirty()
3379 cn->prev = journal->j_last; in journal_mark_dirty()
3381 if (journal->j_last) { in journal_mark_dirty()
3382 journal->j_last->next = cn; in journal_mark_dirty()
3383 journal->j_last = cn; in journal_mark_dirty()
3385 journal->j_first = cn; in journal_mark_dirty()
3386 journal->j_last = cn; in journal_mark_dirty()
3438 struct reiserfs_journal *journal = SB_JOURNAL(sb); in remove_from_transaction() local
3441 cn = get_journal_hash_dev(sb, journal->j_hash_table, blocknr); in remove_from_transaction()
3452 if (cn == journal->j_first) { in remove_from_transaction()
3453 journal->j_first = cn->next; in remove_from_transaction()
3455 if (cn == journal->j_last) { in remove_from_transaction()
3456 journal->j_last = cn->prev; in remove_from_transaction()
3458 remove_journal_hash(sb, journal->j_hash_table, NULL, in remove_from_transaction()
3468 reiserfs_warning(sb, "journal-1752", in remove_from_transaction()
3473 journal->j_len--; in remove_from_transaction()
3474 journal->j_len_alloc--; in remove_from_transaction()
3480 * for any cnode in a journal list, it can only be dirtied of all the
3532 struct reiserfs_journal *journal = SB_JOURNAL(sb); in journal_end_sync() local
3537 if (journal->j_len == 0) { in journal_end_sync()
3548 struct reiserfs_journal *journal = in flush_async_commits() local
3550 struct super_block *sb = journal->j_work_sb; in flush_async_commits()
3555 if (!list_empty(&journal->j_journal_list)) { in flush_async_commits()
3557 entry = journal->j_journal_list.prev; in flush_async_commits()
3572 struct reiserfs_journal *journal = SB_JOURNAL(sb); in reiserfs_flush_old_commits() local
3579 if (list_empty(&journal->j_journal_list)) in reiserfs_flush_old_commits()
3586 if (atomic_read(&journal->j_wcount) <= 0 && in reiserfs_flush_old_commits()
3587 journal->j_trans_start_time > 0 && in reiserfs_flush_old_commits()
3588 journal->j_len > 0 && in reiserfs_flush_old_commits()
3589 (now - journal->j_trans_start_time) > journal->j_max_trans_age) { in reiserfs_flush_old_commits()
3630 struct reiserfs_journal *journal = SB_JOURNAL(sb); in check_journal_end() local
3634 if (th->t_trans_id != journal->j_trans_id) { in check_journal_end()
3635 reiserfs_panic(th->t_super, "journal-1577", in check_journal_end()
3637 th->t_trans_id, journal->j_trans_id); in check_journal_end()
3640 journal->j_len_alloc -= (th->t_blocks_allocated - th->t_blocks_logged); in check_journal_end()
3642 if (atomic_read(&journal->j_wcount) > 0) in check_journal_end()
3643 atomic_dec(&journal->j_wcount); in check_journal_end()
3651 BUG_ON(journal->j_len == 0); in check_journal_end()
3657 * Then, we flush the commit or journal list, and just return 0 in check_journal_end()
3658 * because the rest of journal end was already done for this in check_journal_end()
3661 if (atomic_read(&journal->j_wcount) > 0) { in check_journal_end()
3665 jl = journal->j_current_jl; in check_journal_end()
3669 atomic_set(&journal->j_jlock, 1); in check_journal_end()
3671 journal->j_next_full_flush = 1; in check_journal_end()
3679 while (journal->j_trans_id == trans_id) { in check_journal_end()
3680 if (atomic_read(&journal->j_jlock)) { in check_journal_end()
3684 if (journal->j_trans_id == trans_id) { in check_journal_end()
3685 atomic_set(&journal->j_jlock, in check_journal_end()
3691 BUG_ON(journal->j_trans_id == trans_id); in check_journal_end()
3706 if ((now - journal->j_trans_start_time) > journal->j_max_trans_age) { in check_journal_end()
3708 journal->j_next_async_flush = 1; in check_journal_end()
3712 if (!(journal->j_must_wait > 0) && !(atomic_read(&journal->j_jlock)) in check_journal_end()
3713 && !flush && !commit_now && (journal->j_len < journal->j_max_batch) in check_journal_end()
3714 && journal->j_len_alloc < journal->j_max_batch in check_journal_end()
3715 && journal->j_cnode_free > (journal->j_trans_max * 3)) { in check_journal_end()
3716 journal->j_bcount++; in check_journal_end()
3721 if (journal->j_start > SB_ONDISK_JOURNAL_SIZE(sb)) { in check_journal_end()
3722 reiserfs_panic(sb, "journal-003", in check_journal_end()
3724 journal->j_start); in check_journal_end()
3735 * set a bit for the block in the journal bitmap. That will prevent it from
3749 struct reiserfs_journal *journal = SB_JOURNAL(sb); in journal_mark_freed() local
3756 cn = get_journal_hash_dev(sb, journal->j_hash_table, blocknr); in journal_mark_freed()
3761 /* if it is journal new, we just remove it from this transaction */ in journal_mark_freed()
3769 * set the bit for this block in the journal bitmap in journal_mark_freed()
3772 jb = journal->j_current_jl->j_list_bitmap; in journal_mark_freed()
3774 reiserfs_panic(sb, "journal-1702", in journal_mark_freed()
3791 cn = get_journal_hash_dev(sb, journal->j_list_hash_table, in journal_mark_freed()
3813 "journal-2138", in journal_mark_freed()
3839 struct reiserfs_journal *journal = SB_JOURNAL(inode->i_sb); in reiserfs_update_inode_transaction() local
3840 REISERFS_I(inode)->i_jl = journal->j_current_jl; in reiserfs_update_inode_transaction()
3841 REISERFS_I(inode)->i_trans_id = journal->j_trans_id; in reiserfs_update_inode_transaction()
3853 struct reiserfs_journal *journal = SB_JOURNAL(sb); in __commit_trans_jl() local
3860 if (id == journal->j_trans_id) { in __commit_trans_jl()
3861 jl = journal->j_current_jl; in __commit_trans_jl()
3867 if (journal->j_trans_id != id) { in __commit_trans_jl()
3876 if (journal->j_trans_id != id) { in __commit_trans_jl()
3890 * this gets tricky, we have to make sure the journal list in in __commit_trans_jl()
3904 if (journal->j_errno) in __commit_trans_jl()
3905 ret = journal->j_errno; in __commit_trans_jl()
3933 struct reiserfs_journal *journal = SB_JOURNAL(sb); in reiserfs_restore_prepared_buffer() local
3934 PROC_INFO_INC(sb, journal.restore_prepared); in reiserfs_restore_prepared_buffer()
3943 journal->j_list_hash_table, in reiserfs_restore_prepared_buffer()
3964 PROC_INFO_INC(sb, journal.prepare); in reiserfs_prepare_for_journal()
3987 * If the journal is aborted, we just clean up. Things like flushing
3988 * journal lists, etc just won't happen.
3993 struct reiserfs_journal *journal = SB_JOURNAL(sb); in do_journal_end() local
4025 reiserfs_check_lock_depth(sb, "journal end"); in do_journal_end()
4026 if (journal->j_len == 0) { in do_journal_end()
4033 if (journal->j_next_full_flush) { in do_journal_end()
4037 if (journal->j_next_async_flush) { in do_journal_end()
4043 * check_journal_end locks the journal, and unlocks if it does in do_journal_end()
4055 if (journal->j_next_full_flush) { in do_journal_end()
4063 if (journal->j_must_wait > 0) { in do_journal_end()
4085 journal->j_start); in do_journal_end()
4090 set_desc_trans_id(desc, journal->j_trans_id); in do_journal_end()
4097 ((journal->j_start + journal->j_len + in do_journal_end()
4101 set_commit_trans_id(commit, journal->j_trans_id); in do_journal_end()
4104 /* init this journal list */ in do_journal_end()
4105 jl = journal->j_current_jl; in do_journal_end()
4119 jl->j_trans_id = journal->j_trans_id; in do_journal_end()
4120 jl->j_timestamp = journal->j_trans_start_time; in do_journal_end()
4122 jl->j_start = journal->j_start; in do_journal_end()
4123 jl->j_len = journal->j_len; in do_journal_end()
4124 atomic_set(&jl->j_nonzerolen, journal->j_len); in do_journal_end()
4125 atomic_set(&jl->j_commit_left, journal->j_len + 2); in do_journal_end()
4130 * for each real block, add it to the journal list hash, in do_journal_end()
4134 for (i = 0, cn = journal->j_first; cn; cn = cn->next, i++) { in do_journal_end()
4138 reiserfs_panic(sb, "journal-1676", in do_journal_end()
4152 * is not a block of journal or reserved area in do_journal_end()
4156 reiserfs_panic(sb, "journal-2332", in do_journal_end()
4166 insert_journal_hash(journal->j_list_hash_table, jl_cn); in do_journal_end()
4178 set_desc_trans_len(desc, journal->j_len); in do_journal_end()
4179 set_desc_mount_id(desc, journal->j_mount_id); in do_journal_end()
4180 set_desc_trans_id(desc, journal->j_trans_id); in do_journal_end()
4181 set_commit_trans_len(commit, journal->j_len); in do_journal_end()
4184 * special check in case all buffers in the journal in do_journal_end()
4187 BUG_ON(journal->j_len == 0); in do_journal_end()
4200 cur_write_start = journal->j_start; in do_journal_end()
4201 cn = journal->j_first; in do_journal_end()
4232 reiserfs_warning(sb, "journal-2048", in do_journal_end()
4233 "BAD, buffer in journal hash, " in do_journal_end()
4249 journal->j_current_jl = alloc_journal_list(sb); in do_journal_end()
4252 list_add_tail(&jl->j_list, &journal->j_journal_list); in do_journal_end()
4253 list_add_tail(&jl->j_working_list, &journal->j_working_list); in do_journal_end()
4254 journal->j_num_work_lists++; in do_journal_end()
4256 /* reset journal values for the next transaction */ in do_journal_end()
4257 journal->j_start = in do_journal_end()
4258 (journal->j_start + journal->j_len + in do_journal_end()
4260 atomic_set(&journal->j_wcount, 0); in do_journal_end()
4261 journal->j_bcount = 0; in do_journal_end()
4262 journal->j_last = NULL; in do_journal_end()
4263 journal->j_first = NULL; in do_journal_end()
4264 journal->j_len = 0; in do_journal_end()
4265 journal->j_trans_start_time = 0; in do_journal_end()
4267 if (++journal->j_trans_id == 0) in do_journal_end()
4268 journal->j_trans_id = 10; in do_journal_end()
4269 journal->j_current_jl->j_trans_id = journal->j_trans_id; in do_journal_end()
4270 journal->j_must_wait = 0; in do_journal_end()
4271 journal->j_len_alloc = 0; in do_journal_end()
4272 journal->j_next_full_flush = 0; in do_journal_end()
4273 journal->j_next_async_flush = 0; in do_journal_end()
4291 write_ordered_buffers(&journal->j_dirty_buffers_lock, in do_journal_end()
4292 journal, jl, &jl->j_tail_bh_list); in do_journal_end()
4300 * be done outside the journal lock, they are done below in do_journal_end()
4304 * queue don't wait for this proc to flush journal lists and such. in do_journal_end()
4312 * will be flushed on journal shutdown. in do_journal_end()
4316 &journal->j_work, HZ / 10); in do_journal_end()
4321 * transactions that might get overwritten. If any journal lists in do_journal_end()
4325 list_for_each_safe(entry, safe, &journal->j_journal_list) { in do_journal_end()
4327 if (journal->j_start <= temp_jl->j_start) { in do_journal_end()
4328 if ((journal->j_start + journal->j_trans_max + 1) >= in do_journal_end()
4332 } else if ((journal->j_start + in do_journal_end()
4333 journal->j_trans_max + 1) < in do_journal_end()
4343 } else if ((journal->j_start + in do_journal_end()
4344 journal->j_trans_max + 1) > in do_journal_end()
4346 if (((journal->j_start + journal->j_trans_max + 1) % in do_journal_end()
4363 journal->j_current_jl->j_list_bitmap = in do_journal_end()
4364 get_list_bitmap(sb, journal->j_current_jl); in do_journal_end()
4366 if (!(journal->j_current_jl->j_list_bitmap)) { in do_journal_end()
4367 reiserfs_panic(sb, "journal-1996", in do_journal_end()
4371 atomic_set(&journal->j_jlock, 0); in do_journal_end()
4374 clear_bit(J_WRITERS_QUEUED, &journal->j_state); in do_journal_end()
4375 wake_up(&journal->j_join_wait); in do_journal_end()
4382 reiserfs_check_lock_depth(sb, "journal end2"); in do_journal_end()
4392 return journal->j_errno; in do_journal_end()
4398 struct reiserfs_journal *journal = SB_JOURNAL(sb); in reiserfs_abort_journal() local
4399 if (test_bit(J_ABORTED, &journal->j_state)) in reiserfs_abort_journal()
4402 if (!journal->j_errno) in reiserfs_abort_journal()
4403 journal->j_errno = errno; in reiserfs_abort_journal()
4406 set_bit(J_ABORTED, &journal->j_state); in reiserfs_abort_journal()