Lines Matching refs:inode

20 static struct inode *hfsplus_alloc_inode(struct super_block *sb);
21 static void hfsplus_destroy_inode(struct inode *inode);
26 static int hfsplus_system_read_inode(struct inode *inode) in hfsplus_system_read_inode() argument
28 struct hfsplus_vh *vhdr = HFSPLUS_SB(inode->i_sb)->s_vhdr; in hfsplus_system_read_inode()
30 switch (inode->i_ino) { in hfsplus_system_read_inode()
32 hfsplus_inode_read_fork(inode, &vhdr->ext_file); in hfsplus_system_read_inode()
33 inode->i_mapping->a_ops = &hfsplus_btree_aops; in hfsplus_system_read_inode()
36 hfsplus_inode_read_fork(inode, &vhdr->cat_file); in hfsplus_system_read_inode()
37 inode->i_mapping->a_ops = &hfsplus_btree_aops; in hfsplus_system_read_inode()
40 hfsplus_inode_read_fork(inode, &vhdr->alloc_file); in hfsplus_system_read_inode()
41 inode->i_mapping->a_ops = &hfsplus_aops; in hfsplus_system_read_inode()
44 hfsplus_inode_read_fork(inode, &vhdr->start_file); in hfsplus_system_read_inode()
47 hfsplus_inode_read_fork(inode, &vhdr->attr_file); in hfsplus_system_read_inode()
48 inode->i_mapping->a_ops = &hfsplus_btree_aops; in hfsplus_system_read_inode()
57 struct inode *hfsplus_iget(struct super_block *sb, unsigned long ino) in hfsplus_iget()
60 struct inode *inode; in hfsplus_iget() local
63 inode = iget_locked(sb, ino); in hfsplus_iget()
64 if (!inode) in hfsplus_iget()
66 if (!(inode->i_state & I_NEW)) in hfsplus_iget()
67 return inode; in hfsplus_iget()
69 INIT_LIST_HEAD(&HFSPLUS_I(inode)->open_dir_list); in hfsplus_iget()
70 mutex_init(&HFSPLUS_I(inode)->extents_lock); in hfsplus_iget()
71 HFSPLUS_I(inode)->flags = 0; in hfsplus_iget()
72 HFSPLUS_I(inode)->extent_state = 0; in hfsplus_iget()
73 HFSPLUS_I(inode)->rsrc_inode = NULL; in hfsplus_iget()
74 atomic_set(&HFSPLUS_I(inode)->opencnt, 0); in hfsplus_iget()
76 if (inode->i_ino >= HFSPLUS_FIRSTUSER_CNID || in hfsplus_iget()
77 inode->i_ino == HFSPLUS_ROOT_CNID) { in hfsplus_iget()
78 err = hfs_find_init(HFSPLUS_SB(inode->i_sb)->cat_tree, &fd); in hfsplus_iget()
80 err = hfsplus_find_cat(inode->i_sb, inode->i_ino, &fd); in hfsplus_iget()
82 err = hfsplus_cat_read_inode(inode, &fd); in hfsplus_iget()
86 err = hfsplus_system_read_inode(inode); in hfsplus_iget()
90 iget_failed(inode); in hfsplus_iget()
94 unlock_new_inode(inode); in hfsplus_iget()
95 return inode; in hfsplus_iget()
98 static int hfsplus_system_write_inode(struct inode *inode) in hfsplus_system_write_inode() argument
100 struct hfsplus_sb_info *sbi = HFSPLUS_SB(inode->i_sb); in hfsplus_system_write_inode()
105 switch (inode->i_ino) { in hfsplus_system_write_inode()
128 if (fork->total_size != cpu_to_be64(inode->i_size)) { in hfsplus_system_write_inode()
130 hfsplus_mark_mdb_dirty(inode->i_sb); in hfsplus_system_write_inode()
132 hfsplus_inode_write_fork(inode, fork); in hfsplus_system_write_inode()
138 err, inode->i_ino); in hfsplus_system_write_inode()
145 static int hfsplus_write_inode(struct inode *inode, in hfsplus_write_inode() argument
150 hfs_dbg(INODE, "hfsplus_write_inode: %lu\n", inode->i_ino); in hfsplus_write_inode()
152 err = hfsplus_ext_write_extent(inode); in hfsplus_write_inode()
156 if (inode->i_ino >= HFSPLUS_FIRSTUSER_CNID || in hfsplus_write_inode()
157 inode->i_ino == HFSPLUS_ROOT_CNID) in hfsplus_write_inode()
158 return hfsplus_cat_write_inode(inode); in hfsplus_write_inode()
160 return hfsplus_system_write_inode(inode); in hfsplus_write_inode()
163 static void hfsplus_evict_inode(struct inode *inode) in hfsplus_evict_inode() argument
165 hfs_dbg(INODE, "hfsplus_evict_inode: %lu\n", inode->i_ino); in hfsplus_evict_inode()
166 truncate_inode_pages_final(&inode->i_data); in hfsplus_evict_inode()
167 clear_inode(inode); in hfsplus_evict_inode()
168 if (HFSPLUS_IS_RSRC(inode)) { in hfsplus_evict_inode()
169 HFSPLUS_I(HFSPLUS_I(inode)->rsrc_inode)->rsrc_inode = NULL; in hfsplus_evict_inode()
170 iput(HFSPLUS_I(inode)->rsrc_inode); in hfsplus_evict_inode()
194 error = filemap_write_and_wait(sbi->cat_tree->inode->i_mapping); in hfsplus_sync_fs()
195 error2 = filemap_write_and_wait(sbi->ext_tree->inode->i_mapping); in hfsplus_sync_fs()
200 filemap_write_and_wait(sbi->attr_tree->inode->i_mapping); in hfsplus_sync_fs()
377 struct inode *root, *inode; in hfsplus_fill_super() local
491 inode = hfsplus_iget(sb, HFSPLUS_ALLOC_CNID); in hfsplus_fill_super()
492 if (IS_ERR(inode)) { in hfsplus_fill_super()
494 err = PTR_ERR(inode); in hfsplus_fill_super()
497 sbi->alloc_file = inode; in hfsplus_fill_super()
526 inode = hfsplus_iget(sb, be32_to_cpu(entry.folder.id)); in hfsplus_fill_super()
527 if (IS_ERR(inode)) { in hfsplus_fill_super()
528 err = PTR_ERR(inode); in hfsplus_fill_super()
531 sbi->hidden_dir = inode; in hfsplus_fill_super()
617 static struct inode *hfsplus_alloc_inode(struct super_block *sb) in hfsplus_alloc_inode()
627 struct inode *inode = container_of(head, struct inode, i_rcu); in hfsplus_i_callback() local
629 kmem_cache_free(hfsplus_inode_cachep, HFSPLUS_I(inode)); in hfsplus_i_callback()
632 static void hfsplus_destroy_inode(struct inode *inode) in hfsplus_destroy_inode() argument
634 call_rcu(&inode->i_rcu, hfsplus_i_callback); in hfsplus_destroy_inode()