Lines Matching +full:- +full:i

4  *  Mikulas Patocka (mikulas@artax.karlin.mff.cuni.cz), 1998-1999
12 void hpfs_init_inode(struct inode *i) in hpfs_init_inode() argument
14 struct super_block *sb = i->i_sb; in hpfs_init_inode()
15 struct hpfs_inode_info *hpfs_inode = hpfs_i(i); in hpfs_init_inode()
17 i->i_uid = hpfs_sb(sb)->sb_uid; in hpfs_init_inode()
18 i->i_gid = hpfs_sb(sb)->sb_gid; in hpfs_init_inode()
19 i->i_mode = hpfs_sb(sb)->sb_mode; in hpfs_init_inode()
20 i->i_size = -1; in hpfs_init_inode()
21 i->i_blocks = -1; in hpfs_init_inode()
23 hpfs_inode->i_dno = 0; in hpfs_init_inode()
24 hpfs_inode->i_n_secs = 0; in hpfs_init_inode()
25 hpfs_inode->i_file_sec = 0; in hpfs_init_inode()
26 hpfs_inode->i_disk_sec = 0; in hpfs_init_inode()
27 hpfs_inode->i_dpos = 0; in hpfs_init_inode()
28 hpfs_inode->i_dsubdno = 0; in hpfs_init_inode()
29 hpfs_inode->i_ea_mode = 0; in hpfs_init_inode()
30 hpfs_inode->i_ea_uid = 0; in hpfs_init_inode()
31 hpfs_inode->i_ea_gid = 0; in hpfs_init_inode()
32 hpfs_inode->i_ea_size = 0; in hpfs_init_inode()
34 hpfs_inode->i_rddir_off = NULL; in hpfs_init_inode()
35 hpfs_inode->i_dirty = 0; in hpfs_init_inode()
37 i->i_ctime.tv_sec = i->i_ctime.tv_nsec = 0; in hpfs_init_inode()
38 i->i_mtime.tv_sec = i->i_mtime.tv_nsec = 0; in hpfs_init_inode()
39 i->i_atime.tv_sec = i->i_atime.tv_nsec = 0; in hpfs_init_inode()
42 void hpfs_read_inode(struct inode *i) in hpfs_read_inode() argument
46 struct super_block *sb = i->i_sb; in hpfs_read_inode()
47 struct hpfs_inode_info *hpfs_inode = hpfs_i(i); in hpfs_read_inode()
51 if (!(fnode = hpfs_map_fnode(sb, i->i_ino, &bh))) { in hpfs_read_inode()
52 /*i->i_mode |= S_IFREG; in hpfs_read_inode()
53 i->i_mode &= ~0111; in hpfs_read_inode()
54 i->i_op = &hpfs_file_iops; in hpfs_read_inode()
55 i->i_fop = &hpfs_file_ops; in hpfs_read_inode()
56 clear_nlink(i);*/ in hpfs_read_inode()
57 make_bad_inode(i); in hpfs_read_inode()
60 if (hpfs_sb(i->i_sb)->sb_eas) { in hpfs_read_inode()
61 if ((ea = hpfs_get_ea(i->i_sb, fnode, "UID", &ea_size))) { in hpfs_read_inode()
63 i->i_uid = le16_to_cpu(*(__le16*)ea); in hpfs_read_inode()
64 hpfs_inode->i_ea_uid = 1; in hpfs_read_inode()
68 if ((ea = hpfs_get_ea(i->i_sb, fnode, "GID", &ea_size))) { in hpfs_read_inode()
70 i->i_gid = le16_to_cpu(*(__le16*)ea); in hpfs_read_inode()
71 hpfs_inode->i_ea_gid = 1; in hpfs_read_inode()
75 if ((ea = hpfs_get_ea(i->i_sb, fnode, "SYMLINK", &ea_size))) { in hpfs_read_inode()
77 i->i_mode = S_IFLNK | 0777; in hpfs_read_inode()
78 i->i_op = &page_symlink_inode_operations; in hpfs_read_inode()
79 i->i_data.a_ops = &hpfs_symlink_aops; in hpfs_read_inode()
80 set_nlink(i, 1); in hpfs_read_inode()
81 i->i_size = ea_size; in hpfs_read_inode()
82 i->i_blocks = 1; in hpfs_read_inode()
86 if ((ea = hpfs_get_ea(i->i_sb, fnode, "MODE", &ea_size))) { in hpfs_read_inode()
88 umode_t mode = hpfs_sb(sb)->sb_mode; in hpfs_read_inode()
91 hpfs_inode->i_ea_mode = 1; in hpfs_read_inode()
94 i->i_mode = mode; in hpfs_read_inode()
96 if ((ea = hpfs_get_ea(i->i_sb, fnode, "DEV", &ea_size))) { in hpfs_read_inode()
104 set_nlink(i, 1); in hpfs_read_inode()
105 i->i_size = 0; in hpfs_read_inode()
106 i->i_blocks = 1; in hpfs_read_inode()
107 init_special_inode(i, mode, in hpfs_read_inode()
113 if (fnode->dirflag) { in hpfs_read_inode()
115 i->i_mode |= S_IFDIR; in hpfs_read_inode()
116 i->i_op = &hpfs_dir_iops; in hpfs_read_inode()
117 i->i_fop = &hpfs_dir_ops; in hpfs_read_inode()
118 hpfs_inode->i_parent_dir = le32_to_cpu(fnode->up); in hpfs_read_inode()
119 hpfs_inode->i_dno = le32_to_cpu(fnode->u.external[0].disk_secno); in hpfs_read_inode()
120 if (hpfs_sb(sb)->sb_chk >= 2) { in hpfs_read_inode()
122 if (hpfs_map_fnode(sb, hpfs_inode->i_parent_dir, &bh0)) brelse(bh0); in hpfs_read_inode()
125 hpfs_count_dnodes(i->i_sb, hpfs_inode->i_dno, &n_dnodes, &n_subdirs, NULL); in hpfs_read_inode()
126 i->i_blocks = 4 * n_dnodes; in hpfs_read_inode()
127 i->i_size = 2048 * n_dnodes; in hpfs_read_inode()
128 set_nlink(i, 2 + n_subdirs); in hpfs_read_inode()
130 i->i_mode |= S_IFREG; in hpfs_read_inode()
131 if (!hpfs_inode->i_ea_mode) i->i_mode &= ~0111; in hpfs_read_inode()
132 i->i_op = &hpfs_file_iops; in hpfs_read_inode()
133 i->i_fop = &hpfs_file_ops; in hpfs_read_inode()
134 set_nlink(i, 1); in hpfs_read_inode()
135 i->i_size = le32_to_cpu(fnode->file_size); in hpfs_read_inode()
136 i->i_blocks = ((i->i_size + 511) >> 9) + 1; in hpfs_read_inode()
137 i->i_data.a_ops = &hpfs_aops; in hpfs_read_inode()
138 hpfs_i(i)->mmu_private = i->i_size; in hpfs_read_inode()
143 static void hpfs_write_inode_ea(struct inode *i, struct fnode *fnode) in hpfs_write_inode_ea() argument
145 struct hpfs_inode_info *hpfs_inode = hpfs_i(i); in hpfs_write_inode_ea()
146 /*if (le32_to_cpu(fnode->acl_size_l) || le16_to_cpu(fnode->acl_size_s)) { in hpfs_write_inode_ea()
149 hpfs_error(i->i_sb, "fnode %08x has some unknown HPFS386 stuctures", i->i_ino); in hpfs_write_inode_ea()
150 } else*/ if (hpfs_sb(i->i_sb)->sb_eas >= 2) { in hpfs_write_inode_ea()
152 if ((i->i_uid != hpfs_sb(i->i_sb)->sb_uid) || hpfs_inode->i_ea_uid) { in hpfs_write_inode_ea()
153 ea = cpu_to_le32(i->i_uid); in hpfs_write_inode_ea()
154 hpfs_set_ea(i, fnode, "UID", (char*)&ea, 2); in hpfs_write_inode_ea()
155 hpfs_inode->i_ea_uid = 1; in hpfs_write_inode_ea()
157 if ((i->i_gid != hpfs_sb(i->i_sb)->sb_gid) || hpfs_inode->i_ea_gid) { in hpfs_write_inode_ea()
158 ea = cpu_to_le32(i->i_gid); in hpfs_write_inode_ea()
159 hpfs_set_ea(i, fnode, "GID", (char *)&ea, 2); in hpfs_write_inode_ea()
160 hpfs_inode->i_ea_gid = 1; in hpfs_write_inode_ea()
162 if (!S_ISLNK(i->i_mode)) in hpfs_write_inode_ea()
163 if ((i->i_mode != ((hpfs_sb(i->i_sb)->sb_mode & ~(S_ISDIR(i->i_mode) ? 0 : 0111)) in hpfs_write_inode_ea()
164 | (S_ISDIR(i->i_mode) ? S_IFDIR : S_IFREG)) in hpfs_write_inode_ea()
165 && i->i_mode != ((hpfs_sb(i->i_sb)->sb_mode & ~(S_ISDIR(i->i_mode) ? 0222 : 0333)) in hpfs_write_inode_ea()
166 | (S_ISDIR(i->i_mode) ? S_IFDIR : S_IFREG))) || hpfs_inode->i_ea_mode) { in hpfs_write_inode_ea()
167 ea = cpu_to_le32(i->i_mode); in hpfs_write_inode_ea()
169 hpfs_set_ea(i, fnode, "MODE", (char *)&ea, 2); in hpfs_write_inode_ea()
170 hpfs_inode->i_ea_mode = 1; in hpfs_write_inode_ea()
172 if (S_ISBLK(i->i_mode) || S_ISCHR(i->i_mode)) { in hpfs_write_inode_ea()
173 ea = cpu_to_le32(new_encode_dev(i->i_rdev)); in hpfs_write_inode_ea()
174 hpfs_set_ea(i, fnode, "DEV", (char *)&ea, 4); in hpfs_write_inode_ea()
179 void hpfs_write_inode(struct inode *i) in hpfs_write_inode() argument
181 struct hpfs_inode_info *hpfs_inode = hpfs_i(i); in hpfs_write_inode()
183 if (i->i_ino == hpfs_sb(i->i_sb)->sb_root) return; in hpfs_write_inode()
184 if (hpfs_inode->i_rddir_off && !atomic_read(&i->i_count)) { in hpfs_write_inode()
185 if (*hpfs_inode->i_rddir_off) printk("HPFS: write_inode: some position still there\n"); in hpfs_write_inode()
186 kfree(hpfs_inode->i_rddir_off); in hpfs_write_inode()
187 hpfs_inode->i_rddir_off = NULL; in hpfs_write_inode()
189 if (!i->i_nlink) { in hpfs_write_inode()
192 parent = iget_locked(i->i_sb, hpfs_inode->i_parent_dir); in hpfs_write_inode()
194 hpfs_inode->i_dirty = 0; in hpfs_write_inode()
195 if (parent->i_state & I_NEW) { in hpfs_write_inode()
200 hpfs_write_inode_nolock(i); in hpfs_write_inode()
205 void hpfs_write_inode_nolock(struct inode *i) in hpfs_write_inode_nolock() argument
207 struct hpfs_inode_info *hpfs_inode = hpfs_i(i); in hpfs_write_inode_nolock()
212 if (i->i_ino == hpfs_sb(i->i_sb)->sb_root) return; in hpfs_write_inode_nolock()
213 if (!(fnode = hpfs_map_fnode(i->i_sb, i->i_ino, &bh))) return; in hpfs_write_inode_nolock()
214 if (i->i_ino != hpfs_sb(i->i_sb)->sb_root && i->i_nlink) { in hpfs_write_inode_nolock()
215 if (!(de = map_fnode_dirent(i->i_sb, i->i_ino, fnode, &qbh))) { in hpfs_write_inode_nolock()
220 if (S_ISREG(i->i_mode)) { in hpfs_write_inode_nolock()
221 fnode->file_size = cpu_to_le32(i->i_size); in hpfs_write_inode_nolock()
222 if (de) de->file_size = cpu_to_le32(i->i_size); in hpfs_write_inode_nolock()
223 } else if (S_ISDIR(i->i_mode)) { in hpfs_write_inode_nolock()
224 fnode->file_size = cpu_to_le32(0); in hpfs_write_inode_nolock()
225 if (de) de->file_size = cpu_to_le32(0); in hpfs_write_inode_nolock()
227 hpfs_write_inode_ea(i, fnode); in hpfs_write_inode_nolock()
229 de->write_date = cpu_to_le32(gmt_to_local(i->i_sb, i->i_mtime.tv_sec)); in hpfs_write_inode_nolock()
230 de->read_date = cpu_to_le32(gmt_to_local(i->i_sb, i->i_atime.tv_sec)); in hpfs_write_inode_nolock()
231 de->creation_date = cpu_to_le32(gmt_to_local(i->i_sb, i->i_ctime.tv_sec)); in hpfs_write_inode_nolock()
232 de->read_only = !(i->i_mode & 0222); in hpfs_write_inode_nolock()
233 de->ea_size = cpu_to_le32(hpfs_inode->i_ea_size); in hpfs_write_inode_nolock()
237 if (S_ISDIR(i->i_mode)) { in hpfs_write_inode_nolock()
238 if ((de = map_dirent(i, hpfs_inode->i_dno, "\001\001", 2, NULL, &qbh))) { in hpfs_write_inode_nolock()
239 de->write_date = cpu_to_le32(gmt_to_local(i->i_sb, i->i_mtime.tv_sec)); in hpfs_write_inode_nolock()
240 de->read_date = cpu_to_le32(gmt_to_local(i->i_sb, i->i_atime.tv_sec)); in hpfs_write_inode_nolock()
241 de->creation_date = cpu_to_le32(gmt_to_local(i->i_sb, i->i_ctime.tv_sec)); in hpfs_write_inode_nolock()
242 de->read_only = !(i->i_mode & 0222); in hpfs_write_inode_nolock()
243 de->ea_size = cpu_to_le32(/*hpfs_inode->i_ea_size*/0); in hpfs_write_inode_nolock()
244 de->file_size = cpu_to_le32(0); in hpfs_write_inode_nolock()
248 hpfs_error(i->i_sb, in hpfs_write_inode_nolock()
250 (unsigned long)i->i_ino); in hpfs_write_inode_nolock()
258 struct inode *inode = dentry->d_inode; in hpfs_setattr()
259 int error = -EINVAL; in hpfs_setattr()
261 hpfs_lock(inode->i_sb); in hpfs_setattr()
262 if (inode->i_ino == hpfs_sb(inode->i_sb)->sb_root) in hpfs_setattr()
264 if ((attr->ia_valid & ATTR_UID) && attr->ia_uid >= 0x10000) in hpfs_setattr()
266 if ((attr->ia_valid & ATTR_GID) && attr->ia_gid >= 0x10000) in hpfs_setattr()
268 if ((attr->ia_valid & ATTR_SIZE) && attr->ia_size > inode->i_size) in hpfs_setattr()
275 if ((attr->ia_valid & ATTR_SIZE) && in hpfs_setattr()
276 attr->ia_size != i_size_read(inode)) { in hpfs_setattr()
277 error = vmtruncate(inode, attr->ia_size); in hpfs_setattr()
287 hpfs_unlock(inode->i_sb); in hpfs_setattr()
295 if (hpfs_inode->i_dirty) in hpfs_write_if_changed()
301 truncate_inode_pages(&inode->i_data, 0); in hpfs_evict_inode()
303 if (!inode->i_nlink) { in hpfs_evict_inode()
304 hpfs_lock(inode->i_sb); in hpfs_evict_inode()
305 hpfs_remove_fnode(inode->i_sb, inode->i_ino); in hpfs_evict_inode()
306 hpfs_unlock(inode->i_sb); in hpfs_evict_inode()