diff options
Diffstat (limited to 'fs/ceph/inode.c')
| -rw-r--r-- | fs/ceph/inode.c | 7 | 
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c index b54c97da1c4..70b6a4839c3 100644 --- a/fs/ceph/inode.c +++ b/fs/ceph/inode.c @@ -355,6 +355,7 @@ struct inode *ceph_alloc_inode(struct super_block *sb)  	ci->i_rd_ref = 0;  	ci->i_rdcache_ref = 0;  	ci->i_wr_ref = 0; +	ci->i_wb_ref = 0;  	ci->i_wrbuffer_ref = 0;  	ci->i_wrbuffer_ref_head = 0;  	ci->i_shared_gen = 0; @@ -1567,6 +1568,7 @@ int ceph_setattr(struct dentry *dentry, struct iattr *attr)  	int release = 0, dirtied = 0;  	int mask = 0;  	int err = 0; +	int inode_dirty_flags = 0;  	if (ceph_snap(inode) != CEPH_NOSNAP)  		return -EROFS; @@ -1725,13 +1727,16 @@ int ceph_setattr(struct dentry *dentry, struct iattr *attr)  		dout("setattr %p ATTR_FILE ... hrm!\n", inode);  	if (dirtied) { -		__ceph_mark_dirty_caps(ci, dirtied); +		inode_dirty_flags = __ceph_mark_dirty_caps(ci, dirtied);  		inode->i_ctime = CURRENT_TIME;  	}  	release &= issued;  	spin_unlock(&inode->i_lock); +	if (inode_dirty_flags) +		__mark_inode_dirty(inode, inode_dirty_flags); +  	if (mask) {  		req->r_inode = igrab(inode);  		req->r_inode_drop = release;  |