Lines Matching refs:inode
36 struct inode *inode = mapping->host; in hfsplus_write_failed() local
38 if (to > inode->i_size) { in hfsplus_write_failed()
39 truncate_pagecache(inode, inode->i_size); in hfsplus_write_failed()
40 hfsplus_file_truncate(inode); in hfsplus_write_failed()
67 struct inode *inode = page->mapping->host; in hfsplus_releasepage() local
68 struct super_block *sb = inode->i_sb; in hfsplus_releasepage()
74 switch (inode->i_ino) { in hfsplus_releasepage()
130 struct inode *inode = file_inode(file)->i_mapping->host; in hfsplus_direct_IO() local
134 ret = blockdev_direct_IO(iocb, inode, iter, offset, hfsplus_get_block); in hfsplus_direct_IO()
141 loff_t isize = i_size_read(inode); in hfsplus_direct_IO()
181 static void hfsplus_get_perms(struct inode *inode, in hfsplus_get_perms() argument
184 struct hfsplus_sb_info *sbi = HFSPLUS_SB(inode->i_sb); in hfsplus_get_perms()
189 i_uid_write(inode, be32_to_cpu(perms->owner)); in hfsplus_get_perms()
190 if (!i_uid_read(inode) && !mode) in hfsplus_get_perms()
191 inode->i_uid = sbi->uid; in hfsplus_get_perms()
193 i_gid_write(inode, be32_to_cpu(perms->group)); in hfsplus_get_perms()
194 if (!i_gid_read(inode) && !mode) in hfsplus_get_perms()
195 inode->i_gid = sbi->gid; in hfsplus_get_perms()
202 inode->i_mode = mode; in hfsplus_get_perms()
204 HFSPLUS_I(inode)->userflags = perms->userflags; in hfsplus_get_perms()
206 inode->i_flags |= S_IMMUTABLE; in hfsplus_get_perms()
208 inode->i_flags &= ~S_IMMUTABLE; in hfsplus_get_perms()
210 inode->i_flags |= S_APPEND; in hfsplus_get_perms()
212 inode->i_flags &= ~S_APPEND; in hfsplus_get_perms()
215 static int hfsplus_file_open(struct inode *inode, struct file *file) in hfsplus_file_open() argument
217 if (HFSPLUS_IS_RSRC(inode)) in hfsplus_file_open()
218 inode = HFSPLUS_I(inode)->rsrc_inode; in hfsplus_file_open()
219 if (!(file->f_flags & O_LARGEFILE) && i_size_read(inode) > MAX_NON_LFS) in hfsplus_file_open()
221 atomic_inc(&HFSPLUS_I(inode)->opencnt); in hfsplus_file_open()
225 static int hfsplus_file_release(struct inode *inode, struct file *file) in hfsplus_file_release() argument
227 struct super_block *sb = inode->i_sb; in hfsplus_file_release()
229 if (HFSPLUS_IS_RSRC(inode)) in hfsplus_file_release()
230 inode = HFSPLUS_I(inode)->rsrc_inode; in hfsplus_file_release()
231 if (atomic_dec_and_test(&HFSPLUS_I(inode)->opencnt)) { in hfsplus_file_release()
232 mutex_lock(&inode->i_mutex); in hfsplus_file_release()
233 hfsplus_file_truncate(inode); in hfsplus_file_release()
234 if (inode->i_flags & S_DEAD) { in hfsplus_file_release()
235 hfsplus_delete_cat(inode->i_ino, in hfsplus_file_release()
237 hfsplus_delete_inode(inode); in hfsplus_file_release()
239 mutex_unlock(&inode->i_mutex); in hfsplus_file_release()
246 struct inode *inode = d_inode(dentry); in hfsplus_setattr() local
249 error = inode_change_ok(inode, attr); in hfsplus_setattr()
254 attr->ia_size != i_size_read(inode)) { in hfsplus_setattr()
255 inode_dio_wait(inode); in hfsplus_setattr()
256 if (attr->ia_size > inode->i_size) { in hfsplus_setattr()
257 error = generic_cont_expand_simple(inode, in hfsplus_setattr()
262 truncate_setsize(inode, attr->ia_size); in hfsplus_setattr()
263 hfsplus_file_truncate(inode); in hfsplus_setattr()
266 setattr_copy(inode, attr); in hfsplus_setattr()
267 mark_inode_dirty(inode); in hfsplus_setattr()
270 error = posix_acl_chmod(inode, inode->i_mode); in hfsplus_setattr()
281 struct inode *inode = file->f_mapping->host; in hfsplus_file_fsync() local
282 struct hfsplus_inode_info *hip = HFSPLUS_I(inode); in hfsplus_file_fsync()
283 struct hfsplus_sb_info *sbi = HFSPLUS_SB(inode->i_sb); in hfsplus_file_fsync()
286 error = filemap_write_and_wait_range(inode->i_mapping, start, end); in hfsplus_file_fsync()
289 mutex_lock(&inode->i_mutex); in hfsplus_file_fsync()
294 sync_inode_metadata(inode, 1); in hfsplus_file_fsync()
300 error = filemap_write_and_wait(sbi->cat_tree->inode->i_mapping); in hfsplus_file_fsync()
304 filemap_write_and_wait(sbi->ext_tree->inode->i_mapping); in hfsplus_file_fsync()
313 sbi->attr_tree->inode->i_mapping); in hfsplus_file_fsync()
328 blkdev_issue_flush(inode->i_sb->s_bdev, GFP_KERNEL, NULL); in hfsplus_file_fsync()
330 mutex_unlock(&inode->i_mutex); in hfsplus_file_fsync()
359 struct inode *hfsplus_new_inode(struct super_block *sb, umode_t mode) in hfsplus_new_inode()
362 struct inode *inode = new_inode(sb); in hfsplus_new_inode() local
365 if (!inode) in hfsplus_new_inode()
368 inode->i_ino = sbi->next_cnid++; in hfsplus_new_inode()
369 inode->i_mode = mode; in hfsplus_new_inode()
370 inode->i_uid = current_fsuid(); in hfsplus_new_inode()
371 inode->i_gid = current_fsgid(); in hfsplus_new_inode()
372 set_nlink(inode, 1); in hfsplus_new_inode()
373 inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME_SEC; in hfsplus_new_inode()
375 hip = HFSPLUS_I(inode); in hfsplus_new_inode()
392 if (S_ISDIR(inode->i_mode)) { in hfsplus_new_inode()
393 inode->i_size = 2; in hfsplus_new_inode()
395 inode->i_op = &hfsplus_dir_inode_operations; in hfsplus_new_inode()
396 inode->i_fop = &hfsplus_dir_operations; in hfsplus_new_inode()
397 } else if (S_ISREG(inode->i_mode)) { in hfsplus_new_inode()
399 inode->i_op = &hfsplus_file_inode_operations; in hfsplus_new_inode()
400 inode->i_fop = &hfsplus_file_operations; in hfsplus_new_inode()
401 inode->i_mapping->a_ops = &hfsplus_aops; in hfsplus_new_inode()
403 } else if (S_ISLNK(inode->i_mode)) { in hfsplus_new_inode()
405 inode->i_op = &page_symlink_inode_operations; in hfsplus_new_inode()
406 inode->i_mapping->a_ops = &hfsplus_aops; in hfsplus_new_inode()
410 insert_inode_hash(inode); in hfsplus_new_inode()
411 mark_inode_dirty(inode); in hfsplus_new_inode()
414 return inode; in hfsplus_new_inode()
417 void hfsplus_delete_inode(struct inode *inode) in hfsplus_delete_inode() argument
419 struct super_block *sb = inode->i_sb; in hfsplus_delete_inode()
421 if (S_ISDIR(inode->i_mode)) { in hfsplus_delete_inode()
427 if (S_ISREG(inode->i_mode)) { in hfsplus_delete_inode()
428 if (!inode->i_nlink) { in hfsplus_delete_inode()
429 inode->i_size = 0; in hfsplus_delete_inode()
430 hfsplus_file_truncate(inode); in hfsplus_delete_inode()
432 } else if (S_ISLNK(inode->i_mode)) { in hfsplus_delete_inode()
433 inode->i_size = 0; in hfsplus_delete_inode()
434 hfsplus_file_truncate(inode); in hfsplus_delete_inode()
439 void hfsplus_inode_read_fork(struct inode *inode, struct hfsplus_fork_raw *fork) in hfsplus_inode_read_fork() argument
441 struct super_block *sb = inode->i_sb; in hfsplus_inode_read_fork()
443 struct hfsplus_inode_info *hip = HFSPLUS_I(inode); in hfsplus_inode_read_fork()
456 hip->phys_size = inode->i_size = be64_to_cpu(fork->total_size); in hfsplus_inode_read_fork()
458 (inode->i_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits; in hfsplus_inode_read_fork()
459 inode_set_bytes(inode, hip->fs_blocks << sb->s_blocksize_bits); in hfsplus_inode_read_fork()
463 hip->clump_blocks = HFSPLUS_IS_RSRC(inode) ? in hfsplus_inode_read_fork()
469 void hfsplus_inode_write_fork(struct inode *inode, in hfsplus_inode_write_fork() argument
472 memcpy(&fork->extents, &HFSPLUS_I(inode)->first_extents, in hfsplus_inode_write_fork()
474 fork->total_size = cpu_to_be64(inode->i_size); in hfsplus_inode_write_fork()
475 fork->total_blocks = cpu_to_be32(HFSPLUS_I(inode)->alloc_blocks); in hfsplus_inode_write_fork()
478 int hfsplus_cat_read_inode(struct inode *inode, struct hfs_find_data *fd) in hfsplus_cat_read_inode() argument
486 HFSPLUS_I(inode)->linkid = 0; in hfsplus_cat_read_inode()
494 hfsplus_get_perms(inode, &folder->permissions, 1); in hfsplus_cat_read_inode()
495 set_nlink(inode, 1); in hfsplus_cat_read_inode()
496 inode->i_size = 2 + be32_to_cpu(folder->valence); in hfsplus_cat_read_inode()
497 inode->i_atime = hfsp_mt2ut(folder->access_date); in hfsplus_cat_read_inode()
498 inode->i_mtime = hfsp_mt2ut(folder->content_mod_date); in hfsplus_cat_read_inode()
499 inode->i_ctime = hfsp_mt2ut(folder->attribute_mod_date); in hfsplus_cat_read_inode()
500 HFSPLUS_I(inode)->create_date = folder->create_date; in hfsplus_cat_read_inode()
501 HFSPLUS_I(inode)->fs_blocks = 0; in hfsplus_cat_read_inode()
503 HFSPLUS_I(inode)->subfolders = in hfsplus_cat_read_inode()
506 inode->i_op = &hfsplus_dir_inode_operations; in hfsplus_cat_read_inode()
507 inode->i_fop = &hfsplus_dir_operations; in hfsplus_cat_read_inode()
516 hfsplus_inode_read_fork(inode, HFSPLUS_IS_RSRC(inode) ? in hfsplus_cat_read_inode()
518 hfsplus_get_perms(inode, &file->permissions, 0); in hfsplus_cat_read_inode()
519 set_nlink(inode, 1); in hfsplus_cat_read_inode()
520 if (S_ISREG(inode->i_mode)) { in hfsplus_cat_read_inode()
522 set_nlink(inode, in hfsplus_cat_read_inode()
524 inode->i_op = &hfsplus_file_inode_operations; in hfsplus_cat_read_inode()
525 inode->i_fop = &hfsplus_file_operations; in hfsplus_cat_read_inode()
526 inode->i_mapping->a_ops = &hfsplus_aops; in hfsplus_cat_read_inode()
527 } else if (S_ISLNK(inode->i_mode)) { in hfsplus_cat_read_inode()
528 inode->i_op = &page_symlink_inode_operations; in hfsplus_cat_read_inode()
529 inode->i_mapping->a_ops = &hfsplus_aops; in hfsplus_cat_read_inode()
531 init_special_inode(inode, inode->i_mode, in hfsplus_cat_read_inode()
534 inode->i_atime = hfsp_mt2ut(file->access_date); in hfsplus_cat_read_inode()
535 inode->i_mtime = hfsp_mt2ut(file->content_mod_date); in hfsplus_cat_read_inode()
536 inode->i_ctime = hfsp_mt2ut(file->attribute_mod_date); in hfsplus_cat_read_inode()
537 HFSPLUS_I(inode)->create_date = file->create_date; in hfsplus_cat_read_inode()
545 int hfsplus_cat_write_inode(struct inode *inode) in hfsplus_cat_write_inode() argument
547 struct inode *main_inode = inode; in hfsplus_cat_write_inode()
551 if (HFSPLUS_IS_RSRC(inode)) in hfsplus_cat_write_inode()
552 main_inode = HFSPLUS_I(inode)->rsrc_inode; in hfsplus_cat_write_inode()
573 hfsplus_cat_set_perms(inode, &folder->permissions); in hfsplus_cat_write_inode()
574 folder->access_date = hfsp_ut2mt(inode->i_atime); in hfsplus_cat_write_inode()
575 folder->content_mod_date = hfsp_ut2mt(inode->i_mtime); in hfsplus_cat_write_inode()
576 folder->attribute_mod_date = hfsp_ut2mt(inode->i_ctime); in hfsplus_cat_write_inode()
577 folder->valence = cpu_to_be32(inode->i_size - 2); in hfsplus_cat_write_inode()
580 cpu_to_be32(HFSPLUS_I(inode)->subfolders); in hfsplus_cat_write_inode()
584 } else if (HFSPLUS_IS_RSRC(inode)) { in hfsplus_cat_write_inode()
588 hfsplus_inode_write_fork(inode, &file->rsrc_fork); in hfsplus_cat_write_inode()
598 hfsplus_inode_write_fork(inode, &file->data_fork); in hfsplus_cat_write_inode()
599 hfsplus_cat_set_perms(inode, &file->permissions); in hfsplus_cat_write_inode()
606 file->access_date = hfsp_ut2mt(inode->i_atime); in hfsplus_cat_write_inode()
607 file->content_mod_date = hfsp_ut2mt(inode->i_mtime); in hfsplus_cat_write_inode()
608 file->attribute_mod_date = hfsp_ut2mt(inode->i_ctime); in hfsplus_cat_write_inode()
613 set_bit(HFSPLUS_I_CAT_DIRTY, &HFSPLUS_I(inode)->flags); in hfsplus_cat_write_inode()