Lines Matching refs:inode
114 static void logfs_disk_to_inode(struct logfs_disk_inode *di, struct inode*inode) in logfs_disk_to_inode() argument
116 struct logfs_inode *li = logfs_inode(inode); in logfs_disk_to_inode()
119 inode->i_mode = be16_to_cpu(di->di_mode); in logfs_disk_to_inode()
122 i_uid_write(inode, be32_to_cpu(di->di_uid)); in logfs_disk_to_inode()
123 i_gid_write(inode, be32_to_cpu(di->di_gid)); in logfs_disk_to_inode()
124 inode->i_size = be64_to_cpu(di->di_size); in logfs_disk_to_inode()
125 logfs_set_blocks(inode, be64_to_cpu(di->di_used_bytes)); in logfs_disk_to_inode()
126 inode->i_atime = be64_to_timespec(di->di_atime); in logfs_disk_to_inode()
127 inode->i_ctime = be64_to_timespec(di->di_ctime); in logfs_disk_to_inode()
128 inode->i_mtime = be64_to_timespec(di->di_mtime); in logfs_disk_to_inode()
129 set_nlink(inode, be32_to_cpu(di->di_refcount)); in logfs_disk_to_inode()
130 inode->i_generation = be32_to_cpu(di->di_generation); in logfs_disk_to_inode()
132 switch (inode->i_mode & S_IFMT) { in logfs_disk_to_inode()
137 inode->i_rdev = be64_to_cpu(di->di_data[0]); in logfs_disk_to_inode()
150 static void logfs_inode_to_disk(struct inode *inode, struct logfs_disk_inode*di) in logfs_inode_to_disk() argument
152 struct logfs_inode *li = logfs_inode(inode); in logfs_inode_to_disk()
155 di->di_mode = cpu_to_be16(inode->i_mode); in logfs_inode_to_disk()
159 di->di_uid = cpu_to_be32(i_uid_read(inode)); in logfs_inode_to_disk()
160 di->di_gid = cpu_to_be32(i_gid_read(inode)); in logfs_inode_to_disk()
161 di->di_size = cpu_to_be64(i_size_read(inode)); in logfs_inode_to_disk()
163 di->di_atime = timespec_to_be64(inode->i_atime); in logfs_inode_to_disk()
164 di->di_ctime = timespec_to_be64(inode->i_ctime); in logfs_inode_to_disk()
165 di->di_mtime = timespec_to_be64(inode->i_mtime); in logfs_inode_to_disk()
166 di->di_refcount = cpu_to_be32(inode->i_nlink); in logfs_inode_to_disk()
167 di->di_generation = cpu_to_be32(inode->i_generation); in logfs_inode_to_disk()
169 switch (inode->i_mode & S_IFMT) { in logfs_inode_to_disk()
174 di->di_data[0] = cpu_to_be64(inode->i_rdev); in logfs_inode_to_disk()
187 static void __logfs_set_blocks(struct inode *inode) in __logfs_set_blocks() argument
189 struct super_block *sb = inode->i_sb; in __logfs_set_blocks()
190 struct logfs_inode *li = logfs_inode(inode); in __logfs_set_blocks()
192 inode->i_blocks = ULONG_MAX; in __logfs_set_blocks()
194 inode->i_blocks = ALIGN(li->li_used_bytes, 512) >> 9; in __logfs_set_blocks()
197 void logfs_set_blocks(struct inode *inode, u64 bytes) in logfs_set_blocks() argument
199 struct logfs_inode *li = logfs_inode(inode); in logfs_set_blocks()
202 __logfs_set_blocks(inode); in logfs_set_blocks()
274 static struct page *logfs_get_read_page(struct inode *inode, u64 bix, in logfs_get_read_page() argument
277 return find_or_create_page(inode->i_mapping, in logfs_get_read_page()
310 static struct page *logfs_get_write_page(struct inode *inode, u64 bix, in logfs_get_write_page() argument
313 struct address_space *mapping = inode->i_mapping; in logfs_get_write_page()
348 static struct page *logfs_get_page(struct inode *inode, u64 bix, level_t level, in logfs_get_page() argument
352 return logfs_get_read_page(inode, bix, level); in logfs_get_page()
354 return logfs_get_write_page(inode, bix, level); in logfs_get_page()
392 struct inode *inode; in indirect_write_block() local
396 inode = page->mapping->host; in indirect_write_block()
398 ret = logfs_write_buf(inode, page, 0); in indirect_write_block()
418 struct inode *inode; in inode_write_block() local
421 inode = block->inode; in inode_write_block()
422 if (inode->i_ino == LOGFS_INO_MASTER) in inode_write_block()
423 logfs_write_anchor(inode->i_sb); in inode_write_block()
425 ret = __logfs_write_inode(inode, NULL, 0); in inode_write_block()
442 static __be64 inode_val0(struct inode *inode) in inode_val0() argument
444 struct logfs_inode *li = logfs_inode(inode); in inode_val0()
455 val = (u64)inode->i_mode << 48 | in inode_val0()
464 struct inode *inode = block->inode; in inode_write_alias() local
465 struct logfs_inode *li = logfs_inode(inode); in inode_write_alias()
479 val = inode_val0(inode); in inode_write_alias()
485 val = cpu_to_be64(i_size_read(inode)); in inode_write_alias()
495 bix = inode->i_ino; in inode_write_alias()
552 struct inode *inode = block->inode; in inode_free_block() local
554 logfs_inode(inode)->li_block = NULL; in inode_free_block()
601 static void alloc_inode_block(struct inode *inode) in alloc_inode_block() argument
603 struct logfs_inode *li = logfs_inode(inode); in alloc_inode_block()
609 block = __alloc_block(inode->i_sb, LOGFS_INO_MASTER, inode->i_ino, 0); in alloc_inode_block()
610 block->inode = inode; in alloc_inode_block()
644 static void alloc_data_block(struct inode *inode, struct page *page) in alloc_data_block() argument
654 block = __alloc_block(inode->i_sb, inode->i_ino, bix, level); in alloc_data_block()
664 static void alloc_indirect_block(struct inode *inode, struct page *page, in alloc_indirect_block() argument
673 alloc_data_block(inode, page); in alloc_indirect_block()
716 static int logfs_read_direct(struct inode *inode, struct page *page) in logfs_read_direct() argument
718 struct logfs_inode *li = logfs_inode(inode); in logfs_read_direct()
726 return logfs_segment_read(inode, page, block, index, 0); in logfs_read_direct()
729 static int logfs_read_loop(struct inode *inode, struct page *page, in logfs_read_loop() argument
732 struct logfs_inode *li = logfs_inode(inode); in logfs_read_loop()
748 ipage = logfs_get_page(inode, bix, level, rw_context); in logfs_read_loop()
752 ret = logfs_segment_read(inode, ipage, bofs, bix, level); in logfs_read_loop()
764 return logfs_segment_read(inode, page, bofs, bix, 0); in logfs_read_loop()
767 static int logfs_read_block(struct inode *inode, struct page *page, in logfs_read_block() argument
773 return logfs_read_direct(inode, page); in logfs_read_block()
774 return logfs_read_loop(inode, page, rw_context); in logfs_read_block()
777 static int logfs_exist_loop(struct inode *inode, u64 bix) in logfs_exist_loop() argument
779 struct logfs_inode *li = logfs_inode(inode); in logfs_exist_loop()
791 ipage = logfs_get_read_page(inode, bix, level); in logfs_exist_loop()
795 ret = logfs_segment_read(inode, ipage, bofs, bix, level); in logfs_exist_loop()
810 int logfs_exist_block(struct inode *inode, u64 bix) in logfs_exist_block() argument
812 struct logfs_inode *li = logfs_inode(inode); in logfs_exist_block()
816 return logfs_exist_loop(inode, bix); in logfs_exist_block()
819 static u64 seek_holedata_direct(struct inode *inode, u64 bix, int data) in seek_holedata_direct() argument
821 struct logfs_inode *li = logfs_inode(inode); in seek_holedata_direct()
829 static u64 seek_holedata_loop(struct inode *inode, u64 bix, int data) in seek_holedata_loop() argument
831 struct logfs_inode *li = logfs_inode(inode); in seek_holedata_loop()
842 page = logfs_get_read_page(inode, bix, level); in seek_holedata_loop()
846 ret = logfs_segment_read(inode, page, bofs, bix, level); in seek_holedata_loop()
887 u64 logfs_seek_hole(struct inode *inode, u64 bix) in logfs_seek_hole() argument
889 struct logfs_inode *li = logfs_inode(inode); in logfs_seek_hole()
892 bix = seek_holedata_direct(inode, bix, 0); in logfs_seek_hole()
904 bix = seek_holedata_loop(inode, bix, 0); in logfs_seek_hole()
916 static u64 __logfs_seek_data(struct inode *inode, u64 bix) in __logfs_seek_data() argument
918 struct logfs_inode *li = logfs_inode(inode); in __logfs_seek_data()
921 bix = seek_holedata_direct(inode, bix, 1); in __logfs_seek_data()
930 return seek_holedata_loop(inode, bix, 1); in __logfs_seek_data()
944 u64 logfs_seek_data(struct inode *inode, u64 bix) in logfs_seek_data() argument
946 struct super_block *sb = inode->i_sb; in logfs_seek_data()
949 ret = __logfs_seek_data(inode, bix); in logfs_seek_data()
950 end = i_size_read(inode) >> sb->s_blocksize_bits; in logfs_seek_data()
961 static int __logfs_is_valid_loop(struct inode *inode, u64 bix, in __logfs_is_valid_loop() argument
964 struct logfs_inode *li = logfs_inode(inode); in __logfs_is_valid_loop()
970 page = logfs_get_write_page(inode, bix, level); in __logfs_is_valid_loop()
973 ret = logfs_segment_read(inode, page, bofs, bix, level); in __logfs_is_valid_loop()
990 static int logfs_is_valid_loop(struct inode *inode, u64 bix, u64 ofs) in logfs_is_valid_loop() argument
992 struct logfs_inode *li = logfs_inode(inode); in logfs_is_valid_loop()
1004 return __logfs_is_valid_loop(inode, bix, ofs, bofs); in logfs_is_valid_loop()
1007 static int __logfs_is_valid_block(struct inode *inode, u64 bix, u64 ofs) in __logfs_is_valid_block() argument
1009 struct logfs_inode *li = logfs_inode(inode); in __logfs_is_valid_block()
1011 if ((inode->i_nlink == 0) && atomic_read(&inode->i_count) == 1) in __logfs_is_valid_block()
1016 return logfs_is_valid_loop(inode, bix, ofs); in __logfs_is_valid_block()
1035 struct inode *inode; in logfs_is_valid_block() local
1045 inode = logfs_safe_iget(sb, ino, &cookie); in logfs_is_valid_block()
1046 if (IS_ERR(inode)) in logfs_is_valid_block()
1049 ret = __logfs_is_valid_block(inode, bix, ofs); in logfs_is_valid_block()
1050 logfs_safe_iput(inode, cookie); in logfs_is_valid_block()
1065 struct inode *inode = page->mapping->host; in logfs_readpage_nolock() local
1068 ret = logfs_read_block(inode, page, READ); in logfs_readpage_nolock()
1082 static int logfs_reserve_bytes(struct inode *inode, int bytes) in logfs_reserve_bytes() argument
1084 struct logfs_super *super = logfs_super(inode->i_sb); in logfs_reserve_bytes()
1101 int get_page_reserve(struct inode *inode, struct page *page) in get_page_reserve() argument
1103 struct logfs_super *super = logfs_super(inode->i_sb); in get_page_reserve()
1110 logfs_get_wblocks(inode->i_sb, page, WF_LOCK); in get_page_reserve()
1111 while ((ret = logfs_reserve_bytes(inode, 6 * LOGFS_MAX_OBJECTSIZE)) && in get_page_reserve()
1118 alloc_data_block(inode, page); in get_page_reserve()
1124 logfs_put_wblocks(inode->i_sb, page, WF_LOCK); in get_page_reserve()
1133 static void logfs_handle_transaction(struct inode *inode, in logfs_handle_transaction() argument
1136 struct logfs_super *super = logfs_super(inode->i_sb); in logfs_handle_transaction()
1140 logfs_inode(inode)->li_block->ta = NULL; in logfs_handle_transaction()
1142 if (inode->i_ino != LOGFS_INO_MASTER) { in logfs_handle_transaction()
1207 static int logfs_reserve_blocks(struct inode *inode, int blocks) in logfs_reserve_blocks() argument
1209 return logfs_reserve_bytes(inode, blocks * LOGFS_MAX_OBJECTSIZE); in logfs_reserve_blocks()
1217 static struct logfs_shadow *alloc_shadow(struct inode *inode, u64 bix, in alloc_shadow() argument
1220 struct logfs_super *super = logfs_super(inode->i_sb); in alloc_shadow()
1225 shadow->ino = inode->i_ino; in alloc_shadow()
1227 shadow->gc_level = expand_level(inode->i_ino, level); in alloc_shadow()
1232 static void free_shadow(struct inode *inode, struct logfs_shadow *shadow) in free_shadow() argument
1234 struct logfs_super *super = logfs_super(inode->i_sb); in free_shadow()
1274 static void fill_shadow_tree(struct inode *inode, struct page *page, in fill_shadow_tree() argument
1277 struct logfs_super *super = logfs_super(inode->i_sb); in fill_shadow_tree()
1285 logfs_handle_transaction(inode, block->ta); in fill_shadow_tree()
1286 block->ops->free_block(inode->i_sb, block); in fill_shadow_tree()
1308 if (block->inode && block->inode->i_ino == LOGFS_INO_MASTER) { in logfs_set_alias()
1326 static void set_iused(struct inode *inode, struct logfs_shadow *shadow) in set_iused() argument
1328 struct logfs_inode *li = logfs_inode(inode); in set_iused()
1333 alloc_inode_block(inode); in set_iused()
1335 __logfs_set_blocks(inode); in set_iused()
1336 logfs_set_alias(inode->i_sb, li->li_block, INODE_USED_OFS); in set_iused()
1337 logfs_set_alias(inode->i_sb, li->li_block, INODE_SIZE_OFS); in set_iused()
1340 static int logfs_write_i0(struct inode *inode, struct page *page, in logfs_write_i0() argument
1350 if (logfs_reserve_blocks(inode, 1)) in logfs_write_i0()
1353 shadow = alloc_shadow(inode, bix, level, wc->ofs); in logfs_write_i0()
1355 err = logfs_segment_write(inode, page, shadow); in logfs_write_i0()
1357 logfs_segment_delete(inode, shadow); in logfs_write_i0()
1359 free_shadow(inode, shadow); in logfs_write_i0()
1363 set_iused(inode, shadow); in logfs_write_i0()
1366 alloc_indirect_block(inode, page, 0); in logfs_write_i0()
1369 fill_shadow_tree(inode, page, shadow); in logfs_write_i0()
1376 static int logfs_write_direct(struct inode *inode, struct page *page, in logfs_write_direct() argument
1379 struct logfs_inode *li = logfs_inode(inode); in logfs_write_direct()
1386 alloc_inode_block(inode); in logfs_write_direct()
1388 err = logfs_write_i0(inode, page, &wc); in logfs_write_direct()
1393 logfs_set_alias(inode->i_sb, li->li_block, in logfs_write_direct()
1416 static int __logfs_write_rec(struct inode *inode, struct page *page, in __logfs_write_rec() argument
1427 ipage = logfs_get_write_page(inode, bix, level); in __logfs_write_rec()
1432 ret = logfs_segment_read(inode, ipage, this_wc->ofs, bix, level); in __logfs_write_rec()
1443 ret = __logfs_write_rec(inode, page, &child_wc, bix, in __logfs_write_rec()
1446 ret = logfs_write_i0(inode, page, &child_wc); in __logfs_write_rec()
1451 alloc_indirect_block(inode, ipage, page_empty); in __logfs_write_rec()
1459 ret = logfs_write_i0(inode, ipage, this_wc); in __logfs_write_rec()
1461 logfs_set_alias(inode->i_sb, logfs_block(ipage), child_no); in __logfs_write_rec()
1467 static int logfs_write_rec(struct inode *inode, struct page *page, in logfs_write_rec() argument
1470 struct logfs_inode *li = logfs_inode(inode); in logfs_write_rec()
1477 alloc_inode_block(inode); in logfs_write_rec()
1480 ret = __logfs_write_rec(inode, page, &wc, bix, target_level, in logfs_write_rec()
1483 ret = logfs_write_i0(inode, page, &wc); in logfs_write_rec()
1489 logfs_set_alias(inode->i_sb, li->li_block, in logfs_write_rec()
1495 void logfs_add_transaction(struct inode *inode, struct logfs_transaction *ta) in logfs_add_transaction() argument
1497 alloc_inode_block(inode); in logfs_add_transaction()
1498 logfs_inode(inode)->li_block->ta = ta; in logfs_add_transaction()
1501 void logfs_del_transaction(struct inode *inode, struct logfs_transaction *ta) in logfs_del_transaction() argument
1503 struct logfs_block *block = logfs_inode(inode)->li_block; in logfs_del_transaction()
1509 static int grow_inode(struct inode *inode, u64 bix, level_t level) in grow_inode() argument
1511 struct logfs_inode *li = logfs_inode(inode); in grow_inode()
1521 page = logfs_get_write_page(inode, I0_BLOCKS + 1, in grow_inode()
1526 alloc_indirect_block(inode, page, 1); in grow_inode()
1528 err = logfs_write_i0(inode, page, &wc); in grow_inode()
1535 logfs_set_alias(inode->i_sb, li->li_block, INODE_HEIGHT_OFS); in grow_inode()
1540 static int __logfs_write_buf(struct inode *inode, struct page *page, long flags) in __logfs_write_buf() argument
1542 struct logfs_super *super = logfs_super(inode->i_sb); in __logfs_write_buf()
1549 inode->i_ctime = inode->i_mtime = CURRENT_TIME; in __logfs_write_buf()
1556 return logfs_write_direct(inode, page, flags); in __logfs_write_buf()
1559 err = grow_inode(inode, bix, level); in __logfs_write_buf()
1562 return logfs_write_rec(inode, page, bix, level, flags); in __logfs_write_buf()
1565 int logfs_write_buf(struct inode *inode, struct page *page, long flags) in logfs_write_buf() argument
1567 struct super_block *sb = inode->i_sb; in logfs_write_buf()
1571 ret = __logfs_write_buf(inode, page, flags); in logfs_write_buf()
1576 static int __logfs_delete(struct inode *inode, struct page *page) in __logfs_delete() argument
1581 inode->i_ctime = inode->i_mtime = CURRENT_TIME; in __logfs_delete()
1584 return logfs_write_direct(inode, page, flags); in __logfs_delete()
1585 err = grow_inode(inode, page->index, 0); in __logfs_delete()
1588 return logfs_write_rec(inode, page, page->index, 0, flags); in __logfs_delete()
1591 int logfs_delete(struct inode *inode, pgoff_t index, in logfs_delete() argument
1594 struct super_block *sb = inode->i_sb; in logfs_delete()
1598 page = logfs_get_read_page(inode, index, 0); in logfs_delete()
1603 ret = __logfs_delete(inode, page); in logfs_delete()
1611 int logfs_rewrite_block(struct inode *inode, u64 bix, u64 ofs, in logfs_rewrite_block() argument
1618 page = logfs_get_write_page(inode, bix, level); in logfs_rewrite_block()
1622 err = logfs_segment_read(inode, page, ofs, bix, level); in logfs_rewrite_block()
1625 alloc_indirect_block(inode, page, 0); in logfs_rewrite_block()
1626 err = logfs_write_buf(inode, page, flags); in logfs_rewrite_block()
1633 if (inode->i_ino == LOGFS_INO_MASTER) in logfs_rewrite_block()
1634 logfs_write_anchor(inode->i_sb); in logfs_rewrite_block()
1636 err = __logfs_write_inode(inode, page, flags); in logfs_rewrite_block()
1644 static int truncate_data_block(struct inode *inode, struct page *page, in truncate_data_block() argument
1647 loff_t pageofs = page->index << inode->i_sb->s_blocksize_bits; in truncate_data_block()
1659 err = logfs_segment_read(inode, page, ofs, bix, level); in truncate_data_block()
1664 return logfs_segment_write(inode, page, shadow); in truncate_data_block()
1667 static int logfs_truncate_i0(struct inode *inode, struct page *page, in logfs_truncate_i0() argument
1677 shadow = alloc_shadow(inode, bix, level, wc->ofs); in logfs_truncate_i0()
1679 err = truncate_data_block(inode, page, wc->ofs, shadow, size); in logfs_truncate_i0()
1681 free_shadow(inode, shadow); in logfs_truncate_i0()
1685 logfs_segment_delete(inode, shadow); in logfs_truncate_i0()
1686 set_iused(inode, shadow); in logfs_truncate_i0()
1687 fill_shadow_tree(inode, page, shadow); in logfs_truncate_i0()
1692 static int logfs_truncate_direct(struct inode *inode, u64 size) in logfs_truncate_direct() argument
1694 struct logfs_inode *li = logfs_inode(inode); in logfs_truncate_direct()
1700 alloc_inode_block(inode); in logfs_truncate_direct()
1710 page = logfs_get_write_page(inode, e, 0); in logfs_truncate_direct()
1713 err = logfs_segment_read(inode, page, wc.ofs, e, 0); in logfs_truncate_direct()
1718 err = logfs_truncate_i0(inode, page, &wc, size); in logfs_truncate_direct()
1765 static int __logfs_truncate_rec(struct inode *inode, struct page *ipage, in __logfs_truncate_rec() argument
1776 err = logfs_segment_read(inode, ipage, this_wc->ofs, bix, level); in __logfs_truncate_rec()
1790 page = logfs_get_write_page(inode, child_bix, SUBLEVEL(level)); in __logfs_truncate_rec()
1795 err = __logfs_truncate_rec(inode, page, &child_wc, size); in __logfs_truncate_rec()
1797 err = logfs_truncate_i0(inode, page, &child_wc, size); in __logfs_truncate_rec()
1803 alloc_indirect_block(inode, ipage, 0); in __logfs_truncate_rec()
1808 printk("ineffectual truncate (%lx, %lx, %llx)\n", inode->i_ino, ipage->index, size); in __logfs_truncate_rec()
1816 return logfs_write_i0(inode, ipage, this_wc); in __logfs_truncate_rec()
1819 static int logfs_truncate_rec(struct inode *inode, u64 size) in logfs_truncate_rec() argument
1821 struct logfs_inode *li = logfs_inode(inode); in logfs_truncate_rec()
1828 alloc_inode_block(inode); in logfs_truncate_rec()
1833 page = logfs_get_write_page(inode, 0, LEVEL(li->li_height)); in logfs_truncate_rec()
1837 err = __logfs_truncate_rec(inode, page, &wc, size); in logfs_truncate_rec()
1847 static int __logfs_truncate(struct inode *inode, u64 size) in __logfs_truncate() argument
1851 if (size >= logfs_factor(logfs_inode(inode)->li_height)) in __logfs_truncate()
1854 ret = logfs_truncate_rec(inode, size); in __logfs_truncate()
1858 return logfs_truncate_direct(inode, size); in __logfs_truncate()
1868 int logfs_truncate(struct inode *inode, u64 target) in logfs_truncate() argument
1870 struct super_block *sb = inode->i_sb; in logfs_truncate()
1871 u64 size = i_size_read(inode); in logfs_truncate()
1884 err = __logfs_truncate(inode, size); in logfs_truncate()
1886 err = __logfs_write_inode(inode, NULL, 0); in logfs_truncate()
1891 err = inode_newsize_ok(inode, target); in logfs_truncate()
1895 truncate_setsize(inode, target); in logfs_truncate()
1904 static void move_page_to_inode(struct inode *inode, struct page *page) in move_page_to_inode() argument
1906 struct logfs_inode *li = logfs_inode(inode); in move_page_to_inode()
1916 block->inode = inode; in move_page_to_inode()
1927 static void move_inode_to_page(struct page *page, struct inode *inode) in move_inode_to_page() argument
1929 struct logfs_inode *li = logfs_inode(inode); in move_inode_to_page()
1947 block->inode = NULL; in move_inode_to_page()
1951 int logfs_read_inode(struct inode *inode) in logfs_read_inode() argument
1953 struct super_block *sb = inode->i_sb; in logfs_read_inode()
1955 struct inode *master_inode = super->s_master_inode; in logfs_read_inode()
1958 u64 ino = inode->i_ino; in logfs_read_inode()
1971 logfs_disk_to_inode(di, inode); in logfs_read_inode()
1973 move_page_to_inode(inode, page); in logfs_read_inode()
1979 static struct page *inode_to_page(struct inode *inode) in inode_to_page() argument
1981 struct inode *master_inode = logfs_super(inode->i_sb)->s_master_inode; in inode_to_page()
1985 BUG_ON(inode->i_ino == LOGFS_INO_MASTER); in inode_to_page()
1987 page = logfs_get_write_page(master_inode, inode->i_ino, 0); in inode_to_page()
1992 logfs_inode_to_disk(inode, di); in inode_to_page()
1994 move_inode_to_page(page, inode); in inode_to_page()
1998 static int do_write_inode(struct inode *inode) in do_write_inode() argument
2000 struct super_block *sb = inode->i_sb; in do_write_inode()
2001 struct inode *master_inode = logfs_super(sb)->s_master_inode; in do_write_inode()
2002 loff_t size = (inode->i_ino + 1) << inode->i_sb->s_blocksize_bits; in do_write_inode()
2006 BUG_ON(inode->i_ino == LOGFS_INO_MASTER); in do_write_inode()
2014 page = inode_to_page(inode); in do_write_inode()
2021 move_page_to_inode(inode, page); in do_write_inode()
2033 struct inode *inode; in logfs_mod_segment_entry() local
2042 inode = super->s_segfile_inode; in logfs_mod_segment_entry()
2043 page = logfs_get_write_page(inode, page_no, 0); in logfs_mod_segment_entry()
2046 logfs_read_block(inode, page, WRITE); in logfs_mod_segment_entry()
2049 alloc_indirect_block(inode, page, 0); in logfs_mod_segment_entry()
2132 int __logfs_write_inode(struct inode *inode, struct page *page, long flags) in __logfs_write_inode() argument
2134 struct super_block *sb = inode->i_sb; in __logfs_write_inode()
2138 ret = do_write_inode(inode); in __logfs_write_inode()
2143 static int do_delete_inode(struct inode *inode) in do_delete_inode() argument
2145 struct super_block *sb = inode->i_sb; in do_delete_inode()
2146 struct inode *master_inode = logfs_super(sb)->s_master_inode; in do_delete_inode()
2150 page = logfs_get_write_page(master_inode, inode->i_ino, 0); in do_delete_inode()
2154 move_inode_to_page(page, inode); in do_delete_inode()
2168 void logfs_evict_inode(struct inode *inode) in logfs_evict_inode() argument
2170 struct super_block *sb = inode->i_sb; in logfs_evict_inode()
2171 struct logfs_inode *li = logfs_inode(inode); in logfs_evict_inode()
2175 if (!inode->i_nlink) { in logfs_evict_inode()
2178 if (i_size_read(inode) > 0) in logfs_evict_inode()
2179 logfs_truncate(inode, 0); in logfs_evict_inode()
2180 do_delete_inode(inode); in logfs_evict_inode()
2183 truncate_inode_pages_final(&inode->i_data); in logfs_evict_inode()
2184 clear_inode(inode); in logfs_evict_inode()
2190 BUG_ON(inode->i_state & I_DIRTY && inode->i_nlink); in logfs_evict_inode()
2194 block->ops->free_block(inode->i_sb, block); in logfs_evict_inode()
2198 page = inode_to_page(inode); in logfs_evict_inode()
2205 struct inode *inode; in btree_write_block() local
2209 inode = logfs_safe_iget(block->sb, block->ino, &cookie); in btree_write_block()
2210 page = logfs_get_write_page(inode, block->bix, block->level); in btree_write_block()
2216 err = __logfs_write_buf(inode, page, 0); in btree_write_block()
2221 logfs_safe_iput(inode, cookie); in btree_write_block()
2238 int logfs_inode_write(struct inode *inode, const void *buf, size_t count, in logfs_inode_write() argument
2241 loff_t pos = bix << inode->i_sb->s_blocksize_bits; in logfs_inode_write()
2248 page = logfs_get_write_page(inode, bix, 0); in logfs_inode_write()
2257 if (i_size_read(inode) < pos + LOGFS_BLOCKSIZE) in logfs_inode_write()
2258 i_size_write(inode, pos + LOGFS_BLOCKSIZE); in logfs_inode_write()
2260 err = logfs_write_buf(inode, page, flags); in logfs_inode_write()
2268 struct inode *inode; in logfs_open_segfile() local
2270 inode = logfs_read_meta_inode(sb, LOGFS_INO_SEGFILE); in logfs_open_segfile()
2271 if (IS_ERR(inode)) in logfs_open_segfile()
2272 return PTR_ERR(inode); in logfs_open_segfile()
2273 super->s_segfile_inode = inode; in logfs_open_segfile()