diff options
Diffstat (limited to 'fs/ext2/inode.c')
| -rw-r--r-- | fs/ext2/inode.c | 20 | 
1 files changed, 12 insertions, 8 deletions
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index 740cad8dcd8..f9fa95f8443 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c @@ -1293,6 +1293,8 @@ struct inode *ext2_iget (struct super_block *sb, unsigned long ino)  	struct inode *inode;  	long ret = -EIO;  	int n; +	uid_t i_uid; +	gid_t i_gid;  	inode = iget_locked(sb, ino);  	if (!inode) @@ -1310,12 +1312,14 @@ struct inode *ext2_iget (struct super_block *sb, unsigned long ino)  	}  	inode->i_mode = le16_to_cpu(raw_inode->i_mode); -	inode->i_uid = (uid_t)le16_to_cpu(raw_inode->i_uid_low); -	inode->i_gid = (gid_t)le16_to_cpu(raw_inode->i_gid_low); +	i_uid = (uid_t)le16_to_cpu(raw_inode->i_uid_low); +	i_gid = (gid_t)le16_to_cpu(raw_inode->i_gid_low);  	if (!(test_opt (inode->i_sb, NO_UID32))) { -		inode->i_uid |= le16_to_cpu(raw_inode->i_uid_high) << 16; -		inode->i_gid |= le16_to_cpu(raw_inode->i_gid_high) << 16; +		i_uid |= le16_to_cpu(raw_inode->i_uid_high) << 16; +		i_gid |= le16_to_cpu(raw_inode->i_gid_high) << 16;  	} +	i_uid_write(inode, i_uid); +	i_gid_write(inode, i_gid);  	set_nlink(inode, le16_to_cpu(raw_inode->i_links_count));  	inode->i_size = le32_to_cpu(raw_inode->i_size);  	inode->i_atime.tv_sec = (signed)le32_to_cpu(raw_inode->i_atime); @@ -1413,8 +1417,8 @@ static int __ext2_write_inode(struct inode *inode, int do_sync)  	struct ext2_inode_info *ei = EXT2_I(inode);  	struct super_block *sb = inode->i_sb;  	ino_t ino = inode->i_ino; -	uid_t uid = inode->i_uid; -	gid_t gid = inode->i_gid; +	uid_t uid = i_uid_read(inode); +	gid_t gid = i_gid_read(inode);  	struct buffer_head * bh;  	struct ext2_inode * raw_inode = ext2_get_inode(sb, ino, &bh);  	int n; @@ -1529,8 +1533,8 @@ int ext2_setattr(struct dentry *dentry, struct iattr *iattr)  	if (is_quota_modification(inode, iattr))  		dquot_initialize(inode); -	if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) || -	    (iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) { +	if ((iattr->ia_valid & ATTR_UID && !uid_eq(iattr->ia_uid, inode->i_uid)) || +	    (iattr->ia_valid & ATTR_GID && !gid_eq(iattr->ia_gid, inode->i_gid))) {  		error = dquot_transfer(inode, iattr);  		if (error)  			return error;  |