Lines Matching refs:inode

3  *  linux/fs/hfsplus/inode.c
37 struct inode *inode = mapping->host;
39 if (to > inode->i_size) {
40 truncate_pagecache(inode, inode->i_size);
41 hfsplus_file_truncate(inode);
68 struct inode *inode = page->mapping->host;
69 struct super_block *sb = inode->i_sb;
75 switch (inode->i_ino) {
130 struct inode *inode = mapping->host;
134 ret = blockdev_direct_IO(iocb, inode, iter, hfsplus_get_block);
141 loff_t isize = i_size_read(inode);
181 static void hfsplus_get_perms(struct inode *inode,
184 struct hfsplus_sb_info *sbi = HFSPLUS_SB(inode->i_sb);
189 i_uid_write(inode, be32_to_cpu(perms->owner));
190 if ((test_bit(HFSPLUS_SB_UID, &sbi->flags)) || (!i_uid_read(inode) && !mode))
191 inode->i_uid = sbi->uid;
193 i_gid_write(inode, be32_to_cpu(perms->group));
194 if ((test_bit(HFSPLUS_SB_GID, &sbi->flags)) || (!i_gid_read(inode) && !mode))
195 inode->i_gid = sbi->gid;
202 inode->i_mode = mode;
204 HFSPLUS_I(inode)->userflags = perms->userflags;
206 inode->i_flags |= S_IMMUTABLE;
208 inode->i_flags &= ~S_IMMUTABLE;
210 inode->i_flags |= S_APPEND;
212 inode->i_flags &= ~S_APPEND;
215 static int hfsplus_file_open(struct inode *inode, struct file *file)
217 if (HFSPLUS_IS_RSRC(inode))
218 inode = HFSPLUS_I(inode)->rsrc_inode;
219 if (!(file->f_flags & O_LARGEFILE) && i_size_read(inode) > MAX_NON_LFS)
221 atomic_inc(&HFSPLUS_I(inode)->opencnt);
225 static int hfsplus_file_release(struct inode *inode, struct file *file)
227 struct super_block *sb = inode->i_sb;
229 if (HFSPLUS_IS_RSRC(inode))
230 inode = HFSPLUS_I(inode)->rsrc_inode;
231 if (atomic_dec_and_test(&HFSPLUS_I(inode)->opencnt)) {
232 inode_lock(inode);
233 hfsplus_file_truncate(inode);
234 if (inode->i_flags & S_DEAD) {
235 hfsplus_delete_cat(inode->i_ino,
237 hfsplus_delete_inode(inode);
239 inode_unlock(inode);
246 struct inode *inode = d_inode(dentry);
254 attr->ia_size != i_size_read(inode)) {
255 inode_dio_wait(inode);
256 if (attr->ia_size > inode->i_size) {
257 error = generic_cont_expand_simple(inode,
262 truncate_setsize(inode, attr->ia_size);
263 hfsplus_file_truncate(inode);
264 inode->i_mtime = inode->i_ctime = current_time(inode);
267 setattr_copy(inode, attr);
268 mark_inode_dirty(inode);
276 struct inode *inode = d_inode(path->dentry);
277 struct hfsplus_inode_info *hip = HFSPLUS_I(inode);
279 if (inode->i_flags & S_APPEND)
281 if (inode->i_flags & S_IMMUTABLE)
289 generic_fillattr(inode, stat);
296 struct inode *inode = file->f_mapping->host;
297 struct hfsplus_inode_info *hip = HFSPLUS_I(inode);
298 struct hfsplus_sb_info *sbi = HFSPLUS_SB(inode->i_sb);
304 inode_lock(inode);
307 * Sync inode metadata into the catalog and extent trees.
309 sync_inode_metadata(inode, 1);
315 error = filemap_write_and_wait(sbi->cat_tree->inode->i_mapping);
319 filemap_write_and_wait(sbi->ext_tree->inode->i_mapping);
328 sbi->attr_tree->inode->i_mapping);
343 blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL);
345 inode_unlock(inode);
368 struct inode *hfsplus_new_inode(struct super_block *sb, struct inode *dir,
372 struct inode *inode = new_inode(sb);
375 if (!inode)
378 inode->i_ino = sbi->next_cnid++;
379 inode_init_owner(inode, dir, mode);
380 set_nlink(inode, 1);
381 inode->i_mtime = inode->i_atime = inode->i_ctime = current_time(inode);
383 hip = HFSPLUS_I(inode);
401 if (S_ISDIR(inode->i_mode)) {
402 inode->i_size = 2;
404 inode->i_op = &hfsplus_dir_inode_operations;
405 inode->i_fop = &hfsplus_dir_operations;
406 } else if (S_ISREG(inode->i_mode)) {
408 inode->i_op = &hfsplus_file_inode_operations;
409 inode->i_fop = &hfsplus_file_operations;
410 inode->i_mapping->a_ops = &hfsplus_aops;
412 } else if (S_ISLNK(inode->i_mode)) {
414 inode->i_op = &page_symlink_inode_operations;
415 inode_nohighmem(inode);
416 inode->i_mapping->a_ops = &hfsplus_aops;
420 insert_inode_hash(inode);
421 mark_inode_dirty(inode);
424 return inode;
427 void hfsplus_delete_inode(struct inode *inode)
429 struct super_block *sb = inode->i_sb;
431 if (S_ISDIR(inode->i_mode)) {
437 if (S_ISREG(inode->i_mode)) {
438 if (!inode->i_nlink) {
439 inode->i_size = 0;
440 hfsplus_file_truncate(inode);
442 } else if (S_ISLNK(inode->i_mode)) {
443 inode->i_size = 0;
444 hfsplus_file_truncate(inode);
449 void hfsplus_inode_read_fork(struct inode *inode, struct hfsplus_fork_raw *fork)
451 struct super_block *sb = inode->i_sb;
453 struct hfsplus_inode_info *hip = HFSPLUS_I(inode);
466 hip->phys_size = inode->i_size = be64_to_cpu(fork->total_size);
468 (inode->i_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
469 inode_set_bytes(inode, hip->fs_blocks << sb->s_blocksize_bits);
473 hip->clump_blocks = HFSPLUS_IS_RSRC(inode) ?
479 void hfsplus_inode_write_fork(struct inode *inode,
482 memcpy(&fork->extents, &HFSPLUS_I(inode)->first_extents,
484 fork->total_size = cpu_to_be64(inode->i_size);
485 fork->total_blocks = cpu_to_be32(HFSPLUS_I(inode)->alloc_blocks);
488 int hfsplus_cat_read_inode(struct inode *inode, struct hfs_find_data *fd)
496 HFSPLUS_I(inode)->linkid = 0;
507 hfsplus_get_perms(inode, &folder->permissions, 1);
508 set_nlink(inode, 1);
509 inode->i_size = 2 + be32_to_cpu(folder->valence);
510 inode->i_atime = hfsp_mt2ut(folder->access_date);
511 inode->i_mtime = hfsp_mt2ut(folder->content_mod_date);
512 inode->i_ctime = hfsp_mt2ut(folder->attribute_mod_date);
513 HFSPLUS_I(inode)->create_date = folder->create_date;
514 HFSPLUS_I(inode)->fs_blocks = 0;
516 HFSPLUS_I(inode)->subfolders =
519 inode->i_op = &hfsplus_dir_inode_operations;
520 inode->i_fop = &hfsplus_dir_operations;
532 hfsplus_inode_read_fork(inode, HFSPLUS_IS_RSRC(inode) ?
534 hfsplus_get_perms(inode, &file->permissions, 0);
535 set_nlink(inode, 1);
536 if (S_ISREG(inode->i_mode)) {
538 set_nlink(inode,
540 inode->i_op = &hfsplus_file_inode_operations;
541 inode->i_fop = &hfsplus_file_operations;
542 inode->i_mapping->a_ops = &hfsplus_aops;
543 } else if (S_ISLNK(inode->i_mode)) {
544 inode->i_op = &page_symlink_inode_operations;
545 inode_nohighmem(inode);
546 inode->i_mapping->a_ops = &hfsplus_aops;
548 init_special_inode(inode, inode->i_mode,
551 inode->i_atime = hfsp_mt2ut(file->access_date);
552 inode->i_mtime = hfsp_mt2ut(file->content_mod_date);
553 inode->i_ctime = hfsp_mt2ut(file->attribute_mod_date);
554 HFSPLUS_I(inode)->create_date = file->create_date;
556 pr_err("bad catalog entry used to create inode\n");
563 int hfsplus_cat_write_inode(struct inode *inode)
565 struct inode *main_inode = inode;
570 if (HFSPLUS_IS_RSRC(inode))
571 main_inode = HFSPLUS_I(inode)->rsrc_inode;
595 hfsplus_cat_set_perms(inode, &folder->permissions);
596 folder->access_date = hfsp_ut2mt(inode->i_atime);
597 folder->content_mod_date = hfsp_ut2mt(inode->i_mtime);
598 folder->attribute_mod_date = hfsp_ut2mt(inode->i_ctime);
599 folder->valence = cpu_to_be32(inode->i_size - 2);
602 cpu_to_be32(HFSPLUS_I(inode)->subfolders);
606 } else if (HFSPLUS_IS_RSRC(inode)) {
610 hfsplus_inode_write_fork(inode, &file->rsrc_fork);
623 hfsplus_inode_write_fork(inode, &file->data_fork);
624 hfsplus_cat_set_perms(inode, &file->permissions);
631 file->access_date = hfsp_ut2mt(inode->i_atime);
632 file->content_mod_date = hfsp_ut2mt(inode->i_mtime);
633 file->attribute_mod_date = hfsp_ut2mt(inode->i_ctime);
638 set_bit(HFSPLUS_I_CAT_DIRTY, &HFSPLUS_I(inode)->flags);