diff options
Diffstat (limited to 'fs/fuse/inode.c')
| -rw-r--r-- | fs/fuse/inode.c | 16 | 
1 files changed, 12 insertions, 4 deletions
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index 8d611696fcad..754dcf23de8a 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -175,9 +175,9 @@ void fuse_change_attributes_common(struct inode *inode, struct fuse_attr *attr,  	if (!fc->writeback_cache || !S_ISREG(inode->i_mode)) {  		inode->i_mtime.tv_sec   = attr->mtime;  		inode->i_mtime.tv_nsec  = attr->mtimensec; +		inode->i_ctime.tv_sec   = attr->ctime; +		inode->i_ctime.tv_nsec  = attr->ctimensec;  	} -	inode->i_ctime.tv_sec   = attr->ctime; -	inode->i_ctime.tv_nsec  = attr->ctimensec;  	if (attr->blksize != 0)  		inode->i_blkbits = ilog2(attr->blksize); @@ -256,6 +256,8 @@ static void fuse_init_inode(struct inode *inode, struct fuse_attr *attr)  	inode->i_size = attr->size;  	inode->i_mtime.tv_sec  = attr->mtime;  	inode->i_mtime.tv_nsec = attr->mtimensec; +	inode->i_ctime.tv_sec  = attr->ctime; +	inode->i_ctime.tv_nsec = attr->ctimensec;  	if (S_ISREG(inode->i_mode)) {  		fuse_init_common(inode);  		fuse_init_file_inode(inode); @@ -303,7 +305,7 @@ struct inode *fuse_iget(struct super_block *sb, u64 nodeid,  	if ((inode->i_state & I_NEW)) {  		inode->i_flags |= S_NOATIME; -		if (!fc->writeback_cache || !S_ISREG(inode->i_mode)) +		if (!fc->writeback_cache || !S_ISREG(attr->mode))  			inode->i_flags |= S_NOCMTIME;  		inode->i_generation = generation;  		inode->i_data.backing_dev_info = &fc->bdi; @@ -788,6 +790,7 @@ static const struct super_operations fuse_super_operations = {  	.alloc_inode    = fuse_alloc_inode,  	.destroy_inode  = fuse_destroy_inode,  	.evict_inode	= fuse_evict_inode, +	.write_inode	= fuse_write_inode,  	.drop_inode	= generic_delete_inode,  	.remount_fs	= fuse_remount_fs,  	.put_super	= fuse_put_super, @@ -890,6 +893,11 @@ static void process_init_reply(struct fuse_conn *fc, struct fuse_req *req)  				fc->async_dio = 1;  			if (arg->flags & FUSE_WRITEBACK_CACHE)  				fc->writeback_cache = 1; +			if (arg->time_gran && arg->time_gran <= 1000000000) +				fc->sb->s_time_gran = arg->time_gran; +			else +				fc->sb->s_time_gran = 1000000000; +  		} else {  			ra_pages = fc->max_read / PAGE_CACHE_SIZE;  			fc->no_lock = 1; @@ -996,7 +1004,7 @@ static int fuse_fill_super(struct super_block *sb, void *data, int silent)  	if (sb->s_flags & MS_MANDLOCK)  		goto err; -	sb->s_flags &= ~MS_NOSEC; +	sb->s_flags &= ~(MS_NOSEC | MS_I_VERSION);  	if (!parse_fuse_opt((char *) data, &d, is_bdev))  		goto err;  | 
