Lines Matching refs:inode

21 static struct inode *hfsplus_alloc_inode(struct super_block *sb);
22 static void hfsplus_free_inode(struct inode *inode);
27 static int hfsplus_system_read_inode(struct inode *inode) in hfsplus_system_read_inode() argument
29 struct hfsplus_vh *vhdr = HFSPLUS_SB(inode->i_sb)->s_vhdr; in hfsplus_system_read_inode()
31 switch (inode->i_ino) { in hfsplus_system_read_inode()
33 hfsplus_inode_read_fork(inode, &vhdr->ext_file); in hfsplus_system_read_inode()
34 inode->i_mapping->a_ops = &hfsplus_btree_aops; in hfsplus_system_read_inode()
37 hfsplus_inode_read_fork(inode, &vhdr->cat_file); in hfsplus_system_read_inode()
38 inode->i_mapping->a_ops = &hfsplus_btree_aops; in hfsplus_system_read_inode()
41 hfsplus_inode_read_fork(inode, &vhdr->alloc_file); in hfsplus_system_read_inode()
42 inode->i_mapping->a_ops = &hfsplus_aops; in hfsplus_system_read_inode()
45 hfsplus_inode_read_fork(inode, &vhdr->start_file); in hfsplus_system_read_inode()
48 hfsplus_inode_read_fork(inode, &vhdr->attr_file); in hfsplus_system_read_inode()
49 inode->i_mapping->a_ops = &hfsplus_btree_aops; in hfsplus_system_read_inode()
58 struct inode *hfsplus_iget(struct super_block *sb, unsigned long ino) in hfsplus_iget()
61 struct inode *inode; in hfsplus_iget() local
64 inode = iget_locked(sb, ino); in hfsplus_iget()
65 if (!inode) in hfsplus_iget()
67 if (!(inode->i_state & I_NEW)) in hfsplus_iget()
68 return inode; in hfsplus_iget()
70 INIT_LIST_HEAD(&HFSPLUS_I(inode)->open_dir_list); in hfsplus_iget()
71 spin_lock_init(&HFSPLUS_I(inode)->open_dir_lock); in hfsplus_iget()
72 mutex_init(&HFSPLUS_I(inode)->extents_lock); in hfsplus_iget()
73 HFSPLUS_I(inode)->flags = 0; in hfsplus_iget()
74 HFSPLUS_I(inode)->extent_state = 0; in hfsplus_iget()
75 HFSPLUS_I(inode)->rsrc_inode = NULL; in hfsplus_iget()
76 atomic_set(&HFSPLUS_I(inode)->opencnt, 0); in hfsplus_iget()
78 if (inode->i_ino >= HFSPLUS_FIRSTUSER_CNID || in hfsplus_iget()
79 inode->i_ino == HFSPLUS_ROOT_CNID) { in hfsplus_iget()
80 err = hfs_find_init(HFSPLUS_SB(inode->i_sb)->cat_tree, &fd); in hfsplus_iget()
82 err = hfsplus_find_cat(inode->i_sb, inode->i_ino, &fd); in hfsplus_iget()
84 err = hfsplus_cat_read_inode(inode, &fd); in hfsplus_iget()
88 err = hfsplus_system_read_inode(inode); in hfsplus_iget()
92 iget_failed(inode); in hfsplus_iget()
96 unlock_new_inode(inode); in hfsplus_iget()
97 return inode; in hfsplus_iget()
100 static int hfsplus_system_write_inode(struct inode *inode) in hfsplus_system_write_inode() argument
102 struct hfsplus_sb_info *sbi = HFSPLUS_SB(inode->i_sb); in hfsplus_system_write_inode()
107 switch (inode->i_ino) { in hfsplus_system_write_inode()
130 if (fork->total_size != cpu_to_be64(inode->i_size)) { in hfsplus_system_write_inode()
132 hfsplus_mark_mdb_dirty(inode->i_sb); in hfsplus_system_write_inode()
134 hfsplus_inode_write_fork(inode, fork); in hfsplus_system_write_inode()
140 err, inode->i_ino); in hfsplus_system_write_inode()
147 static int hfsplus_write_inode(struct inode *inode, in hfsplus_write_inode() argument
152 hfs_dbg(INODE, "hfsplus_write_inode: %lu\n", inode->i_ino); in hfsplus_write_inode()
154 err = hfsplus_ext_write_extent(inode); in hfsplus_write_inode()
158 if (inode->i_ino >= HFSPLUS_FIRSTUSER_CNID || in hfsplus_write_inode()
159 inode->i_ino == HFSPLUS_ROOT_CNID) in hfsplus_write_inode()
160 return hfsplus_cat_write_inode(inode); in hfsplus_write_inode()
162 return hfsplus_system_write_inode(inode); in hfsplus_write_inode()
165 static void hfsplus_evict_inode(struct inode *inode) in hfsplus_evict_inode() argument
167 hfs_dbg(INODE, "hfsplus_evict_inode: %lu\n", inode->i_ino); in hfsplus_evict_inode()
168 truncate_inode_pages_final(&inode->i_data); in hfsplus_evict_inode()
169 clear_inode(inode); in hfsplus_evict_inode()
170 if (HFSPLUS_IS_RSRC(inode)) { in hfsplus_evict_inode()
171 HFSPLUS_I(HFSPLUS_I(inode)->rsrc_inode)->rsrc_inode = NULL; in hfsplus_evict_inode()
172 iput(HFSPLUS_I(inode)->rsrc_inode); in hfsplus_evict_inode()
196 error = filemap_write_and_wait(sbi->cat_tree->inode->i_mapping); in hfsplus_sync_fs()
197 error2 = filemap_write_and_wait(sbi->ext_tree->inode->i_mapping); in hfsplus_sync_fs()
202 filemap_write_and_wait(sbi->attr_tree->inode->i_mapping); in hfsplus_sync_fs()
380 struct inode *root, *inode; in hfsplus_fill_super() local
494 inode = hfsplus_iget(sb, HFSPLUS_ALLOC_CNID); in hfsplus_fill_super()
495 if (IS_ERR(inode)) { in hfsplus_fill_super()
497 err = PTR_ERR(inode); in hfsplus_fill_super()
500 sbi->alloc_file = inode; in hfsplus_fill_super()
531 inode = hfsplus_iget(sb, be32_to_cpu(entry.folder.id)); in hfsplus_fill_super()
532 if (IS_ERR(inode)) { in hfsplus_fill_super()
533 err = PTR_ERR(inode); in hfsplus_fill_super()
536 sbi->hidden_dir = inode; in hfsplus_fill_super()
623 static struct inode *hfsplus_alloc_inode(struct super_block *sb) in hfsplus_alloc_inode()
631 static void hfsplus_free_inode(struct inode *inode) in hfsplus_free_inode() argument
633 kmem_cache_free(hfsplus_inode_cachep, HFSPLUS_I(inode)); in hfsplus_free_inode()