Lines Matching refs:inode

96 static int fat_add_cluster(struct inode *inode)  in fat_add_cluster()  argument
100 err = fat_alloc_clusters(inode, &cluster, 1); in fat_add_cluster()
105 err = fat_chain_add(inode, cluster, 1); in fat_add_cluster()
107 fat_free_clusters(inode, cluster); in fat_add_cluster()
111 static inline int __fat_get_block(struct inode *inode, sector_t iblock, in __fat_get_block() argument
115 struct super_block *sb = inode->i_sb; in __fat_get_block()
121 err = fat_bmap(inode, iblock, &phys, &mapped_blocks, create); in __fat_get_block()
132 if (iblock != MSDOS_I(inode)->mmu_private >> sb->s_blocksize_bits) { in __fat_get_block()
134 MSDOS_I(inode)->i_pos, MSDOS_I(inode)->mmu_private); in __fat_get_block()
141 err = fat_add_cluster(inode); in __fat_get_block()
149 MSDOS_I(inode)->mmu_private += *max_blocks << sb->s_blocksize_bits; in __fat_get_block()
151 err = fat_bmap(inode, iblock, &phys, &mapped_blocks, create); in __fat_get_block()
163 static int fat_get_block(struct inode *inode, sector_t iblock, in fat_get_block() argument
166 struct super_block *sb = inode->i_sb; in fat_get_block()
167 unsigned long max_blocks = bh_result->b_size >> inode->i_blkbits; in fat_get_block()
170 err = __fat_get_block(inode, iblock, &max_blocks, bh_result, create); in fat_get_block()
201 struct inode *inode = mapping->host; in fat_write_failed() local
203 if (to > inode->i_size) { in fat_write_failed()
204 truncate_pagecache(inode, inode->i_size); in fat_write_failed()
205 fat_truncate_blocks(inode, inode->i_size); in fat_write_failed()
228 struct inode *inode = mapping->host; in fat_write_end() local
233 if (!(err < 0) && !(MSDOS_I(inode)->i_attrs & ATTR_ARCH)) { in fat_write_end()
234 inode->i_mtime = inode->i_ctime = CURRENT_TIME_SEC; in fat_write_end()
235 MSDOS_I(inode)->i_attrs |= ATTR_ARCH; in fat_write_end()
236 mark_inode_dirty(inode); in fat_write_end()
246 struct inode *inode = mapping->host; in fat_direct_IO() local
261 if (MSDOS_I(inode)->mmu_private < size) in fat_direct_IO()
269 ret = blockdev_direct_IO(iocb, inode, iter, offset, fat_get_block); in fat_direct_IO()
295 int fat_block_truncate_page(struct inode *inode, loff_t from) in fat_block_truncate_page() argument
297 return block_truncate_page(inode->i_mapping, from, fat_get_block); in fat_block_truncate_page()
360 void fat_attach(struct inode *inode, loff_t i_pos) in fat_attach() argument
362 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); in fat_attach()
364 if (inode->i_ino != MSDOS_ROOT_INO) { in fat_attach()
369 MSDOS_I(inode)->i_pos = i_pos; in fat_attach()
370 hlist_add_head(&MSDOS_I(inode)->i_fat_hash, head); in fat_attach()
378 if (S_ISDIR(inode->i_mode) && sbi->options.nfs) { in fat_attach()
380 d_head += fat_dir_hash(MSDOS_I(inode)->i_logstart); in fat_attach()
383 hlist_add_head(&MSDOS_I(inode)->i_dir_hash, d_head); in fat_attach()
389 void fat_detach(struct inode *inode) in fat_detach() argument
391 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); in fat_detach()
393 MSDOS_I(inode)->i_pos = 0; in fat_detach()
394 hlist_del_init(&MSDOS_I(inode)->i_fat_hash); in fat_detach()
397 if (S_ISDIR(inode->i_mode) && sbi->options.nfs) { in fat_detach()
399 hlist_del_init(&MSDOS_I(inode)->i_dir_hash); in fat_detach()
405 struct inode *fat_iget(struct super_block *sb, loff_t i_pos) in fat_iget()
410 struct inode *inode = NULL; in fat_iget() local
417 inode = igrab(&i->vfs_inode); in fat_iget()
418 if (inode) in fat_iget()
422 return inode; in fat_iget()
435 static int fat_calc_dir_size(struct inode *inode) in fat_calc_dir_size() argument
437 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); in fat_calc_dir_size()
440 inode->i_size = 0; in fat_calc_dir_size()
441 if (MSDOS_I(inode)->i_start == 0) in fat_calc_dir_size()
444 ret = fat_get_cluster(inode, FAT_ENT_EOF, &fclus, &dclus); in fat_calc_dir_size()
447 inode->i_size = (fclus + 1) << sbi->cluster_bits; in fat_calc_dir_size()
453 int fat_fill_inode(struct inode *inode, struct msdos_dir_entry *de) in fat_fill_inode() argument
455 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); in fat_fill_inode()
458 MSDOS_I(inode)->i_pos = 0; in fat_fill_inode()
459 inode->i_uid = sbi->options.fs_uid; in fat_fill_inode()
460 inode->i_gid = sbi->options.fs_gid; in fat_fill_inode()
461 inode->i_version++; in fat_fill_inode()
462 inode->i_generation = get_seconds(); in fat_fill_inode()
465 inode->i_generation &= ~1; in fat_fill_inode()
466 inode->i_mode = fat_make_mode(sbi, de->attr, S_IRWXUGO); in fat_fill_inode()
467 inode->i_op = sbi->dir_ops; in fat_fill_inode()
468 inode->i_fop = &fat_dir_operations; in fat_fill_inode()
470 MSDOS_I(inode)->i_start = fat_get_start(sbi, de); in fat_fill_inode()
471 MSDOS_I(inode)->i_logstart = MSDOS_I(inode)->i_start; in fat_fill_inode()
472 error = fat_calc_dir_size(inode); in fat_fill_inode()
475 MSDOS_I(inode)->mmu_private = inode->i_size; in fat_fill_inode()
477 set_nlink(inode, fat_subdirs(inode)); in fat_fill_inode()
479 inode->i_generation |= 1; in fat_fill_inode()
480 inode->i_mode = fat_make_mode(sbi, de->attr, in fat_fill_inode()
483 MSDOS_I(inode)->i_start = fat_get_start(sbi, de); in fat_fill_inode()
485 MSDOS_I(inode)->i_logstart = MSDOS_I(inode)->i_start; in fat_fill_inode()
486 inode->i_size = le32_to_cpu(de->size); in fat_fill_inode()
487 inode->i_op = &fat_file_inode_operations; in fat_fill_inode()
488 inode->i_fop = &fat_file_operations; in fat_fill_inode()
489 inode->i_mapping->a_ops = &fat_aops; in fat_fill_inode()
490 MSDOS_I(inode)->mmu_private = inode->i_size; in fat_fill_inode()
494 inode->i_flags |= S_IMMUTABLE; in fat_fill_inode()
496 fat_save_attrs(inode, de->attr); in fat_fill_inode()
498 inode->i_blocks = ((inode->i_size + (sbi->cluster_size - 1)) in fat_fill_inode()
501 fat_time_fat2unix(sbi, &inode->i_mtime, de->time, de->date, 0); in fat_fill_inode()
503 fat_time_fat2unix(sbi, &inode->i_ctime, de->ctime, in fat_fill_inode()
505 fat_time_fat2unix(sbi, &inode->i_atime, 0, de->adate, 0); in fat_fill_inode()
507 inode->i_ctime = inode->i_atime = inode->i_mtime; in fat_fill_inode()
524 struct inode *fat_build_inode(struct super_block *sb, in fat_build_inode()
527 struct inode *inode; in fat_build_inode() local
531 inode = fat_iget(sb, i_pos); in fat_build_inode()
532 if (inode) in fat_build_inode()
534 inode = new_inode(sb); in fat_build_inode()
535 if (!inode) { in fat_build_inode()
536 inode = ERR_PTR(-ENOMEM); in fat_build_inode()
539 inode->i_ino = iunique(sb, MSDOS_ROOT_INO); in fat_build_inode()
540 inode->i_version = 1; in fat_build_inode()
541 err = fat_fill_inode(inode, de); in fat_build_inode()
543 iput(inode); in fat_build_inode()
544 inode = ERR_PTR(err); in fat_build_inode()
547 fat_attach(inode, i_pos); in fat_build_inode()
548 insert_inode_hash(inode); in fat_build_inode()
551 return inode; in fat_build_inode()
556 static void fat_evict_inode(struct inode *inode) in fat_evict_inode() argument
558 truncate_inode_pages_final(&inode->i_data); in fat_evict_inode()
559 if (!inode->i_nlink) { in fat_evict_inode()
560 inode->i_size = 0; in fat_evict_inode()
561 fat_truncate_blocks(inode, 0); in fat_evict_inode()
563 invalidate_inode_buffers(inode); in fat_evict_inode()
564 clear_inode(inode); in fat_evict_inode()
565 fat_cache_inval_inode(inode); in fat_evict_inode()
566 fat_detach(inode); in fat_evict_inode()
640 static struct inode *fat_alloc_inode(struct super_block *sb) in fat_alloc_inode()
653 struct inode *inode = container_of(head, struct inode, i_rcu); in fat_i_callback() local
654 kmem_cache_free(fat_inode_cachep, MSDOS_I(inode)); in fat_i_callback()
657 static void fat_destroy_inode(struct inode *inode) in fat_destroy_inode() argument
659 call_rcu(&inode->i_rcu, fat_i_callback); in fat_destroy_inode()
742 static int __fat_write_inode(struct inode *inode, int wait) in __fat_write_inode() argument
744 struct super_block *sb = inode->i_sb; in __fat_write_inode()
752 if (inode->i_ino == MSDOS_ROOT_INO) in __fat_write_inode()
756 i_pos = fat_i_pos_read(sbi, inode); in __fat_write_inode()
768 if (i_pos != MSDOS_I(inode)->i_pos) { in __fat_write_inode()
775 if (S_ISDIR(inode->i_mode)) in __fat_write_inode()
778 raw_entry->size = cpu_to_le32(inode->i_size); in __fat_write_inode()
779 raw_entry->attr = fat_make_attrs(inode); in __fat_write_inode()
780 fat_set_start(raw_entry, MSDOS_I(inode)->i_logstart); in __fat_write_inode()
781 fat_time_unix2fat(sbi, &inode->i_mtime, &raw_entry->time, in __fat_write_inode()
785 fat_time_unix2fat(sbi, &inode->i_ctime, &raw_entry->ctime, in __fat_write_inode()
787 fat_time_unix2fat(sbi, &inode->i_atime, &atime, in __fat_write_inode()
799 static int fat_write_inode(struct inode *inode, struct writeback_control *wbc) in fat_write_inode() argument
803 if (inode->i_ino == MSDOS_FSINFO_INO) { in fat_write_inode()
804 struct super_block *sb = inode->i_sb; in fat_write_inode()
810 err = __fat_write_inode(inode, wbc->sync_mode == WB_SYNC_ALL); in fat_write_inode()
815 int fat_sync_inode(struct inode *inode) in fat_sync_inode() argument
817 return __fat_write_inode(inode, 1); in fat_sync_inode()
1272 static int fat_read_root(struct inode *inode) in fat_read_root() argument
1274 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); in fat_read_root()
1277 MSDOS_I(inode)->i_pos = MSDOS_ROOT_INO; in fat_read_root()
1278 inode->i_uid = sbi->options.fs_uid; in fat_read_root()
1279 inode->i_gid = sbi->options.fs_gid; in fat_read_root()
1280 inode->i_version++; in fat_read_root()
1281 inode->i_generation = 0; in fat_read_root()
1282 inode->i_mode = fat_make_mode(sbi, ATTR_DIR, S_IRWXUGO); in fat_read_root()
1283 inode->i_op = sbi->dir_ops; in fat_read_root()
1284 inode->i_fop = &fat_dir_operations; in fat_read_root()
1286 MSDOS_I(inode)->i_start = sbi->root_cluster; in fat_read_root()
1287 error = fat_calc_dir_size(inode); in fat_read_root()
1291 MSDOS_I(inode)->i_start = 0; in fat_read_root()
1292 inode->i_size = sbi->dir_entries * sizeof(struct msdos_dir_entry); in fat_read_root()
1294 inode->i_blocks = ((inode->i_size + (sbi->cluster_size - 1)) in fat_read_root()
1296 MSDOS_I(inode)->i_logstart = 0; in fat_read_root()
1297 MSDOS_I(inode)->mmu_private = inode->i_size; in fat_read_root()
1299 fat_save_attrs(inode, ATTR_DIR); in fat_read_root()
1300 inode->i_mtime.tv_sec = inode->i_atime.tv_sec = inode->i_ctime.tv_sec = 0; in fat_read_root()
1301 inode->i_mtime.tv_nsec = inode->i_atime.tv_nsec = inode->i_ctime.tv_nsec = 0; in fat_read_root()
1302 set_nlink(inode, fat_subdirs(inode)+2); in fat_read_root()
1489 struct inode *root_inode = NULL, *fat_inode = NULL; in fat_fill_super()
1490 struct inode *fsinfo_inode = NULL; in fat_fill_super()
1783 static int writeback_inode(struct inode *inode) in writeback_inode() argument
1792 ret = sync_inode_metadata(inode, 0); in writeback_inode()
1794 ret = filemap_fdatawrite(inode->i_mapping); in writeback_inode()
1806 int fat_flush_inodes(struct super_block *sb, struct inode *i1, struct inode *i2) in fat_flush_inodes()