Lines Matching refs:inode

18 static int fat_ioctl_get_attributes(struct inode *inode, u32 __user *user_attr)  in fat_ioctl_get_attributes()  argument
22 mutex_lock(&inode->i_mutex); in fat_ioctl_get_attributes()
23 attr = fat_make_attrs(inode); in fat_ioctl_get_attributes()
24 mutex_unlock(&inode->i_mutex); in fat_ioctl_get_attributes()
31 struct inode *inode = file_inode(file); in fat_ioctl_set_attributes() local
32 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); in fat_ioctl_set_attributes()
33 int is_dir = S_ISDIR(inode->i_mode); in fat_ioctl_set_attributes()
45 mutex_lock(&inode->i_mutex); in fat_ioctl_set_attributes()
55 attr |= (MSDOS_I(inode)->i_attrs & ATTR_VOLUME) | in fat_ioctl_set_attributes()
57 oldattr = fat_make_attrs(inode); in fat_ioctl_set_attributes()
61 ia.ia_ctime = current_fs_time(inode->i_sb); in fat_ioctl_set_attributes()
66 S_IRUGO | S_IWUGO | (inode->i_mode & S_IXUGO)); in fat_ioctl_set_attributes()
70 if (inode->i_ino == MSDOS_ROOT_INO && attr != ATTR_DIR) { in fat_ioctl_set_attributes()
99 inode->i_flags |= S_IMMUTABLE; in fat_ioctl_set_attributes()
101 inode->i_flags &= ~S_IMMUTABLE; in fat_ioctl_set_attributes()
104 fat_save_attrs(inode, attr); in fat_ioctl_set_attributes()
105 mark_inode_dirty(inode); in fat_ioctl_set_attributes()
107 mutex_unlock(&inode->i_mutex); in fat_ioctl_set_attributes()
113 static int fat_ioctl_get_volume_id(struct inode *inode, u32 __user *user_attr) in fat_ioctl_get_volume_id() argument
115 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); in fat_ioctl_get_volume_id()
121 struct inode *inode = file_inode(filp); in fat_generic_ioctl() local
126 return fat_ioctl_get_attributes(inode, user_attr); in fat_generic_ioctl()
130 return fat_ioctl_get_volume_id(inode, user_attr); in fat_generic_ioctl()
145 static int fat_file_release(struct inode *inode, struct file *filp) in fat_file_release() argument
148 MSDOS_SB(inode->i_sb)->options.flush) { in fat_file_release()
149 fat_flush_inodes(inode->i_sb, inode, NULL); in fat_file_release()
157 struct inode *inode = filp->f_mapping->host; in fat_file_fsync() local
161 err = sync_mapping_buffers(MSDOS_SB(inode->i_sb)->fat_inode->i_mapping); in fat_file_fsync()
181 static int fat_cont_expand(struct inode *inode, loff_t size) in fat_cont_expand() argument
183 struct address_space *mapping = inode->i_mapping; in fat_cont_expand()
184 loff_t start = inode->i_size, count = size - inode->i_size; in fat_cont_expand()
187 err = generic_cont_expand_simple(inode, size); in fat_cont_expand()
191 inode->i_ctime = inode->i_mtime = CURRENT_TIME_SEC; in fat_cont_expand()
192 mark_inode_dirty(inode); in fat_cont_expand()
193 if (IS_SYNC(inode)) { in fat_cont_expand()
205 err2 = write_inode_now(inode, 1); in fat_cont_expand()
218 static int fat_free(struct inode *inode, int skip) in fat_free() argument
220 struct super_block *sb = inode->i_sb; in fat_free()
223 if (MSDOS_I(inode)->i_start == 0) in fat_free()
226 fat_cache_inval_inode(inode); in fat_free()
228 wait = IS_DIRSYNC(inode); in fat_free()
229 i_start = free_start = MSDOS_I(inode)->i_start; in fat_free()
230 i_logstart = MSDOS_I(inode)->i_logstart; in fat_free()
234 MSDOS_I(inode)->i_start = 0; in fat_free()
235 MSDOS_I(inode)->i_logstart = 0; in fat_free()
237 MSDOS_I(inode)->i_attrs |= ATTR_ARCH; in fat_free()
238 inode->i_ctime = inode->i_mtime = CURRENT_TIME_SEC; in fat_free()
240 err = fat_sync_inode(inode); in fat_free()
242 MSDOS_I(inode)->i_start = i_start; in fat_free()
243 MSDOS_I(inode)->i_logstart = i_logstart; in fat_free()
247 mark_inode_dirty(inode); in fat_free()
254 ret = fat_get_cluster(inode, skip - 1, &fclus, &dclus); in fat_free()
261 ret = fat_ent_read(inode, &fatent, dclus); in fat_free()
268 __func__, MSDOS_I(inode)->i_pos); in fat_free()
271 err = fat_ent_write(inode, &fatent, FAT_ENT_EOF, wait); in fat_free()
281 inode->i_blocks = skip << (MSDOS_SB(sb)->cluster_bits - 9); in fat_free()
284 return fat_free_clusters(inode, free_start); in fat_free()
287 void fat_truncate_blocks(struct inode *inode, loff_t offset) in fat_truncate_blocks() argument
289 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); in fat_truncate_blocks()
297 if (MSDOS_I(inode)->mmu_private > offset) in fat_truncate_blocks()
298 MSDOS_I(inode)->mmu_private = offset; in fat_truncate_blocks()
302 fat_free(inode, nr_clusters); in fat_truncate_blocks()
303 fat_flush_inodes(inode->i_sb, inode, NULL); in fat_truncate_blocks()
308 struct inode *inode = d_inode(dentry); in fat_getattr() local
309 generic_fillattr(inode, stat); in fat_getattr()
310 stat->blksize = MSDOS_SB(inode->i_sb)->cluster_size; in fat_getattr()
312 if (MSDOS_SB(inode->i_sb)->options.nfs == FAT_NFS_NOSTALE_RO) { in fat_getattr()
314 stat->ino = fat_i_pos_read(MSDOS_SB(inode->i_sb), inode); in fat_getattr()
321 struct inode *inode, umode_t *mode_ptr) in fat_sanitize_mode() argument
330 if (S_ISREG(inode->i_mode)) in fat_sanitize_mode()
343 if ((perm & (S_IRUGO | S_IXUGO)) != (inode->i_mode & (S_IRUGO|S_IXUGO))) in fat_sanitize_mode()
345 if (fat_mode_can_hold_ro(inode)) { in fat_sanitize_mode()
358 static int fat_allow_set_time(struct msdos_sb_info *sbi, struct inode *inode) in fat_allow_set_time() argument
362 if (!uid_eq(current_fsuid(), inode->i_uid)) { in fat_allow_set_time()
363 if (in_group_p(inode->i_gid)) in fat_allow_set_time()
380 struct inode *inode = d_inode(dentry); in fat_setattr() local
387 if (fat_allow_set_time(sbi, inode)) in fat_setattr()
391 error = inode_change_ok(inode, attr); in fat_setattr()
406 inode_dio_wait(inode); in fat_setattr()
408 if (attr->ia_size > inode->i_size) { in fat_setattr()
409 error = fat_cont_expand(inode, attr->ia_size); in fat_setattr()
435 if (fat_sanitize_mode(sbi, inode, &attr->ia_mode) < 0) in fat_setattr()
440 error = fat_block_truncate_page(inode, attr->ia_size); in fat_setattr()
443 down_write(&MSDOS_I(inode)->truncate_lock); in fat_setattr()
444 truncate_setsize(inode, attr->ia_size); in fat_setattr()
445 fat_truncate_blocks(inode, attr->ia_size); in fat_setattr()
446 up_write(&MSDOS_I(inode)->truncate_lock); in fat_setattr()
449 setattr_copy(inode, attr); in fat_setattr()
450 mark_inode_dirty(inode); in fat_setattr()