Lines Matching refs:cn
97 static int can_dirty(struct reiserfs_journal_cnode *cn);
373 struct reiserfs_journal_cnode *cn; in get_cnode() local
383 cn = journal->j_cnode_free_list; in get_cnode()
384 if (!cn) { in get_cnode()
385 return cn; in get_cnode()
387 if (cn->next) { in get_cnode()
388 cn->next->prev = NULL; in get_cnode()
390 journal->j_cnode_free_list = cn->next; in get_cnode()
391 memset(cn, 0, sizeof(struct reiserfs_journal_cnode)); in get_cnode()
392 return cn; in get_cnode()
399 struct reiserfs_journal_cnode *cn) in free_cnode() argument
408 cn->next = journal->j_cnode_free_list; in free_cnode()
410 journal->j_cnode_free_list->prev = cn; in free_cnode()
412 …cn->prev = NULL; /* not needed with the memset, but I might kill the memset, and forget to do this… in free_cnode()
413 journal->j_cnode_free_list = cn; in free_cnode()
431 struct reiserfs_journal_cnode *cn; in get_journal_hash_dev() local
432 cn = journal_hash(table, sb, bl); in get_journal_hash_dev()
433 while (cn) { in get_journal_hash_dev()
434 if (cn->blocknr == bl && cn->sb == sb) in get_journal_hash_dev()
435 return cn; in get_journal_hash_dev()
436 cn = cn->hnext; in get_journal_hash_dev()
464 struct reiserfs_journal_cnode *cn; in reiserfs_in_journal() local
498 && (cn = in reiserfs_in_journal()
504 if ((cn = get_journal_hash_dev(sb, journal->j_hash_table, bl))) { in reiserfs_in_journal()
517 struct reiserfs_journal_cnode *cn) in insert_journal_hash() argument
521 cn_orig = journal_hash(table, cn->sb, cn->blocknr); in insert_journal_hash()
522 cn->hnext = cn_orig; in insert_journal_hash()
523 cn->hprev = NULL; in insert_journal_hash()
525 cn_orig->hprev = cn; in insert_journal_hash()
527 journal_hash(table, cn->sb, cn->blocknr) = cn; in insert_journal_hash()
1148 *cn) in find_newer_jl_for_cn()
1150 struct super_block *sb = cn->sb; in find_newer_jl_for_cn()
1151 b_blocknr_t blocknr = cn->blocknr; in find_newer_jl_for_cn()
1153 cn = cn->hprev; in find_newer_jl_for_cn()
1154 while (cn) { in find_newer_jl_for_cn()
1155 if (cn->sb == sb && cn->blocknr == blocknr && cn->jlist) { in find_newer_jl_for_cn()
1156 return cn->jlist; in find_newer_jl_for_cn()
1158 cn = cn->hprev; in find_newer_jl_for_cn()
1163 static int newer_jl_done(struct reiserfs_journal_cnode *cn) in newer_jl_done() argument
1165 struct super_block *sb = cn->sb; in newer_jl_done()
1166 b_blocknr_t blocknr = cn->blocknr; in newer_jl_done()
1168 cn = cn->hprev; in newer_jl_done()
1169 while (cn) { in newer_jl_done()
1170 if (cn->sb == sb && cn->blocknr == blocknr && cn->jlist && in newer_jl_done()
1171 atomic_read(&cn->jlist->j_commit_left) != 0) in newer_jl_done()
1173 cn = cn->hprev; in newer_jl_done()
1193 struct reiserfs_journal_cnode *cn, *last; in remove_all_from_journal_list() local
1194 cn = jl->j_realblock; in remove_all_from_journal_list()
1199 while (cn) { in remove_all_from_journal_list()
1200 if (cn->blocknr != 0) { in remove_all_from_journal_list()
1204 cn->blocknr, cn->bh ? 1 : 0, in remove_all_from_journal_list()
1205 cn->state); in remove_all_from_journal_list()
1207 cn->state = 0; in remove_all_from_journal_list()
1209 jl, cn->blocknr, 1); in remove_all_from_journal_list()
1211 last = cn; in remove_all_from_journal_list()
1212 cn = cn->next; in remove_all_from_journal_list()
1336 struct reiserfs_journal_cnode *cn, *last; in flush_journal_list() local
1395 cn = jl->j_realblock; in flush_journal_list()
1396 while (cn) { in flush_journal_list()
1401 if (cn->blocknr == 0) { in flush_journal_list()
1409 pjl = find_newer_jl_for_cn(cn); in flush_journal_list()
1414 if (!pjl && cn->bh) { in flush_journal_list()
1415 saved_bh = cn->bh; in flush_journal_list()
1423 BUG_ON(!can_dirty(cn)); in flush_journal_list()
1426 } else if (can_dirty(cn)) { in flush_journal_list()
1463 set_bit(BLOCK_NEEDS_FLUSH, &cn->state); in flush_journal_list()
1465 BUG_ON(cn->blocknr != saved_bh->b_blocknr); in flush_journal_list()
1478 last = cn; in flush_journal_list()
1479 cn = cn->next; in flush_journal_list()
1490 cn = jl->j_realblock; in flush_journal_list()
1491 while (cn) { in flush_journal_list()
1492 if (test_bit(BLOCK_NEEDS_FLUSH, &cn->state)) { in flush_journal_list()
1493 if (!cn->bh) { in flush_journal_list()
1499 wait_on_buffer(cn->bh); in flush_journal_list()
1502 if (!cn->bh) { in flush_journal_list()
1506 if (unlikely(!buffer_uptodate(cn->bh))) { in flush_journal_list()
1517 (cn->bh)); in flush_journal_list()
1520 put_bh(cn->bh); in flush_journal_list()
1522 release_buffer_page(cn->bh); in flush_journal_list()
1524 cn = cn->next; in flush_journal_list()
1594 struct reiserfs_journal_cnode *cn; in test_transaction() local
1599 cn = jl->j_realblock; in test_transaction()
1600 while (cn) { in test_transaction()
1604 if (cn->blocknr == 0) { in test_transaction()
1607 if (cn->bh && !newer_jl_done(cn)) in test_transaction()
1610 cn = cn->next; in test_transaction()
1620 struct reiserfs_journal_cnode *cn; in write_one_transaction() local
1629 cn = jl->j_realblock; in write_one_transaction()
1630 while (cn) { in write_one_transaction()
1634 if (cn->blocknr == 0) { in write_one_transaction()
1637 if (cn->bh && can_dirty(cn) && buffer_dirty(cn->bh)) { in write_one_transaction()
1643 tmp_bh = cn->bh; in write_one_transaction()
1646 if (cn->bh && can_dirty(cn) && buffer_dirty(tmp_bh)) { in write_one_transaction()
1659 cn = cn->next; in write_one_transaction()
1669 struct reiserfs_journal_cnode *cn; in dirty_one_transaction() local
1674 cn = jl->j_realblock; in dirty_one_transaction()
1675 while (cn) { in dirty_one_transaction()
1680 pjl = find_newer_jl_for_cn(cn); in dirty_one_transaction()
1681 if (!pjl && cn->blocknr && cn->bh in dirty_one_transaction()
1682 && buffer_journal_dirty(cn->bh)) { in dirty_one_transaction()
1683 BUG_ON(!can_dirty(cn)); in dirty_one_transaction()
1688 clear_buffer_journal_new(cn->bh); in dirty_one_transaction()
1689 if (buffer_journal_prepared(cn->bh)) { in dirty_one_transaction()
1690 set_buffer_journal_restore_dirty(cn->bh); in dirty_one_transaction()
1692 set_buffer_journal_test(cn->bh); in dirty_one_transaction()
1693 mark_buffer_dirty(cn->bh); in dirty_one_transaction()
1696 cn = cn->next; in dirty_one_transaction()
3214 struct reiserfs_journal_cnode *cn = NULL; in journal_mark_dirty() local
3277 if (!cn) { in journal_mark_dirty()
3278 cn = get_cnode(sb); in journal_mark_dirty()
3279 if (!cn) { in journal_mark_dirty()
3290 cn->bh = bh; in journal_mark_dirty()
3291 cn->blocknr = bh->b_blocknr; in journal_mark_dirty()
3292 cn->sb = sb; in journal_mark_dirty()
3293 cn->jlist = NULL; in journal_mark_dirty()
3294 insert_journal_hash(journal->j_hash_table, cn); in journal_mark_dirty()
3299 cn->next = NULL; in journal_mark_dirty()
3300 cn->prev = journal->j_last; in journal_mark_dirty()
3301 cn->bh = bh; in journal_mark_dirty()
3303 journal->j_last->next = cn; in journal_mark_dirty()
3304 journal->j_last = cn; in journal_mark_dirty()
3306 journal->j_first = cn; in journal_mark_dirty()
3307 journal->j_last = cn; in journal_mark_dirty()
3356 struct reiserfs_journal_cnode *cn; in remove_from_transaction() local
3360 cn = get_journal_hash_dev(sb, journal->j_hash_table, blocknr); in remove_from_transaction()
3361 if (!cn || !cn->bh) { in remove_from_transaction()
3364 bh = cn->bh; in remove_from_transaction()
3365 if (cn->prev) { in remove_from_transaction()
3366 cn->prev->next = cn->next; in remove_from_transaction()
3368 if (cn->next) { in remove_from_transaction()
3369 cn->next->prev = cn->prev; in remove_from_transaction()
3371 if (cn == journal->j_first) { in remove_from_transaction()
3372 journal->j_first = cn->next; in remove_from_transaction()
3374 if (cn == journal->j_last) { in remove_from_transaction()
3375 journal->j_last = cn->prev; in remove_from_transaction()
3395 free_cnode(sb, cn); in remove_from_transaction()
3409 static int can_dirty(struct reiserfs_journal_cnode *cn) in can_dirty() argument
3411 struct super_block *sb = cn->sb; in can_dirty()
3412 b_blocknr_t blocknr = cn->blocknr; in can_dirty()
3413 struct reiserfs_journal_cnode *cur = cn->hprev; in can_dirty()
3430 cur = cn->hnext; in can_dirty()
3652 struct reiserfs_journal_cnode *cn = NULL; in journal_mark_freed() local
3658 cn = get_journal_hash_dev(sb, journal->j_hash_table, blocknr); in journal_mark_freed()
3659 if (cn && cn->bh) { in journal_mark_freed()
3660 bh = cn->bh; in journal_mark_freed()
3687 cn = get_journal_hash_dev(sb, journal->j_list_hash_table, in journal_mark_freed()
3689 while (cn) { in journal_mark_freed()
3690 if (sb == cn->sb && blocknr == cn->blocknr) { in journal_mark_freed()
3691 set_bit(BLOCK_FREED, &cn->state); in journal_mark_freed()
3692 if (cn->bh) { in journal_mark_freed()
3697 clear_buffer_journal_dirty(cn-> in journal_mark_freed()
3699 clear_buffer_dirty(cn->bh); in journal_mark_freed()
3700 clear_buffer_journal_test(cn-> in journal_mark_freed()
3703 put_bh(cn->bh); in journal_mark_freed()
3705 (&(cn->bh->b_count)) < 0) { in journal_mark_freed()
3711 if (cn->jlist) { /* since we are clearing the bh, we MUST dec nonzerolen */ in journal_mark_freed()
3713 (cn->jlist-> in journal_mark_freed()
3716 cn->bh = NULL; in journal_mark_freed()
3719 cn = cn->hnext; in journal_mark_freed()
3823 struct reiserfs_journal_cnode *cn; in reiserfs_restore_prepared_buffer() local
3824 cn = get_journal_hash_dev(sb, in reiserfs_restore_prepared_buffer()
3827 if (cn && can_dirty(cn)) { in reiserfs_restore_prepared_buffer()
3898 struct reiserfs_journal_cnode *cn, *next, *jl_cn; in do_journal_end() local
4024 for (i = 0, cn = journal->j_first; cn; cn = cn->next, i++) { in do_journal_end()
4025 if (buffer_journaled(cn->bh)) { in do_journal_end()
4044 (sb, cn->bh->b_blocknr)) { in do_journal_end()
4048 cn->bh->b_blocknr); in do_journal_end()
4050 jl_cn->blocknr = cn->bh->b_blocknr; in do_journal_end()
4053 jl_cn->bh = cn->bh; in do_journal_end()
4058 cpu_to_le32(cn->bh->b_blocknr); in do_journal_end()
4061 cpu_to_le32(cn->bh->b_blocknr); in do_journal_end()
4083 cn = journal->j_first; in do_journal_end()
4085 while (cn) { in do_journal_end()
4086 clear_buffer_journal_new(cn->bh); in do_journal_end()
4088 if (buffer_journaled(cn->bh)) { in do_journal_end()
4099 page = cn->bh->b_page; in do_journal_end()
4102 addr + offset_in_page(cn->bh->b_data), in do_journal_end()
4103 cn->bh->b_size); in do_journal_end()
4107 set_buffer_journal_dirty(cn->bh); in do_journal_end()
4108 clear_buffer_journaled(cn->bh); in do_journal_end()
4114 brelse(cn->bh); in do_journal_end()
4116 next = cn->next; in do_journal_end()
4117 free_cnode(sb, cn); in do_journal_end()
4118 cn = next; in do_journal_end()