Lines Matching refs:inode
20 int __exfat_write_inode(struct inode *inode, int sync)
25 struct super_block *sb = inode->i_sb;
27 struct exfat_inode_info *ei = EXFAT_I(inode);
30 if (inode->i_ino == EXFAT_ROOT_INO)
34 * If the inode is already unlinked, there is no need for updating it.
50 ep->dentry.file.attr = cpu_to_le16(exfat_make_attr(inode));
58 exfat_set_entry_time(sbi, &inode->i_mtime,
63 exfat_set_entry_time(sbi, &inode->i_atime,
70 on_disk_size = i_size_read(inode);
89 int exfat_write_inode(struct inode *inode, struct writeback_control *wbc)
93 mutex_lock(&EXFAT_SB(inode->i_sb)->s_lock);
94 ret = __exfat_write_inode(inode, wbc->sync_mode == WB_SYNC_ALL);
95 mutex_unlock(&EXFAT_SB(inode->i_sb)->s_lock);
100 void exfat_sync_inode(struct inode *inode)
102 lockdep_assert_held(&EXFAT_SB(inode->i_sb)->s_lock);
103 __exfat_write_inode(inode, 1);
107 * Input: inode, (logical) clu_offset, target allocation area
111 static int exfat_map_cluster(struct inode *inode, unsigned int clu_offset,
117 struct super_block *sb = inode->i_sb;
119 struct exfat_inode_info *ei = EXFAT_I(inode);
148 int err = exfat_get_cluster(inode, clu_offset,
187 ret = exfat_alloc_cluster(inode, num_to_be_allocated, &new_clu,
188 inode_needs_sync(inode));
223 inode->i_blocks += EXFAT_CLU_TO_B(num_to_be_allocated, sbi) >> 9;
266 static int exfat_get_block(struct inode *inode, sector_t iblock,
269 struct exfat_inode_info *ei = EXFAT_I(inode);
270 struct super_block *sb = inode->i_sb;
272 unsigned long max_blocks = bh_result->b_size >> inode->i_blkbits;
281 last_block = EXFAT_B_TO_BLK_ROUND_UP(i_size_read(inode), sb);
286 err = exfat_map_cluster(inode, iblock >> sbi->sect_per_clus_bits,
291 "failed to bmap (inode : %p iblock : %llu, err : %d)",
292 inode, (unsigned long long)iblock, err);
354 struct inode *inode = mapping->host;
356 if (to > i_size_read(inode)) {
357 truncate_pagecache(inode, i_size_read(inode));
358 inode->i_mtime = inode_set_ctime_current(inode);
359 exfat_truncate(inode);
384 struct inode *inode = mapping->host;
385 struct exfat_inode_info *ei = EXFAT_I(inode);
390 if (ei->i_size_aligned < i_size_read(inode)) {
391 exfat_fs_error(inode->i_sb,
393 i_size_read(inode), ei->i_size_aligned);
401 inode->i_mtime = inode_set_ctime_current(inode);
403 mark_inode_dirty(inode);
412 struct inode *inode = mapping->host;
427 if (EXFAT_I(inode)->i_size_aligned < size)
435 ret = blockdev_direct_IO(iocb, inode, iter, exfat_get_block);
459 int exfat_block_truncate_page(struct inode *inode, loff_t from)
461 return block_truncate_page(inode->i_mapping, from, exfat_get_block);
482 void exfat_hash_inode(struct inode *inode, loff_t i_pos)
484 struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb);
488 EXFAT_I(inode)->i_pos = i_pos;
489 hlist_add_head(&EXFAT_I(inode)->i_hash_fat, head);
493 void exfat_unhash_inode(struct inode *inode)
495 struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb);
498 hlist_del_init(&EXFAT_I(inode)->i_hash_fat);
499 EXFAT_I(inode)->i_pos = 0;
503 struct inode *exfat_iget(struct super_block *sb, loff_t i_pos)
508 struct inode *inode = NULL;
516 inode = igrab(&info->vfs_inode);
517 if (inode)
521 return inode;
524 /* doesn't deal with root inode */
525 static int exfat_fill_inode(struct inode *inode, struct exfat_dir_entry *info)
527 struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb);
528 struct exfat_inode_info *ei = EXFAT_I(inode);
545 inode->i_uid = sbi->options.fs_uid;
546 inode->i_gid = sbi->options.fs_gid;
547 inode_inc_iversion(inode);
548 inode->i_generation = get_random_u32();
551 inode->i_generation &= ~1;
552 inode->i_mode = exfat_make_mode(sbi, info->attr, 0777);
553 inode->i_op = &exfat_dir_inode_operations;
554 inode->i_fop = &exfat_dir_operations;
555 set_nlink(inode, info->num_subdirs);
557 inode->i_generation |= 1;
558 inode->i_mode = exfat_make_mode(sbi, info->attr, 0777);
559 inode->i_op = &exfat_file_inode_operations;
560 inode->i_fop = &exfat_file_operations;
561 inode->i_mapping->a_ops = &exfat_aops;
562 inode->i_mapping->nrpages = 0;
565 i_size_write(inode, size);
568 if (size & (inode->i_sb->s_blocksize - 1)) {
569 size |= (inode->i_sb->s_blocksize - 1);
576 exfat_save_attr(inode, info->attr);
578 inode->i_blocks = round_up(i_size_read(inode), sbi->cluster_size) >> 9;
579 inode->i_mtime = info->mtime;
580 inode_set_ctime_to_ts(inode, info->mtime);
582 inode->i_atime = info->atime;
587 struct inode *exfat_build_inode(struct super_block *sb,
590 struct inode *inode;
593 inode = exfat_iget(sb, i_pos);
594 if (inode)
596 inode = new_inode(sb);
597 if (!inode) {
598 inode = ERR_PTR(-ENOMEM);
601 inode->i_ino = iunique(sb, EXFAT_ROOT_INO);
602 inode_set_iversion(inode, 1);
603 err = exfat_fill_inode(inode, info);
605 iput(inode);
606 inode = ERR_PTR(err);
609 exfat_hash_inode(inode, i_pos);
610 insert_inode_hash(inode);
612 return inode;
615 void exfat_evict_inode(struct inode *inode)
617 truncate_inode_pages(&inode->i_data, 0);
619 if (!inode->i_nlink) {
620 i_size_write(inode, 0);
621 mutex_lock(&EXFAT_SB(inode->i_sb)->s_lock);
622 __exfat_truncate(inode);
623 mutex_unlock(&EXFAT_SB(inode->i_sb)->s_lock);
626 invalidate_inode_buffers(inode);
627 clear_inode(inode);
628 exfat_cache_inval_inode(inode);
629 exfat_unhash_inode(inode);