Lines Matching full:cn

90 static int can_dirty(struct reiserfs_journal_cnode *cn);
369 struct reiserfs_journal_cnode *cn; in get_cnode() local
379 cn = journal->j_cnode_free_list; in get_cnode()
380 if (!cn) { in get_cnode()
381 return cn; in get_cnode()
383 if (cn->next) { in get_cnode()
384 cn->next->prev = NULL; in get_cnode()
386 journal->j_cnode_free_list = cn->next; in get_cnode()
387 memset(cn, 0, sizeof(struct reiserfs_journal_cnode)); in get_cnode()
388 return cn; in get_cnode()
395 struct reiserfs_journal_cnode *cn) in free_cnode() argument
403 /* memset(cn, 0, sizeof(struct reiserfs_journal_cnode)) ; */ in free_cnode()
404 cn->next = journal->j_cnode_free_list; in free_cnode()
406 journal->j_cnode_free_list->prev = cn; in free_cnode()
408cn->prev = NULL; /* not needed with the memset, but I might kill the memset, and forget to do this… in free_cnode()
409 journal->j_cnode_free_list = cn; in free_cnode()
430 struct reiserfs_journal_cnode *cn; in get_journal_hash_dev() local
431 cn = journal_hash(table, sb, bl); in get_journal_hash_dev()
432 while (cn) { in get_journal_hash_dev()
433 if (cn->blocknr == bl && cn->sb == sb) in get_journal_hash_dev()
434 return cn; in get_journal_hash_dev()
435 cn = cn->hnext; in get_journal_hash_dev()
514 /* insert cn into table */
516 struct reiserfs_journal_cnode *cn) in insert_journal_hash() argument
520 cn_orig = journal_hash(table, cn->sb, cn->blocknr); in insert_journal_hash()
521 cn->hnext = cn_orig; in insert_journal_hash()
522 cn->hprev = NULL; in insert_journal_hash()
524 cn_orig->hprev = cn; in insert_journal_hash()
526 journal_hash(table, cn->sb, cn->blocknr) = cn; in insert_journal_hash()
1170 *cn) in find_newer_jl_for_cn()
1172 struct super_block *sb = cn->sb; in find_newer_jl_for_cn()
1173 b_blocknr_t blocknr = cn->blocknr; in find_newer_jl_for_cn()
1175 cn = cn->hprev; in find_newer_jl_for_cn()
1176 while (cn) { in find_newer_jl_for_cn()
1177 if (cn->sb == sb && cn->blocknr == blocknr && cn->jlist) { in find_newer_jl_for_cn()
1178 return cn->jlist; in find_newer_jl_for_cn()
1180 cn = cn->hprev; in find_newer_jl_for_cn()
1201 struct reiserfs_journal_cnode *cn, *last; in remove_all_from_journal_list() local
1202 cn = jl->j_realblock; in remove_all_from_journal_list()
1208 while (cn) { in remove_all_from_journal_list()
1209 if (cn->blocknr != 0) { in remove_all_from_journal_list()
1213 cn->blocknr, cn->bh ? 1 : 0, in remove_all_from_journal_list()
1214 cn->state); in remove_all_from_journal_list()
1216 cn->state = 0; in remove_all_from_journal_list()
1218 jl, cn->blocknr, 1); in remove_all_from_journal_list()
1220 last = cn; in remove_all_from_journal_list()
1221 cn = cn->next; in remove_all_from_journal_list()
1350 struct reiserfs_journal_cnode *cn; in flush_journal_list() local
1411 cn = jl->j_realblock; in flush_journal_list()
1412 while (cn) { in flush_journal_list()
1417 if (cn->blocknr == 0) { in flush_journal_list()
1428 pjl = find_newer_jl_for_cn(cn); in flush_journal_list()
1434 if (!pjl && cn->bh) { in flush_journal_list()
1435 saved_bh = cn->bh; in flush_journal_list()
1444 BUG_ON(!can_dirty(cn)); in flush_journal_list()
1447 } else if (can_dirty(cn)) { in flush_journal_list()
1493 set_bit(BLOCK_NEEDS_FLUSH, &cn->state); in flush_journal_list()
1495 BUG_ON(cn->blocknr != saved_bh->b_blocknr); in flush_journal_list()
1508 cn = cn->next; in flush_journal_list()
1522 cn = jl->j_realblock; in flush_journal_list()
1523 while (cn) { in flush_journal_list()
1524 if (test_bit(BLOCK_NEEDS_FLUSH, &cn->state)) { in flush_journal_list()
1525 if (!cn->bh) { in flush_journal_list()
1527 "cn->bh is NULL"); in flush_journal_list()
1531 __wait_on_buffer(cn->bh); in flush_journal_list()
1534 if (!cn->bh) { in flush_journal_list()
1536 "cn->bh is NULL"); in flush_journal_list()
1538 if (unlikely(!buffer_uptodate(cn->bh))) { in flush_journal_list()
1551 (cn->bh)); in flush_journal_list()
1554 put_bh(cn->bh); in flush_journal_list()
1556 release_buffer_page(cn->bh); in flush_journal_list()
1558 cn = cn->next; in flush_journal_list()
1632 struct reiserfs_journal_cnode *cn; in write_one_transaction() local
1641 cn = jl->j_realblock; in write_one_transaction()
1642 while (cn) { in write_one_transaction()
1647 if (cn->blocknr == 0) { in write_one_transaction()
1650 if (cn->bh && can_dirty(cn) && buffer_dirty(cn->bh)) { in write_one_transaction()
1654 * to lock_buffer(cn->bh), so we have to inc the buffer in write_one_transaction()
1657 tmp_bh = cn->bh; in write_one_transaction()
1660 if (cn->bh && can_dirty(cn) && buffer_dirty(tmp_bh)) { in write_one_transaction()
1667 /* note, cn->bh might be null now */ in write_one_transaction()
1673 cn = cn->next; in write_one_transaction()
1683 struct reiserfs_journal_cnode *cn; in dirty_one_transaction() local
1687 cn = jl->j_realblock; in dirty_one_transaction()
1688 while (cn) { in dirty_one_transaction()
1694 pjl = find_newer_jl_for_cn(cn); in dirty_one_transaction()
1695 if (!pjl && cn->blocknr && cn->bh in dirty_one_transaction()
1696 && buffer_journal_dirty(cn->bh)) { in dirty_one_transaction()
1697 BUG_ON(!can_dirty(cn)); in dirty_one_transaction()
1703 clear_buffer_journal_new(cn->bh); in dirty_one_transaction()
1704 if (buffer_journal_prepared(cn->bh)) { in dirty_one_transaction()
1705 set_buffer_journal_restore_dirty(cn->bh); in dirty_one_transaction()
1707 set_buffer_journal_test(cn->bh); in dirty_one_transaction()
1708 mark_buffer_dirty(cn->bh); in dirty_one_transaction()
1711 cn = cn->next; in dirty_one_transaction()
3285 struct reiserfs_journal_cnode *cn = NULL; in journal_mark_dirty() local
3351 if (!cn) { in journal_mark_dirty()
3352 cn = get_cnode(sb); in journal_mark_dirty()
3353 if (!cn) { in journal_mark_dirty()
3364 cn->bh = bh; in journal_mark_dirty()
3365 cn->blocknr = bh->b_blocknr; in journal_mark_dirty()
3366 cn->sb = sb; in journal_mark_dirty()
3367 cn->jlist = NULL; in journal_mark_dirty()
3368 insert_journal_hash(journal->j_hash_table, cn); in journal_mark_dirty()
3373 cn->next = NULL; in journal_mark_dirty()
3374 cn->prev = journal->j_last; in journal_mark_dirty()
3375 cn->bh = bh; in journal_mark_dirty()
3377 journal->j_last->next = cn; in journal_mark_dirty()
3378 journal->j_last = cn; in journal_mark_dirty()
3380 journal->j_first = cn; in journal_mark_dirty()
3381 journal->j_last = cn; in journal_mark_dirty()
3432 struct reiserfs_journal_cnode *cn; in remove_from_transaction() local
3436 cn = get_journal_hash_dev(sb, journal->j_hash_table, blocknr); in remove_from_transaction()
3437 if (!cn || !cn->bh) { in remove_from_transaction()
3440 bh = cn->bh; in remove_from_transaction()
3441 if (cn->prev) { in remove_from_transaction()
3442 cn->prev->next = cn->next; in remove_from_transaction()
3444 if (cn->next) { in remove_from_transaction()
3445 cn->next->prev = cn->prev; in remove_from_transaction()
3447 if (cn == journal->j_first) { in remove_from_transaction()
3448 journal->j_first = cn->next; in remove_from_transaction()
3450 if (cn == journal->j_last) { in remove_from_transaction()
3451 journal->j_last = cn->prev; in remove_from_transaction()
3470 free_cnode(sb, cn); in remove_from_transaction()
3485 static int can_dirty(struct reiserfs_journal_cnode *cn) in can_dirty() argument
3487 struct super_block *sb = cn->sb; in can_dirty()
3488 b_blocknr_t blocknr = cn->blocknr; in can_dirty()
3489 struct reiserfs_journal_cnode *cur = cn->hprev; in can_dirty()
3493 * first test hprev. These are all newer than cn, so any node here in can_dirty()
3505 * then test hnext. These are all older than cn. As long as they in can_dirty()
3506 * are committed to the log, it is safe to write cn to disk in can_dirty()
3508 cur = cn->hnext; in can_dirty()
3745 struct reiserfs_journal_cnode *cn = NULL; in journal_mark_freed() local
3751 cn = get_journal_hash_dev(sb, journal->j_hash_table, blocknr); in journal_mark_freed()
3752 if (cn && cn->bh) { in journal_mark_freed()
3753 bh = cn->bh; in journal_mark_freed()
3786 cn = get_journal_hash_dev(sb, journal->j_list_hash_table, in journal_mark_freed()
3788 while (cn) { in journal_mark_freed()
3789 if (sb == cn->sb && blocknr == cn->blocknr) { in journal_mark_freed()
3790 set_bit(BLOCK_FREED, &cn->state); in journal_mark_freed()
3791 if (cn->bh) { in journal_mark_freed()
3798 clear_buffer_journal_dirty(cn-> in journal_mark_freed()
3800 clear_buffer_dirty(cn->bh); in journal_mark_freed()
3801 clear_buffer_journal_test(cn-> in journal_mark_freed()
3804 put_bh(cn->bh); in journal_mark_freed()
3806 (&cn->bh->b_count) < 0) { in journal_mark_freed()
3809 "cn->bh->b_count < 0"); in journal_mark_freed()
3816 if (cn->jlist) { in journal_mark_freed()
3817 atomic_dec(&cn->jlist-> in journal_mark_freed()
3820 cn->bh = NULL; in journal_mark_freed()
3823 cn = cn->hnext; in journal_mark_freed()
3935 struct reiserfs_journal_cnode *cn; in reiserfs_restore_prepared_buffer() local
3937 cn = get_journal_hash_dev(sb, in reiserfs_restore_prepared_buffer()
3940 if (cn && can_dirty(cn)) { in reiserfs_restore_prepared_buffer()
3989 struct reiserfs_journal_cnode *cn, *next, *jl_cn; in do_journal_end() local
4129 for (i = 0, cn = journal->j_first; cn; cn = cn->next, i++) { in do_journal_end()
4130 if (buffer_journaled(cn->bh)) { in do_journal_end()
4150 (sb, cn->bh->b_blocknr)) { in do_journal_end()
4154 cn->bh->b_blocknr); in do_journal_end()
4156 jl_cn->blocknr = cn->bh->b_blocknr; in do_journal_end()
4159 jl_cn->bh = cn->bh; in do_journal_end()
4164 cpu_to_le32(cn->bh->b_blocknr); in do_journal_end()
4167 cpu_to_le32(cn->bh->b_blocknr); in do_journal_end()
4196 cn = journal->j_first; in do_journal_end()
4198 while (cn) { in do_journal_end()
4199 clear_buffer_journal_new(cn->bh); in do_journal_end()
4201 if (buffer_journaled(cn->bh)) { in do_journal_end()
4212 page = cn->bh->b_page; in do_journal_end()
4215 addr + offset_in_page(cn->bh->b_data), in do_journal_end()
4216 cn->bh->b_size); in do_journal_end()
4220 set_buffer_journal_dirty(cn->bh); in do_journal_end()
4221 clear_buffer_journaled(cn->bh); in do_journal_end()
4230 brelse(cn->bh); in do_journal_end()
4232 next = cn->next; in do_journal_end()
4233 free_cnode(sb, cn); in do_journal_end()
4234 cn = next; in do_journal_end()