Lines Matching refs:inode
33 struct inode *inode = mapping->host; in hfsplus_write_failed() local
35 if (to > inode->i_size) { in hfsplus_write_failed()
36 truncate_pagecache(inode, inode->i_size); in hfsplus_write_failed()
37 hfsplus_file_truncate(inode); in hfsplus_write_failed()
64 struct inode *inode = folio->mapping->host; in hfsplus_release_folio() local
65 struct super_block *sb = inode->i_sb; in hfsplus_release_folio()
72 switch (inode->i_ino) { in hfsplus_release_folio()
127 struct inode *inode = mapping->host; in hfsplus_direct_IO() local
131 ret = blockdev_direct_IO(iocb, inode, iter, hfsplus_get_block); in hfsplus_direct_IO()
138 loff_t isize = i_size_read(inode); in hfsplus_direct_IO()
183 static int hfsplus_get_perms(struct inode *inode, in hfsplus_get_perms() argument
186 struct hfsplus_sb_info *sbi = HFSPLUS_SB(inode->i_sb); in hfsplus_get_perms()
207 i_uid_write(inode, be32_to_cpu(perms->owner)); in hfsplus_get_perms()
208 if ((test_bit(HFSPLUS_SB_UID, &sbi->flags)) || (!i_uid_read(inode) && !mode)) in hfsplus_get_perms()
209 inode->i_uid = sbi->uid; in hfsplus_get_perms()
211 i_gid_write(inode, be32_to_cpu(perms->group)); in hfsplus_get_perms()
212 if ((test_bit(HFSPLUS_SB_GID, &sbi->flags)) || (!i_gid_read(inode) && !mode)) in hfsplus_get_perms()
213 inode->i_gid = sbi->gid; in hfsplus_get_perms()
220 inode->i_mode = mode; in hfsplus_get_perms()
222 HFSPLUS_I(inode)->userflags = perms->userflags; in hfsplus_get_perms()
224 inode->i_flags |= S_IMMUTABLE; in hfsplus_get_perms()
226 inode->i_flags &= ~S_IMMUTABLE; in hfsplus_get_perms()
228 inode->i_flags |= S_APPEND; in hfsplus_get_perms()
230 inode->i_flags &= ~S_APPEND; in hfsplus_get_perms()
233 pr_err("invalid file type 0%04o for inode %lu\n", mode, inode->i_ino); in hfsplus_get_perms()
237 static int hfsplus_file_open(struct inode *inode, struct file *file) in hfsplus_file_open() argument
239 if (HFSPLUS_IS_RSRC(inode)) in hfsplus_file_open()
240 inode = HFSPLUS_I(inode)->rsrc_inode; in hfsplus_file_open()
241 if (!(file->f_flags & O_LARGEFILE) && i_size_read(inode) > MAX_NON_LFS) in hfsplus_file_open()
243 atomic_inc(&HFSPLUS_I(inode)->opencnt); in hfsplus_file_open()
247 static int hfsplus_file_release(struct inode *inode, struct file *file) in hfsplus_file_release() argument
249 struct super_block *sb = inode->i_sb; in hfsplus_file_release()
251 if (HFSPLUS_IS_RSRC(inode)) in hfsplus_file_release()
252 inode = HFSPLUS_I(inode)->rsrc_inode; in hfsplus_file_release()
253 if (atomic_dec_and_test(&HFSPLUS_I(inode)->opencnt)) { in hfsplus_file_release()
254 inode_lock(inode); in hfsplus_file_release()
255 hfsplus_file_truncate(inode); in hfsplus_file_release()
256 if (inode->i_flags & S_DEAD) { in hfsplus_file_release()
257 hfsplus_delete_cat(inode->i_ino, in hfsplus_file_release()
259 hfsplus_delete_inode(inode); in hfsplus_file_release()
261 inode_unlock(inode); in hfsplus_file_release()
269 struct inode *inode = d_inode(dentry); in hfsplus_setattr() local
277 attr->ia_size != i_size_read(inode)) { in hfsplus_setattr()
278 inode_dio_wait(inode); in hfsplus_setattr()
279 if (attr->ia_size > inode->i_size) { in hfsplus_setattr()
280 error = generic_cont_expand_simple(inode, in hfsplus_setattr()
285 truncate_setsize(inode, attr->ia_size); in hfsplus_setattr()
286 hfsplus_file_truncate(inode); in hfsplus_setattr()
287 inode_set_mtime_to_ts(inode, inode_set_ctime_current(inode)); in hfsplus_setattr()
290 setattr_copy(&nop_mnt_idmap, inode, attr); in hfsplus_setattr()
291 mark_inode_dirty(inode); in hfsplus_setattr()
300 struct inode *inode = d_inode(path->dentry); in hfsplus_getattr() local
301 struct hfsplus_inode_info *hip = HFSPLUS_I(inode); in hfsplus_getattr()
308 if (inode->i_flags & S_APPEND) in hfsplus_getattr()
310 if (inode->i_flags & S_IMMUTABLE) in hfsplus_getattr()
318 generic_fillattr(&nop_mnt_idmap, request_mask, inode, stat); in hfsplus_getattr()
325 struct inode *inode = file->f_mapping->host; in hfsplus_file_fsync() local
326 struct hfsplus_inode_info *hip = HFSPLUS_I(inode); in hfsplus_file_fsync()
327 struct hfsplus_sb_info *sbi = HFSPLUS_SB(inode->i_sb); in hfsplus_file_fsync()
332 inode->i_ino, start, end); in hfsplus_file_fsync()
337 inode_lock(inode); in hfsplus_file_fsync()
342 sync_inode_metadata(inode, 1); in hfsplus_file_fsync()
348 error = filemap_write_and_wait(sbi->cat_tree->inode->i_mapping); in hfsplus_file_fsync()
352 filemap_write_and_wait(sbi->ext_tree->inode->i_mapping); in hfsplus_file_fsync()
361 sbi->attr_tree->inode->i_mapping); in hfsplus_file_fsync()
379 error2 = hfsplus_commit_superblock(inode->i_sb); in hfsplus_file_fsync()
384 blkdev_issue_flush(inode->i_sb->s_bdev); in hfsplus_file_fsync()
386 inode_unlock(inode); in hfsplus_file_fsync()
425 struct inode *hfsplus_new_inode(struct super_block *sb, struct inode *dir, in hfsplus_new_inode()
429 struct inode *inode = new_inode(sb); in hfsplus_new_inode() local
432 if (!inode) in hfsplus_new_inode()
435 inode->i_ino = sbi->next_cnid++; in hfsplus_new_inode()
436 inode_init_owner(&nop_mnt_idmap, inode, dir, mode); in hfsplus_new_inode()
437 set_nlink(inode, 1); in hfsplus_new_inode()
438 simple_inode_init_ts(inode); in hfsplus_new_inode()
440 hip = HFSPLUS_I(inode); in hfsplus_new_inode()
458 if (S_ISDIR(inode->i_mode)) { in hfsplus_new_inode()
459 inode->i_size = 2; in hfsplus_new_inode()
461 inode->i_op = &hfsplus_dir_inode_operations; in hfsplus_new_inode()
462 inode->i_fop = &hfsplus_dir_operations; in hfsplus_new_inode()
463 } else if (S_ISREG(inode->i_mode)) { in hfsplus_new_inode()
465 inode->i_op = &hfsplus_file_inode_operations; in hfsplus_new_inode()
466 inode->i_fop = &hfsplus_file_operations; in hfsplus_new_inode()
467 inode->i_mapping->a_ops = &hfsplus_aops; in hfsplus_new_inode()
469 } else if (S_ISLNK(inode->i_mode)) { in hfsplus_new_inode()
471 inode->i_op = &hfsplus_symlink_inode_operations; in hfsplus_new_inode()
472 inode_nohighmem(inode); in hfsplus_new_inode()
473 inode->i_mapping->a_ops = &hfsplus_aops; in hfsplus_new_inode()
475 } else if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) || in hfsplus_new_inode()
476 S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) { in hfsplus_new_inode()
478 inode->i_op = &hfsplus_special_inode_operations; in hfsplus_new_inode()
482 insert_inode_hash(inode); in hfsplus_new_inode()
483 mark_inode_dirty(inode); in hfsplus_new_inode()
486 return inode; in hfsplus_new_inode()
489 void hfsplus_delete_inode(struct inode *inode) in hfsplus_delete_inode() argument
491 struct super_block *sb = inode->i_sb; in hfsplus_delete_inode()
493 if (S_ISDIR(inode->i_mode)) { in hfsplus_delete_inode()
499 if (S_ISREG(inode->i_mode)) { in hfsplus_delete_inode()
500 if (!inode->i_nlink) { in hfsplus_delete_inode()
501 inode->i_size = 0; in hfsplus_delete_inode()
502 hfsplus_file_truncate(inode); in hfsplus_delete_inode()
504 } else if (S_ISLNK(inode->i_mode)) { in hfsplus_delete_inode()
505 inode->i_size = 0; in hfsplus_delete_inode()
506 hfsplus_file_truncate(inode); in hfsplus_delete_inode()
511 void hfsplus_inode_read_fork(struct inode *inode, struct hfsplus_fork_raw *fork) in hfsplus_inode_read_fork() argument
513 struct super_block *sb = inode->i_sb; in hfsplus_inode_read_fork()
515 struct hfsplus_inode_info *hip = HFSPLUS_I(inode); in hfsplus_inode_read_fork()
528 hip->phys_size = inode->i_size = be64_to_cpu(fork->total_size); in hfsplus_inode_read_fork()
530 (inode->i_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits; in hfsplus_inode_read_fork()
531 inode_set_bytes(inode, hip->fs_blocks << sb->s_blocksize_bits); in hfsplus_inode_read_fork()
535 hip->clump_blocks = HFSPLUS_IS_RSRC(inode) ? in hfsplus_inode_read_fork()
541 void hfsplus_inode_write_fork(struct inode *inode, in hfsplus_inode_write_fork() argument
544 memcpy(&fork->extents, &HFSPLUS_I(inode)->first_extents, in hfsplus_inode_write_fork()
546 fork->total_size = cpu_to_be64(inode->i_size); in hfsplus_inode_write_fork()
547 fork->total_blocks = cpu_to_be32(HFSPLUS_I(inode)->alloc_blocks); in hfsplus_inode_write_fork()
550 int hfsplus_cat_read_inode(struct inode *inode, struct hfs_find_data *fd) in hfsplus_cat_read_inode() argument
558 HFSPLUS_I(inode)->linkid = 0; in hfsplus_cat_read_inode()
569 res = hfsplus_get_perms(inode, &folder->permissions, 1); in hfsplus_cat_read_inode()
572 set_nlink(inode, 1); in hfsplus_cat_read_inode()
573 inode->i_size = 2 + be32_to_cpu(folder->valence); in hfsplus_cat_read_inode()
574 inode_set_atime_to_ts(inode, hfsp_mt2ut(folder->access_date)); in hfsplus_cat_read_inode()
575 inode_set_mtime_to_ts(inode, in hfsplus_cat_read_inode()
577 inode_set_ctime_to_ts(inode, in hfsplus_cat_read_inode()
579 HFSPLUS_I(inode)->create_date = folder->create_date; in hfsplus_cat_read_inode()
580 HFSPLUS_I(inode)->fs_blocks = 0; in hfsplus_cat_read_inode()
582 HFSPLUS_I(inode)->subfolders = in hfsplus_cat_read_inode()
585 inode->i_op = &hfsplus_dir_inode_operations; in hfsplus_cat_read_inode()
586 inode->i_fop = &hfsplus_dir_operations; in hfsplus_cat_read_inode()
598 hfsplus_inode_read_fork(inode, HFSPLUS_IS_RSRC(inode) ? in hfsplus_cat_read_inode()
600 res = hfsplus_get_perms(inode, &file->permissions, 0); in hfsplus_cat_read_inode()
603 set_nlink(inode, 1); in hfsplus_cat_read_inode()
604 if (S_ISREG(inode->i_mode)) { in hfsplus_cat_read_inode()
606 set_nlink(inode, in hfsplus_cat_read_inode()
608 inode->i_op = &hfsplus_file_inode_operations; in hfsplus_cat_read_inode()
609 inode->i_fop = &hfsplus_file_operations; in hfsplus_cat_read_inode()
610 inode->i_mapping->a_ops = &hfsplus_aops; in hfsplus_cat_read_inode()
611 } else if (S_ISLNK(inode->i_mode)) { in hfsplus_cat_read_inode()
612 inode->i_op = &hfsplus_symlink_inode_operations; in hfsplus_cat_read_inode()
613 inode_nohighmem(inode); in hfsplus_cat_read_inode()
614 inode->i_mapping->a_ops = &hfsplus_aops; in hfsplus_cat_read_inode()
616 inode->i_op = &hfsplus_special_inode_operations; in hfsplus_cat_read_inode()
617 init_special_inode(inode, inode->i_mode, in hfsplus_cat_read_inode()
620 inode_set_atime_to_ts(inode, hfsp_mt2ut(file->access_date)); in hfsplus_cat_read_inode()
621 inode_set_mtime_to_ts(inode, in hfsplus_cat_read_inode()
623 inode_set_ctime_to_ts(inode, in hfsplus_cat_read_inode()
625 HFSPLUS_I(inode)->create_date = file->create_date; in hfsplus_cat_read_inode()
634 int hfsplus_cat_write_inode(struct inode *inode) in hfsplus_cat_write_inode() argument
636 struct inode *main_inode = inode; in hfsplus_cat_write_inode()
637 struct hfs_btree *tree = HFSPLUS_SB(inode->i_sb)->cat_tree; in hfsplus_cat_write_inode()
642 hfs_dbg("inode->i_ino %lu\n", inode->i_ino); in hfsplus_cat_write_inode()
644 if (HFSPLUS_IS_RSRC(inode)) in hfsplus_cat_write_inode()
645 main_inode = HFSPLUS_I(inode)->rsrc_inode; in hfsplus_cat_write_inode()
669 hfsplus_cat_set_perms(inode, &folder->permissions); in hfsplus_cat_write_inode()
670 folder->access_date = hfsp_ut2mt(inode_get_atime(inode)); in hfsplus_cat_write_inode()
671 folder->content_mod_date = hfsp_ut2mt(inode_get_mtime(inode)); in hfsplus_cat_write_inode()
672 folder->attribute_mod_date = hfsp_ut2mt(inode_get_ctime(inode)); in hfsplus_cat_write_inode()
673 folder->valence = cpu_to_be32(inode->i_size - 2); in hfsplus_cat_write_inode()
676 cpu_to_be32(HFSPLUS_I(inode)->subfolders); in hfsplus_cat_write_inode()
680 } else if (HFSPLUS_IS_RSRC(inode)) { in hfsplus_cat_write_inode()
684 hfsplus_inode_write_fork(inode, &file->rsrc_fork); in hfsplus_cat_write_inode()
697 hfsplus_inode_write_fork(inode, &file->data_fork); in hfsplus_cat_write_inode()
698 hfsplus_cat_set_perms(inode, &file->permissions); in hfsplus_cat_write_inode()
705 file->access_date = hfsp_ut2mt(inode_get_atime(inode)); in hfsplus_cat_write_inode()
706 file->content_mod_date = hfsp_ut2mt(inode_get_mtime(inode)); in hfsplus_cat_write_inode()
707 file->attribute_mod_date = hfsp_ut2mt(inode_get_ctime(inode)); in hfsplus_cat_write_inode()
712 set_bit(HFSPLUS_I_CAT_DIRTY, &HFSPLUS_I(inode)->flags); in hfsplus_cat_write_inode()
720 res, inode->i_ino); in hfsplus_cat_write_inode()
729 struct inode *inode = d_inode(dentry); in hfsplus_fileattr_get() local
730 struct hfsplus_inode_info *hip = HFSPLUS_I(inode); in hfsplus_fileattr_get()
733 if (inode->i_flags & S_IMMUTABLE) in hfsplus_fileattr_get()
735 if (inode->i_flags & S_APPEND) in hfsplus_fileattr_get()
748 struct inode *inode = d_inode(dentry); in hfsplus_fileattr_set() local
749 struct hfsplus_inode_info *hip = HFSPLUS_I(inode); in hfsplus_fileattr_set()
765 inode_set_flags(inode, new_fl, S_IMMUTABLE | S_APPEND); in hfsplus_fileattr_set()
772 inode_set_ctime_current(inode); in hfsplus_fileattr_set()
773 mark_inode_dirty(inode); in hfsplus_fileattr_set()