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()
3290 struct reiserfs_journal_cnode *cn = NULL; in journal_mark_dirty() local
3356 if (!cn) { in journal_mark_dirty()
3357 cn = get_cnode(sb); in journal_mark_dirty()
3358 if (!cn) { in journal_mark_dirty()
3369 cn->bh = bh; in journal_mark_dirty()
3370 cn->blocknr = bh->b_blocknr; in journal_mark_dirty()
3371 cn->sb = sb; in journal_mark_dirty()
3372 cn->jlist = NULL; in journal_mark_dirty()
3373 insert_journal_hash(journal->j_hash_table, cn); in journal_mark_dirty()
3378 cn->next = NULL; in journal_mark_dirty()
3379 cn->prev = journal->j_last; in journal_mark_dirty()
3380 cn->bh = bh; 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()
3437 struct reiserfs_journal_cnode *cn; in remove_from_transaction() local
3441 cn = get_journal_hash_dev(sb, journal->j_hash_table, blocknr); in remove_from_transaction()
3442 if (!cn || !cn->bh) { in remove_from_transaction()
3445 bh = cn->bh; in remove_from_transaction()
3446 if (cn->prev) { in remove_from_transaction()
3447 cn->prev->next = cn->next; in remove_from_transaction()
3449 if (cn->next) { in remove_from_transaction()
3450 cn->next->prev = cn->prev; 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()
3475 free_cnode(sb, cn); in remove_from_transaction()
3490 static int can_dirty(struct reiserfs_journal_cnode *cn) in can_dirty() argument
3492 struct super_block *sb = cn->sb; in can_dirty()
3493 b_blocknr_t blocknr = cn->blocknr; in can_dirty()
3494 struct reiserfs_journal_cnode *cur = cn->hprev; in can_dirty()
3498 * first test hprev. These are all newer than cn, so any node here in can_dirty()
3510 * then test hnext. These are all older than cn. As long as they in can_dirty()
3511 * are committed to the log, it is safe to write cn to disk in can_dirty()
3513 cur = cn->hnext; in can_dirty()
3750 struct reiserfs_journal_cnode *cn = NULL; in journal_mark_freed() local
3756 cn = get_journal_hash_dev(sb, journal->j_hash_table, blocknr); in journal_mark_freed()
3757 if (cn && cn->bh) { in journal_mark_freed()
3758 bh = cn->bh; in journal_mark_freed()
3791 cn = get_journal_hash_dev(sb, journal->j_list_hash_table, in journal_mark_freed()
3793 while (cn) { in journal_mark_freed()
3794 if (sb == cn->sb && blocknr == cn->blocknr) { in journal_mark_freed()
3795 set_bit(BLOCK_FREED, &cn->state); in journal_mark_freed()
3796 if (cn->bh) { in journal_mark_freed()
3803 clear_buffer_journal_dirty(cn-> in journal_mark_freed()
3805 clear_buffer_dirty(cn->bh); in journal_mark_freed()
3806 clear_buffer_journal_test(cn-> in journal_mark_freed()
3809 put_bh(cn->bh); in journal_mark_freed()
3811 (&cn->bh->b_count) < 0) { in journal_mark_freed()
3814 "cn->bh->b_count < 0"); in journal_mark_freed()
3821 if (cn->jlist) { in journal_mark_freed()
3822 atomic_dec(&cn->jlist-> in journal_mark_freed()
3825 cn->bh = NULL; in journal_mark_freed()
3828 cn = cn->hnext; in journal_mark_freed()
3940 struct reiserfs_journal_cnode *cn; in reiserfs_restore_prepared_buffer() local
3942 cn = get_journal_hash_dev(sb, in reiserfs_restore_prepared_buffer()
3945 if (cn && can_dirty(cn)) { in reiserfs_restore_prepared_buffer()
3994 struct reiserfs_journal_cnode *cn, *next, *jl_cn; in do_journal_end() local
4134 for (i = 0, cn = journal->j_first; cn; cn = cn->next, i++) { in do_journal_end()
4135 if (buffer_journaled(cn->bh)) { in do_journal_end()
4155 (sb, cn->bh->b_blocknr)) { in do_journal_end()
4159 cn->bh->b_blocknr); in do_journal_end()
4161 jl_cn->blocknr = cn->bh->b_blocknr; in do_journal_end()
4164 jl_cn->bh = cn->bh; in do_journal_end()
4169 cpu_to_le32(cn->bh->b_blocknr); in do_journal_end()
4172 cpu_to_le32(cn->bh->b_blocknr); in do_journal_end()
4201 cn = journal->j_first; in do_journal_end()
4203 while (cn) { in do_journal_end()
4204 clear_buffer_journal_new(cn->bh); in do_journal_end()
4206 if (buffer_journaled(cn->bh)) { in do_journal_end()
4217 page = cn->bh->b_page; in do_journal_end()
4220 addr + offset_in_page(cn->bh->b_data), in do_journal_end()
4221 cn->bh->b_size); in do_journal_end()
4225 set_buffer_journal_dirty(cn->bh); in do_journal_end()
4226 clear_buffer_journaled(cn->bh); in do_journal_end()
4235 brelse(cn->bh); in do_journal_end()
4237 next = cn->next; in do_journal_end()
4238 free_cnode(sb, cn); in do_journal_end()
4239 cn = next; in do_journal_end()