Lines Matching defs:inode
3 * linux/fs/fat/inode.c
104 int fat_add_cluster(struct inode *inode)
108 err = fat_alloc_clusters(inode, &cluster, 1);
113 err = fat_chain_add(inode, cluster, 1);
115 fat_free_clusters(inode, cluster);
119 static inline int __fat_get_block(struct inode *inode, sector_t iblock,
123 struct super_block *sb = inode->i_sb;
129 err = fat_bmap(inode, iblock, &phys, &mapped_blocks, create, false);
140 if (iblock != MSDOS_I(inode)->mmu_private >> sb->s_blocksize_bits) {
142 MSDOS_I(inode)->i_pos, MSDOS_I(inode)->mmu_private);
146 last_block = inode->i_blocks >> (sb->s_blocksize_bits - 9);
155 err = fat_add_cluster(inode);
163 MSDOS_I(inode)->mmu_private += *max_blocks << sb->s_blocksize_bits;
165 err = fat_bmap(inode, iblock, &phys, &mapped_blocks, create, false);
171 MSDOS_I(inode)->i_pos,
183 static int fat_get_block(struct inode *inode, sector_t iblock,
186 struct super_block *sb = inode->i_sb;
187 unsigned long max_blocks = bh_result->b_size >> inode->i_blkbits;
190 err = __fat_get_block(inode, iblock, &max_blocks, bh_result, create);
215 struct inode *inode = mapping->host;
217 if (to > inode->i_size) {
218 truncate_pagecache(inode, inode->i_size);
219 fat_truncate_blocks(inode, inode->i_size);
242 struct inode *inode = mapping->host;
247 if (!(err < 0) && !(MSDOS_I(inode)->i_attrs & ATTR_ARCH)) {
248 fat_truncate_time(inode, NULL, S_CTIME|S_MTIME);
249 MSDOS_I(inode)->i_attrs |= ATTR_ARCH;
250 mark_inode_dirty(inode);
259 struct inode *inode = mapping->host;
275 if (MSDOS_I(inode)->mmu_private < size)
283 ret = blockdev_direct_IO(iocb, inode, iter, fat_get_block);
290 static int fat_get_block_bmap(struct inode *inode, sector_t iblock,
293 struct super_block *sb = inode->i_sb;
294 unsigned long max_blocks = bh_result->b_size >> inode->i_blkbits;
301 err = fat_bmap(inode, iblock, &bmap, &mapped_blocks, create, true);
334 int fat_block_truncate_page(struct inode *inode, loff_t from)
336 return block_truncate_page(inode->i_mapping, from, fat_get_block);
353 * New FAT inode stuff. We do the following:
357 * d) inode has an associated directory entry, all right, but
359 * e) currently entries are stored within struct inode. That should
401 void fat_attach(struct inode *inode, loff_t i_pos)
403 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb);
405 if (inode->i_ino != MSDOS_ROOT_INO) {
410 MSDOS_I(inode)->i_pos = i_pos;
411 hlist_add_head(&MSDOS_I(inode)->i_fat_hash, head);
416 * to directory inode. This is used during reconnection of
419 if (S_ISDIR(inode->i_mode) && sbi->options.nfs) {
421 d_head += fat_dir_hash(MSDOS_I(inode)->i_logstart);
424 hlist_add_head(&MSDOS_I(inode)->i_dir_hash, d_head);
430 void fat_detach(struct inode *inode)
432 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb);
434 MSDOS_I(inode)->i_pos = 0;
435 hlist_del_init(&MSDOS_I(inode)->i_fat_hash);
438 if (S_ISDIR(inode->i_mode) && sbi->options.nfs) {
440 hlist_del_init(&MSDOS_I(inode)->i_dir_hash);
446 struct inode *fat_iget(struct super_block *sb, loff_t i_pos)
451 struct inode *inode = NULL;
458 inode = igrab(&i->vfs_inode);
459 if (inode)
463 return inode;
476 static int fat_calc_dir_size(struct inode *inode)
478 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb);
481 inode->i_size = 0;
482 if (MSDOS_I(inode)->i_start == 0)
485 ret = fat_get_cluster(inode, FAT_ENT_EOF, &fclus, &dclus);
488 inode->i_size = (fclus + 1) << sbi->cluster_bits;
493 static int fat_validate_dir(struct inode *dir)
511 /* doesn't deal with root inode */
512 int fat_fill_inode(struct inode *inode, struct msdos_dir_entry *de)
514 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb);
517 MSDOS_I(inode)->i_pos = 0;
518 inode->i_uid = sbi->options.fs_uid;
519 inode->i_gid = sbi->options.fs_gid;
520 inode_inc_iversion(inode);
521 inode->i_generation = get_random_u32();
524 inode->i_generation &= ~1;
525 inode->i_mode = fat_make_mode(sbi, de->attr, S_IRWXUGO);
526 inode->i_op = sbi->dir_ops;
527 inode->i_fop = &fat_dir_operations;
529 MSDOS_I(inode)->i_start = fat_get_start(sbi, de);
530 MSDOS_I(inode)->i_logstart = MSDOS_I(inode)->i_start;
531 error = fat_calc_dir_size(inode);
534 MSDOS_I(inode)->mmu_private = inode->i_size;
536 set_nlink(inode, fat_subdirs(inode));
538 error = fat_validate_dir(inode);
542 inode->i_generation |= 1;
543 inode->i_mode = fat_make_mode(sbi, de->attr,
546 MSDOS_I(inode)->i_start = fat_get_start(sbi, de);
548 MSDOS_I(inode)->i_logstart = MSDOS_I(inode)->i_start;
549 inode->i_size = le32_to_cpu(de->size);
550 inode->i_op = &fat_file_inode_operations;
551 inode->i_fop = &fat_file_operations;
552 inode->i_mapping->a_ops = &fat_aops;
553 MSDOS_I(inode)->mmu_private = inode->i_size;
557 inode->i_flags |= S_IMMUTABLE;
559 fat_save_attrs(inode, de->attr);
561 inode->i_blocks = ((inode->i_size + (sbi->cluster_size - 1))
564 fat_time_fat2unix(sbi, &inode->i_mtime, de->time, de->date, 0);
565 inode_set_ctime_to_ts(inode, inode->i_mtime);
567 fat_time_fat2unix(sbi, &inode->i_atime, 0, de->adate, 0);
568 fat_time_fat2unix(sbi, &MSDOS_I(inode)->i_crtime, de->ctime,
571 inode->i_atime = fat_truncate_atime(sbi, &inode->i_mtime);
588 struct inode *fat_build_inode(struct super_block *sb,
591 struct inode *inode;
595 inode = fat_iget(sb, i_pos);
596 if (inode)
598 inode = new_inode(sb);
599 if (!inode) {
600 inode = ERR_PTR(-ENOMEM);
603 inode->i_ino = iunique(sb, MSDOS_ROOT_INO);
604 inode_set_iversion(inode, 1);
605 err = fat_fill_inode(inode, de);
607 iput(inode);
608 inode = ERR_PTR(err);
611 fat_attach(inode, i_pos);
612 insert_inode_hash(inode);
615 return inode;
620 static int __fat_write_inode(struct inode *inode, int wait);
622 static void fat_free_eofblocks(struct inode *inode)
624 /* Release unwritten fallocated blocks on inode eviction. */
625 if ((inode->i_blocks << 9) >
626 round_up(MSDOS_I(inode)->mmu_private,
627 MSDOS_SB(inode->i_sb)->cluster_size)) {
630 fat_truncate_blocks(inode, MSDOS_I(inode)->mmu_private);
637 err = __fat_write_inode(inode, inode_needs_sync(inode));
639 fat_msg(inode->i_sb, KERN_WARNING, "Failed to "
640 "update on disk inode for unused "
641 "fallocated blocks, inode could be "
648 static void fat_evict_inode(struct inode *inode)
650 truncate_inode_pages_final(&inode->i_data);
651 if (!inode->i_nlink) {
652 inode->i_size = 0;
653 fat_truncate_blocks(inode, 0);
655 fat_free_eofblocks(inode);
657 invalidate_inode_buffers(inode);
658 clear_inode(inode);
659 fat_cache_inval_inode(inode);
660 fat_detach(inode);
742 static struct inode *fat_alloc_inode(struct super_block *sb)
750 /* Zeroing to allow iput() even if partial initialized inode. */
762 static void fat_free_inode(struct inode *inode)
764 kmem_cache_free(fat_inode_cachep, MSDOS_I(inode));
846 static int __fat_write_inode(struct inode *inode, int wait)
848 struct super_block *sb = inode->i_sb;
856 if (inode->i_ino == MSDOS_ROOT_INO)
860 i_pos = fat_i_pos_read(sbi, inode);
867 fat_msg(sb, KERN_ERR, "unable to read inode block "
872 if (i_pos != MSDOS_I(inode)->i_pos) {
879 if (S_ISDIR(inode->i_mode))
882 raw_entry->size = cpu_to_le32(inode->i_size);
883 raw_entry->attr = fat_make_attrs(inode);
884 fat_set_start(raw_entry, MSDOS_I(inode)->i_logstart);
885 fat_time_unix2fat(sbi, &inode->i_mtime, &raw_entry->time,
889 fat_time_unix2fat(sbi, &inode->i_atime, &atime,
891 fat_time_unix2fat(sbi, &MSDOS_I(inode)->i_crtime, &raw_entry->ctime,
903 static int fat_write_inode(struct inode *inode, struct writeback_control *wbc)
907 if (inode->i_ino == MSDOS_FSINFO_INO) {
908 struct super_block *sb = inode->i_sb;
914 err = __fat_write_inode(inode, wbc->sync_mode == WB_SYNC_ALL);
919 int fat_sync_inode(struct inode *inode)
921 return __fat_write_inode(inode, 1);
1382 static int fat_read_root(struct inode *inode)
1384 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb);
1387 MSDOS_I(inode)->i_pos = MSDOS_ROOT_INO;
1388 inode->i_uid = sbi->options.fs_uid;
1389 inode->i_gid = sbi->options.fs_gid;
1390 inode_inc_iversion(inode);
1391 inode->i_generation = 0;
1392 inode->i_mode = fat_make_mode(sbi, ATTR_DIR, S_IRWXUGO);
1393 inode->i_op = sbi->dir_ops;
1394 inode->i_fop = &fat_dir_operations;
1396 MSDOS_I(inode)->i_start = sbi->root_cluster;
1397 error = fat_calc_dir_size(inode);
1401 MSDOS_I(inode)->i_start = 0;
1402 inode->i_size = sbi->dir_entries * sizeof(struct msdos_dir_entry);
1404 inode->i_blocks = ((inode->i_size + (sbi->cluster_size - 1))
1406 MSDOS_I(inode)->i_logstart = 0;
1407 MSDOS_I(inode)->mmu_private = inode->i_size;
1409 fat_save_attrs(inode, ATTR_DIR);
1410 inode->i_mtime = inode->i_atime = inode_set_ctime(inode, 0, 0);
1411 set_nlink(inode, fat_subdirs(inode)+2);
1601 struct inode *root_inode = NULL, *fat_inode = NULL;
1602 struct inode *fsinfo_inode = NULL;
1805 /* set up enough so that it can read an inode */
1868 fat_msg(sb, KERN_ERR, "get root inode failed");
1898 * helper function for fat_flush_inodes. This writes both the inode
1903 static int writeback_inode(struct inode *inode)
1909 * inode to finish. So wait=0 is sent down to sync_inode_metadata
1912 ret = sync_inode_metadata(inode, 0);
1914 ret = filemap_fdatawrite(inode->i_mapping);
1926 int fat_flush_inodes(struct super_block *sb, struct inode *i1, struct inode *i2)