mirror of https://github.com/OpenIPC/firmware.git
				
				
				
			
		
			
				
	
	
		
			73 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Diff
		
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Diff
		
	
	
| --- linux-4.9.37/fs/fat/file.c	2017-07-12 16:42:41.000000000 +0300
 | |
| +++ linux-4.9.y/fs/fat/file.c	2021-06-07 13:01:34.000000000 +0300
 | |
| @@ -167,8 +167,17 @@
 | |
|  
 | |
|  	return res ? res : err;
 | |
|  }
 | |
| +#ifdef CONFIG_GOKE_MC
 | |
| +int fat_file_flush(struct file *file, fl_owner_t id)
 | |
| +{
 | |
| +	struct address_space * mapping = file->f_mapping;
 | |
| +	struct inode *inode = mapping->host;
 | |
|  
 | |
| +	inode->i_sb->s_op->write_inode(inode, NULL);
 | |
|  
 | |
| +	return 0;
 | |
| +}
 | |
| +#endif
 | |
|  const struct file_operations fat_file_operations = {
 | |
|  	.llseek		= generic_file_llseek,
 | |
|  	.read_iter	= generic_file_read_iter,
 | |
| @@ -182,6 +191,9 @@
 | |
|  	.fsync		= fat_file_fsync,
 | |
|  	.splice_read	= generic_file_splice_read,
 | |
|  	.fallocate	= fat_fallocate,
 | |
| +#ifdef CONFIG_GOKE_MC
 | |
| +	.flush		= fat_file_flush,
 | |
| +#endif	
 | |
|  };
 | |
|  
 | |
|  static int fat_cont_expand(struct inode *inode, loff_t size)
 | |
| @@ -431,7 +443,13 @@
 | |
|  	/* use a default check */
 | |
|  	return 0;
 | |
|  }
 | |
| -
 | |
| +#ifdef CONFIG_GOKE_MC
 | |
| +void reset_mmu_private(struct inode *inode, loff_t offset)
 | |
| +{
 | |
| +	MSDOS_I(inode)->mmu_private = offset;
 | |
| +	inode->i_ctime = inode->i_mtime = CURRENT_TIME_SEC;
 | |
| +}
 | |
| +#endif
 | |
|  #define TIMES_SET_FLAGS	(ATTR_MTIME_SET | ATTR_ATIME_SET | ATTR_TIMES_SET)
 | |
|  /* valid file mode bits */
 | |
|  #define FAT_VALID_MODE	(S_IFREG | S_IFDIR | S_IRWXUGO)
 | |
| @@ -464,6 +482,7 @@
 | |
|  	 * hole before it. XXX: this is no longer true with new truncate
 | |
|  	 * sequence.
 | |
|  	 */
 | |
| +#ifndef CONFIG_GOKE_MC
 | |
|  	if (attr->ia_valid & ATTR_SIZE) {
 | |
|  		inode_dio_wait(inode);
 | |
|  
 | |
| @@ -474,7 +493,7 @@
 | |
|  			attr->ia_valid &= ~ATTR_SIZE;
 | |
|  		}
 | |
|  	}
 | |
| -
 | |
| +#endif
 | |
|  	if (((attr->ia_valid & ATTR_UID) &&
 | |
|  	     (!uid_eq(attr->ia_uid, sbi->options.fs_uid))) ||
 | |
|  	    ((attr->ia_valid & ATTR_GID) &&
 | |
| @@ -504,6 +523,9 @@
 | |
|  			goto out;
 | |
|  		down_write(&MSDOS_I(inode)->truncate_lock);
 | |
|  		truncate_setsize(inode, attr->ia_size);
 | |
| +#ifdef CONFIG_GOKE_MC
 | |
| +		reset_mmu_private(inode, attr->ia_size);
 | |
| +#endif		
 | |
|  		fat_truncate_blocks(inode, attr->ia_size);
 | |
|  		up_write(&MSDOS_I(inode)->truncate_lock);
 | |
|  	}
 |