Lines Matching refs:inode

95 static int fat_add_cluster(struct inode *inode)  in fat_add_cluster()  argument
99 err = fat_alloc_clusters(inode, &cluster, 1); in fat_add_cluster()
104 err = fat_chain_add(inode, cluster, 1); in fat_add_cluster()
106 fat_free_clusters(inode, cluster); in fat_add_cluster()
110 static inline int __fat_get_block(struct inode *inode, sector_t iblock, in __fat_get_block() argument
114 struct super_block *sb = inode->i_sb; in __fat_get_block()
120 err = fat_bmap(inode, iblock, &phys, &mapped_blocks, create); in __fat_get_block()
131 if (iblock != MSDOS_I(inode)->mmu_private >> sb->s_blocksize_bits) { in __fat_get_block()
133 MSDOS_I(inode)->i_pos, MSDOS_I(inode)->mmu_private); in __fat_get_block()
140 err = fat_add_cluster(inode); in __fat_get_block()
148 MSDOS_I(inode)->mmu_private += *max_blocks << sb->s_blocksize_bits; in __fat_get_block()
150 err = fat_bmap(inode, iblock, &phys, &mapped_blocks, create); in __fat_get_block()
162 static int fat_get_block(struct inode *inode, sector_t iblock, in fat_get_block() argument
165 struct super_block *sb = inode->i_sb; in fat_get_block()
166 unsigned long max_blocks = bh_result->b_size >> inode->i_blkbits; in fat_get_block()
169 err = __fat_get_block(inode, iblock, &max_blocks, bh_result, create); in fat_get_block()
200 struct inode *inode = mapping->host; in fat_write_failed() local
202 if (to > inode->i_size) { in fat_write_failed()
203 truncate_pagecache(inode, inode->i_size); in fat_write_failed()
204 fat_truncate_blocks(inode, inode->i_size); in fat_write_failed()
227 struct inode *inode = mapping->host; in fat_write_end() local
232 if (!(err < 0) && !(MSDOS_I(inode)->i_attrs & ATTR_ARCH)) { in fat_write_end()
233 inode->i_mtime = inode->i_ctime = CURRENT_TIME_SEC; in fat_write_end()
234 MSDOS_I(inode)->i_attrs |= ATTR_ARCH; in fat_write_end()
235 mark_inode_dirty(inode); in fat_write_end()
245 struct inode *inode = mapping->host; in fat_direct_IO() local
260 if (MSDOS_I(inode)->mmu_private < size) in fat_direct_IO()
268 ret = blockdev_direct_IO(iocb, inode, iter, offset, fat_get_block); in fat_direct_IO()
294 int fat_block_truncate_page(struct inode *inode, loff_t from) in fat_block_truncate_page() argument
296 return block_truncate_page(inode->i_mapping, from, fat_get_block); in fat_block_truncate_page()
359 void fat_attach(struct inode *inode, loff_t i_pos) in fat_attach() argument
361 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); in fat_attach()
363 if (inode->i_ino != MSDOS_ROOT_INO) { in fat_attach()
368 MSDOS_I(inode)->i_pos = i_pos; in fat_attach()
369 hlist_add_head(&MSDOS_I(inode)->i_fat_hash, head); in fat_attach()
377 if (S_ISDIR(inode->i_mode) && sbi->options.nfs) { in fat_attach()
379 d_head += fat_dir_hash(MSDOS_I(inode)->i_logstart); in fat_attach()
382 hlist_add_head(&MSDOS_I(inode)->i_dir_hash, d_head); in fat_attach()
388 void fat_detach(struct inode *inode) in fat_detach() argument
390 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); in fat_detach()
392 MSDOS_I(inode)->i_pos = 0; in fat_detach()
393 hlist_del_init(&MSDOS_I(inode)->i_fat_hash); in fat_detach()
396 if (S_ISDIR(inode->i_mode) && sbi->options.nfs) { in fat_detach()
398 hlist_del_init(&MSDOS_I(inode)->i_dir_hash); in fat_detach()
404 struct inode *fat_iget(struct super_block *sb, loff_t i_pos) in fat_iget()
409 struct inode *inode = NULL; in fat_iget() local
416 inode = igrab(&i->vfs_inode); in fat_iget()
417 if (inode) in fat_iget()
421 return inode; in fat_iget()
434 static int fat_calc_dir_size(struct inode *inode) in fat_calc_dir_size() argument
436 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); in fat_calc_dir_size()
439 inode->i_size = 0; in fat_calc_dir_size()
440 if (MSDOS_I(inode)->i_start == 0) in fat_calc_dir_size()
443 ret = fat_get_cluster(inode, FAT_ENT_EOF, &fclus, &dclus); in fat_calc_dir_size()
446 inode->i_size = (fclus + 1) << sbi->cluster_bits; in fat_calc_dir_size()
452 int fat_fill_inode(struct inode *inode, struct msdos_dir_entry *de) in fat_fill_inode() argument
454 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); in fat_fill_inode()
457 MSDOS_I(inode)->i_pos = 0; in fat_fill_inode()
458 inode->i_uid = sbi->options.fs_uid; in fat_fill_inode()
459 inode->i_gid = sbi->options.fs_gid; in fat_fill_inode()
460 inode->i_version++; in fat_fill_inode()
461 inode->i_generation = get_seconds(); in fat_fill_inode()
464 inode->i_generation &= ~1; in fat_fill_inode()
465 inode->i_mode = fat_make_mode(sbi, de->attr, S_IRWXUGO); in fat_fill_inode()
466 inode->i_op = sbi->dir_ops; in fat_fill_inode()
467 inode->i_fop = &fat_dir_operations; in fat_fill_inode()
469 MSDOS_I(inode)->i_start = fat_get_start(sbi, de); in fat_fill_inode()
470 MSDOS_I(inode)->i_logstart = MSDOS_I(inode)->i_start; in fat_fill_inode()
471 error = fat_calc_dir_size(inode); in fat_fill_inode()
474 MSDOS_I(inode)->mmu_private = inode->i_size; in fat_fill_inode()
476 set_nlink(inode, fat_subdirs(inode)); in fat_fill_inode()
478 inode->i_generation |= 1; in fat_fill_inode()
479 inode->i_mode = fat_make_mode(sbi, de->attr, in fat_fill_inode()
482 MSDOS_I(inode)->i_start = fat_get_start(sbi, de); in fat_fill_inode()
484 MSDOS_I(inode)->i_logstart = MSDOS_I(inode)->i_start; in fat_fill_inode()
485 inode->i_size = le32_to_cpu(de->size); in fat_fill_inode()
486 inode->i_op = &fat_file_inode_operations; in fat_fill_inode()
487 inode->i_fop = &fat_file_operations; in fat_fill_inode()
488 inode->i_mapping->a_ops = &fat_aops; in fat_fill_inode()
489 MSDOS_I(inode)->mmu_private = inode->i_size; in fat_fill_inode()
493 inode->i_flags |= S_IMMUTABLE; in fat_fill_inode()
495 fat_save_attrs(inode, de->attr); in fat_fill_inode()
497 inode->i_blocks = ((inode->i_size + (sbi->cluster_size - 1)) in fat_fill_inode()
500 fat_time_fat2unix(sbi, &inode->i_mtime, de->time, de->date, 0); in fat_fill_inode()
502 fat_time_fat2unix(sbi, &inode->i_ctime, de->ctime, in fat_fill_inode()
504 fat_time_fat2unix(sbi, &inode->i_atime, 0, de->adate, 0); in fat_fill_inode()
506 inode->i_ctime = inode->i_atime = inode->i_mtime; in fat_fill_inode()
523 struct inode *fat_build_inode(struct super_block *sb, in fat_build_inode()
526 struct inode *inode; in fat_build_inode() local
530 inode = fat_iget(sb, i_pos); in fat_build_inode()
531 if (inode) in fat_build_inode()
533 inode = new_inode(sb); in fat_build_inode()
534 if (!inode) { in fat_build_inode()
535 inode = ERR_PTR(-ENOMEM); in fat_build_inode()
538 inode->i_ino = iunique(sb, MSDOS_ROOT_INO); in fat_build_inode()
539 inode->i_version = 1; in fat_build_inode()
540 err = fat_fill_inode(inode, de); in fat_build_inode()
542 iput(inode); in fat_build_inode()
543 inode = ERR_PTR(err); in fat_build_inode()
546 fat_attach(inode, i_pos); in fat_build_inode()
547 insert_inode_hash(inode); in fat_build_inode()
550 return inode; in fat_build_inode()
555 static void fat_evict_inode(struct inode *inode) in fat_evict_inode() argument
557 truncate_inode_pages_final(&inode->i_data); in fat_evict_inode()
558 if (!inode->i_nlink) { in fat_evict_inode()
559 inode->i_size = 0; in fat_evict_inode()
560 fat_truncate_blocks(inode, 0); in fat_evict_inode()
562 invalidate_inode_buffers(inode); in fat_evict_inode()
563 clear_inode(inode); in fat_evict_inode()
564 fat_cache_inval_inode(inode); in fat_evict_inode()
565 fat_detach(inode); in fat_evict_inode()
639 static struct inode *fat_alloc_inode(struct super_block *sb) in fat_alloc_inode()
652 struct inode *inode = container_of(head, struct inode, i_rcu); in fat_i_callback() local
653 kmem_cache_free(fat_inode_cachep, MSDOS_I(inode)); in fat_i_callback()
656 static void fat_destroy_inode(struct inode *inode) in fat_destroy_inode() argument
658 call_rcu(&inode->i_rcu, fat_i_callback); in fat_destroy_inode()
741 static int __fat_write_inode(struct inode *inode, int wait) in __fat_write_inode() argument
743 struct super_block *sb = inode->i_sb; in __fat_write_inode()
751 if (inode->i_ino == MSDOS_ROOT_INO) in __fat_write_inode()
755 i_pos = fat_i_pos_read(sbi, inode); in __fat_write_inode()
767 if (i_pos != MSDOS_I(inode)->i_pos) { in __fat_write_inode()
774 if (S_ISDIR(inode->i_mode)) in __fat_write_inode()
777 raw_entry->size = cpu_to_le32(inode->i_size); in __fat_write_inode()
778 raw_entry->attr = fat_make_attrs(inode); in __fat_write_inode()
779 fat_set_start(raw_entry, MSDOS_I(inode)->i_logstart); in __fat_write_inode()
780 fat_time_unix2fat(sbi, &inode->i_mtime, &raw_entry->time, in __fat_write_inode()
784 fat_time_unix2fat(sbi, &inode->i_ctime, &raw_entry->ctime, in __fat_write_inode()
786 fat_time_unix2fat(sbi, &inode->i_atime, &atime, in __fat_write_inode()
798 static int fat_write_inode(struct inode *inode, struct writeback_control *wbc) in fat_write_inode() argument
802 if (inode->i_ino == MSDOS_FSINFO_INO) { in fat_write_inode()
803 struct super_block *sb = inode->i_sb; in fat_write_inode()
809 err = __fat_write_inode(inode, wbc->sync_mode == WB_SYNC_ALL); in fat_write_inode()
814 int fat_sync_inode(struct inode *inode) in fat_sync_inode() argument
816 return __fat_write_inode(inode, 1); in fat_sync_inode()
1271 static int fat_read_root(struct inode *inode) in fat_read_root() argument
1273 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); in fat_read_root()
1276 MSDOS_I(inode)->i_pos = MSDOS_ROOT_INO; in fat_read_root()
1277 inode->i_uid = sbi->options.fs_uid; in fat_read_root()
1278 inode->i_gid = sbi->options.fs_gid; in fat_read_root()
1279 inode->i_version++; in fat_read_root()
1280 inode->i_generation = 0; in fat_read_root()
1281 inode->i_mode = fat_make_mode(sbi, ATTR_DIR, S_IRWXUGO); in fat_read_root()
1282 inode->i_op = sbi->dir_ops; in fat_read_root()
1283 inode->i_fop = &fat_dir_operations; in fat_read_root()
1285 MSDOS_I(inode)->i_start = sbi->root_cluster; in fat_read_root()
1286 error = fat_calc_dir_size(inode); in fat_read_root()
1290 MSDOS_I(inode)->i_start = 0; in fat_read_root()
1291 inode->i_size = sbi->dir_entries * sizeof(struct msdos_dir_entry); in fat_read_root()
1293 inode->i_blocks = ((inode->i_size + (sbi->cluster_size - 1)) in fat_read_root()
1295 MSDOS_I(inode)->i_logstart = 0; in fat_read_root()
1296 MSDOS_I(inode)->mmu_private = inode->i_size; in fat_read_root()
1298 fat_save_attrs(inode, ATTR_DIR); in fat_read_root()
1299 inode->i_mtime.tv_sec = inode->i_atime.tv_sec = inode->i_ctime.tv_sec = 0; in fat_read_root()
1300 inode->i_mtime.tv_nsec = inode->i_atime.tv_nsec = inode->i_ctime.tv_nsec = 0; in fat_read_root()
1301 set_nlink(inode, fat_subdirs(inode)+2); in fat_read_root()
1488 struct inode *root_inode = NULL, *fat_inode = NULL; in fat_fill_super()
1489 struct inode *fsinfo_inode = NULL; in fat_fill_super()
1782 static int writeback_inode(struct inode *inode) in writeback_inode() argument
1791 ret = sync_inode_metadata(inode, 0); in writeback_inode()
1793 ret = filemap_fdatawrite(inode->i_mapping); in writeback_inode()
1805 int fat_flush_inodes(struct super_block *sb, struct inode *i1, struct inode *i2) in fat_flush_inodes()