Lines Matching refs:inode

19 static struct inode *hfsplus_alloc_inode(struct super_block *sb);
20 static void hfsplus_destroy_inode(struct inode *inode);
25 static int hfsplus_system_read_inode(struct inode *inode) in hfsplus_system_read_inode() argument
27 struct hfsplus_vh *vhdr = HFSPLUS_SB(inode->i_sb)->s_vhdr; in hfsplus_system_read_inode()
29 switch (inode->i_ino) { in hfsplus_system_read_inode()
31 hfsplus_inode_read_fork(inode, &vhdr->ext_file); in hfsplus_system_read_inode()
32 inode->i_mapping->a_ops = &hfsplus_btree_aops; in hfsplus_system_read_inode()
35 hfsplus_inode_read_fork(inode, &vhdr->cat_file); in hfsplus_system_read_inode()
36 inode->i_mapping->a_ops = &hfsplus_btree_aops; in hfsplus_system_read_inode()
39 hfsplus_inode_read_fork(inode, &vhdr->alloc_file); in hfsplus_system_read_inode()
40 inode->i_mapping->a_ops = &hfsplus_aops; in hfsplus_system_read_inode()
43 hfsplus_inode_read_fork(inode, &vhdr->start_file); in hfsplus_system_read_inode()
46 hfsplus_inode_read_fork(inode, &vhdr->attr_file); in hfsplus_system_read_inode()
47 inode->i_mapping->a_ops = &hfsplus_btree_aops; in hfsplus_system_read_inode()
56 struct inode *hfsplus_iget(struct super_block *sb, unsigned long ino) in hfsplus_iget()
59 struct inode *inode; in hfsplus_iget() local
62 inode = iget_locked(sb, ino); in hfsplus_iget()
63 if (!inode) in hfsplus_iget()
65 if (!(inode->i_state & I_NEW)) in hfsplus_iget()
66 return inode; in hfsplus_iget()
68 INIT_LIST_HEAD(&HFSPLUS_I(inode)->open_dir_list); in hfsplus_iget()
69 mutex_init(&HFSPLUS_I(inode)->extents_lock); in hfsplus_iget()
70 HFSPLUS_I(inode)->flags = 0; in hfsplus_iget()
71 HFSPLUS_I(inode)->extent_state = 0; in hfsplus_iget()
72 HFSPLUS_I(inode)->rsrc_inode = NULL; in hfsplus_iget()
73 atomic_set(&HFSPLUS_I(inode)->opencnt, 0); in hfsplus_iget()
75 if (inode->i_ino >= HFSPLUS_FIRSTUSER_CNID || in hfsplus_iget()
76 inode->i_ino == HFSPLUS_ROOT_CNID) { in hfsplus_iget()
77 err = hfs_find_init(HFSPLUS_SB(inode->i_sb)->cat_tree, &fd); in hfsplus_iget()
79 err = hfsplus_find_cat(inode->i_sb, inode->i_ino, &fd); in hfsplus_iget()
81 err = hfsplus_cat_read_inode(inode, &fd); in hfsplus_iget()
85 err = hfsplus_system_read_inode(inode); in hfsplus_iget()
89 iget_failed(inode); in hfsplus_iget()
93 unlock_new_inode(inode); in hfsplus_iget()
94 return inode; in hfsplus_iget()
97 static int hfsplus_system_write_inode(struct inode *inode) in hfsplus_system_write_inode() argument
99 struct hfsplus_sb_info *sbi = HFSPLUS_SB(inode->i_sb); in hfsplus_system_write_inode()
104 switch (inode->i_ino) { in hfsplus_system_write_inode()
127 if (fork->total_size != cpu_to_be64(inode->i_size)) { in hfsplus_system_write_inode()
129 hfsplus_mark_mdb_dirty(inode->i_sb); in hfsplus_system_write_inode()
131 hfsplus_inode_write_fork(inode, fork); in hfsplus_system_write_inode()
137 err, inode->i_ino); in hfsplus_system_write_inode()
144 static int hfsplus_write_inode(struct inode *inode, in hfsplus_write_inode() argument
149 hfs_dbg(INODE, "hfsplus_write_inode: %lu\n", inode->i_ino); in hfsplus_write_inode()
151 err = hfsplus_ext_write_extent(inode); in hfsplus_write_inode()
155 if (inode->i_ino >= HFSPLUS_FIRSTUSER_CNID || in hfsplus_write_inode()
156 inode->i_ino == HFSPLUS_ROOT_CNID) in hfsplus_write_inode()
157 return hfsplus_cat_write_inode(inode); in hfsplus_write_inode()
159 return hfsplus_system_write_inode(inode); in hfsplus_write_inode()
162 static void hfsplus_evict_inode(struct inode *inode) in hfsplus_evict_inode() argument
164 hfs_dbg(INODE, "hfsplus_evict_inode: %lu\n", inode->i_ino); in hfsplus_evict_inode()
165 truncate_inode_pages_final(&inode->i_data); in hfsplus_evict_inode()
166 clear_inode(inode); in hfsplus_evict_inode()
167 if (HFSPLUS_IS_RSRC(inode)) { in hfsplus_evict_inode()
168 HFSPLUS_I(HFSPLUS_I(inode)->rsrc_inode)->rsrc_inode = NULL; in hfsplus_evict_inode()
169 iput(HFSPLUS_I(inode)->rsrc_inode); in hfsplus_evict_inode()
193 error = filemap_write_and_wait(sbi->cat_tree->inode->i_mapping); in hfsplus_sync_fs()
194 error2 = filemap_write_and_wait(sbi->ext_tree->inode->i_mapping); in hfsplus_sync_fs()
199 filemap_write_and_wait(sbi->attr_tree->inode->i_mapping); in hfsplus_sync_fs()
376 struct inode *root, *inode; in hfsplus_fill_super() local
490 inode = hfsplus_iget(sb, HFSPLUS_ALLOC_CNID); in hfsplus_fill_super()
491 if (IS_ERR(inode)) { in hfsplus_fill_super()
493 err = PTR_ERR(inode); in hfsplus_fill_super()
496 sbi->alloc_file = inode; in hfsplus_fill_super()
525 inode = hfsplus_iget(sb, be32_to_cpu(entry.folder.id)); in hfsplus_fill_super()
526 if (IS_ERR(inode)) { in hfsplus_fill_super()
527 err = PTR_ERR(inode); in hfsplus_fill_super()
530 sbi->hidden_dir = inode; in hfsplus_fill_super()
616 static struct inode *hfsplus_alloc_inode(struct super_block *sb) in hfsplus_alloc_inode()
626 struct inode *inode = container_of(head, struct inode, i_rcu); in hfsplus_i_callback() local
628 kmem_cache_free(hfsplus_inode_cachep, HFSPLUS_I(inode)); in hfsplus_i_callback()
631 static void hfsplus_destroy_inode(struct inode *inode) in hfsplus_destroy_inode() argument
633 call_rcu(&inode->i_rcu, hfsplus_i_callback); in hfsplus_destroy_inode()