Lines Matching refs:inode

20 static 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)
51 ep->dentry.file.attr = cpu_to_le16(exfat_make_attr(inode));
59 exfat_set_entry_time(sbi, &inode->i_mtime,
64 exfat_set_entry_time(sbi, &inode->i_atime,
71 on_disk_size = i_size_read(inode);
83 int exfat_write_inode(struct inode *inode, struct writeback_control *wbc)
87 mutex_lock(&EXFAT_SB(inode->i_sb)->s_lock);
88 ret = __exfat_write_inode(inode, wbc->sync_mode == WB_SYNC_ALL);
89 mutex_unlock(&EXFAT_SB(inode->i_sb)->s_lock);
94 void exfat_sync_inode(struct inode *inode)
96 lockdep_assert_held(&EXFAT_SB(inode->i_sb)->s_lock);
97 __exfat_write_inode(inode, 1);
101 * Input: inode, (logical) clu_offset, target allocation area
105 static int exfat_map_cluster(struct inode *inode, unsigned int clu_offset,
111 struct super_block *sb = inode->i_sb;
113 struct exfat_inode_info *ei = EXFAT_I(inode);
142 int err = exfat_get_cluster(inode, clu_offset,
181 ret = exfat_alloc_cluster(inode, num_to_be_allocated, &new_clu);
235 cpu_to_le64(i_size_read(inode));
240 err = exfat_free_dentry_set(es, inode_needs_sync(inode));
245 inode->i_blocks += EXFAT_CLU_TO_B(num_to_be_allocated, sbi) >> 9;
288 static int exfat_get_block(struct inode *inode, sector_t iblock,
291 struct exfat_inode_info *ei = EXFAT_I(inode);
292 struct super_block *sb = inode->i_sb;
294 unsigned long max_blocks = bh_result->b_size >> inode->i_blkbits;
303 last_block = EXFAT_B_TO_BLK_ROUND_UP(i_size_read(inode), sb);
308 err = exfat_map_cluster(inode, iblock >> sbi->sect_per_clus_bits,
313 "failed to bmap (inode : %p iblock : %llu, err : %d)",
314 inode, (unsigned long long)iblock, err);
381 struct inode *inode = mapping->host;
383 if (to > i_size_read(inode)) {
384 truncate_pagecache(inode, i_size_read(inode));
385 exfat_truncate(inode, EXFAT_I(inode)->i_size_aligned);
410 struct inode *inode = mapping->host;
411 struct exfat_inode_info *ei = EXFAT_I(inode);
416 if (ei->i_size_aligned < i_size_read(inode)) {
417 exfat_fs_error(inode->i_sb,
419 i_size_read(inode), ei->i_size_aligned);
427 inode->i_mtime = inode->i_ctime = current_time(inode);
429 mark_inode_dirty(inode);
438 struct inode *inode = mapping->host;
453 if (EXFAT_I(inode)->i_size_aligned < size)
461 ret = blockdev_direct_IO(iocb, inode, iter, exfat_get_block);
485 int exfat_block_truncate_page(struct inode *inode, loff_t from)
487 return block_truncate_page(inode->i_mapping, from, exfat_get_block);
506 void exfat_hash_inode(struct inode *inode, loff_t i_pos)
508 struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb);
512 EXFAT_I(inode)->i_pos = i_pos;
513 hlist_add_head(&EXFAT_I(inode)->i_hash_fat, head);
517 void exfat_unhash_inode(struct inode *inode)
519 struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb);
522 hlist_del_init(&EXFAT_I(inode)->i_hash_fat);
523 EXFAT_I(inode)->i_pos = 0;
527 struct inode *exfat_iget(struct super_block *sb, loff_t i_pos)
532 struct inode *inode = NULL;
540 inode = igrab(&info->vfs_inode);
541 if (inode)
545 return inode;
548 /* doesn't deal with root inode */
549 static int exfat_fill_inode(struct inode *inode, struct exfat_dir_entry *info)
551 struct exfat_sb_info *sbi = EXFAT_SB(inode->i_sb);
552 struct exfat_inode_info *ei = EXFAT_I(inode);
569 inode->i_uid = sbi->options.fs_uid;
570 inode->i_gid = sbi->options.fs_gid;
571 inode_inc_iversion(inode);
572 inode->i_generation = prandom_u32();
575 inode->i_generation &= ~1;
576 inode->i_mode = exfat_make_mode(sbi, info->attr, 0777);
577 inode->i_op = &exfat_dir_inode_operations;
578 inode->i_fop = &exfat_dir_operations;
579 set_nlink(inode, info->num_subdirs);
581 inode->i_generation |= 1;
582 inode->i_mode = exfat_make_mode(sbi, info->attr, 0777);
583 inode->i_op = &exfat_file_inode_operations;
584 inode->i_fop = &exfat_file_operations;
585 inode->i_mapping->a_ops = &exfat_aops;
586 inode->i_mapping->nrpages = 0;
589 i_size_write(inode, size);
592 if (size & (inode->i_sb->s_blocksize - 1)) {
593 size |= (inode->i_sb->s_blocksize - 1);
600 exfat_save_attr(inode, info->attr);
602 inode->i_blocks = round_up(i_size_read(inode), sbi->cluster_size) >> 9;
603 inode->i_mtime = info->mtime;
604 inode->i_ctime = info->mtime;
606 inode->i_atime = info->atime;
611 struct inode *exfat_build_inode(struct super_block *sb,
614 struct inode *inode;
617 inode = exfat_iget(sb, i_pos);
618 if (inode)
620 inode = new_inode(sb);
621 if (!inode) {
622 inode = ERR_PTR(-ENOMEM);
625 inode->i_ino = iunique(sb, EXFAT_ROOT_INO);
626 inode_set_iversion(inode, 1);
627 err = exfat_fill_inode(inode, info);
629 iput(inode);
630 inode = ERR_PTR(err);
633 exfat_hash_inode(inode, i_pos);
634 insert_inode_hash(inode);
636 return inode;
639 void exfat_evict_inode(struct inode *inode)
641 truncate_inode_pages(&inode->i_data, 0);
643 if (!inode->i_nlink) {
644 i_size_write(inode, 0);
645 mutex_lock(&EXFAT_SB(inode->i_sb)->s_lock);
646 __exfat_truncate(inode, 0);
647 mutex_unlock(&EXFAT_SB(inode->i_sb)->s_lock);
650 invalidate_inode_buffers(inode);
651 clear_inode(inode);
652 exfat_cache_inval_inode(inode);
653 exfat_unhash_inode(inode);