|
@@ -64,27 +64,10 @@ int ovl_setattr(struct dentry *dentry, struct iattr *attr)
|
|
|
if (err)
|
|
|
goto out;
|
|
|
|
|
|
- if (attr->ia_valid & ATTR_SIZE) {
|
|
|
- struct inode *realinode = d_inode(ovl_dentry_real(dentry));
|
|
|
-
|
|
|
- err = -ETXTBSY;
|
|
|
- if (atomic_read(&realinode->i_writecount) < 0)
|
|
|
- goto out_drop_write;
|
|
|
- }
|
|
|
-
|
|
|
err = ovl_copy_up(dentry);
|
|
|
if (!err) {
|
|
|
- struct inode *winode = NULL;
|
|
|
-
|
|
|
upperdentry = ovl_dentry_upper(dentry);
|
|
|
|
|
|
- if (attr->ia_valid & ATTR_SIZE) {
|
|
|
- winode = d_inode(upperdentry);
|
|
|
- err = get_write_access(winode);
|
|
|
- if (err)
|
|
|
- goto out_drop_write;
|
|
|
- }
|
|
|
-
|
|
|
if (attr->ia_valid & (ATTR_KILL_SUID|ATTR_KILL_SGID))
|
|
|
attr->ia_valid &= ~ATTR_MODE;
|
|
|
|
|
@@ -95,11 +78,7 @@ int ovl_setattr(struct dentry *dentry, struct iattr *attr)
|
|
|
if (!err)
|
|
|
ovl_copyattr(upperdentry->d_inode, dentry->d_inode);
|
|
|
inode_unlock(upperdentry->d_inode);
|
|
|
-
|
|
|
- if (winode)
|
|
|
- put_write_access(winode);
|
|
|
}
|
|
|
-out_drop_write:
|
|
|
ovl_drop_write(dentry);
|
|
|
out:
|
|
|
return err;
|