Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 186109
b: refs/heads/master
c: 759bfee
h: refs/heads/master
i:
  186107: 864ba3f
v: v3
  • Loading branch information
Christoph Hellwig authored and Jan Kara committed Mar 4, 2010
1 parent 7072d2a commit 87eb6ca
Show file tree
Hide file tree
Showing 9 changed files with 66 additions and 39 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 63936ddaa16b9486e2d426ed7b09f559a5c60f87
refs/heads/master: 759bfee658beab14af7b357156461d0eb852be2c
11 changes: 2 additions & 9 deletions trunk/fs/attr.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
#include <linux/capability.h>
#include <linux/fsnotify.h>
#include <linux/fcntl.h>
#include <linux/quotaops.h>
#include <linux/security.h>

/* Taken over from the old code... */
Expand Down Expand Up @@ -212,14 +211,8 @@ int notify_change(struct dentry * dentry, struct iattr * attr)
error = inode->i_op->setattr(dentry, attr);
} else {
error = inode_change_ok(inode, attr);
if (!error) {
if ((ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) ||
(ia_valid & ATTR_GID && attr->ia_gid != inode->i_gid))
error = vfs_dq_transfer(inode, attr) ?
-EDQUOT : 0;
if (!error)
error = inode_setattr(inode, attr);
}
if (!error)
error = inode_setattr(inode, attr);
}

if (ia_valid & ATTR_SIZE)
Expand Down
26 changes: 1 addition & 25 deletions trunk/fs/jfs/acl.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@

#include <linux/sched.h>
#include <linux/fs.h>
#include <linux/quotaops.h>
#include <linux/posix_acl_xattr.h>
#include "jfs_incore.h"
#include "jfs_txnmgr.h"
Expand Down Expand Up @@ -174,7 +173,7 @@ int jfs_init_acl(tid_t tid, struct inode *inode, struct inode *dir)
return rc;
}

static int jfs_acl_chmod(struct inode *inode)
int jfs_acl_chmod(struct inode *inode)
{
struct posix_acl *acl, *clone;
int rc;
Expand Down Expand Up @@ -205,26 +204,3 @@ static int jfs_acl_chmod(struct inode *inode)
posix_acl_release(clone);
return rc;
}

int jfs_setattr(struct dentry *dentry, struct iattr *iattr)
{
struct inode *inode = dentry->d_inode;
int rc;

rc = inode_change_ok(inode, iattr);
if (rc)
return rc;

if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) ||
(iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) {
if (vfs_dq_transfer(inode, iattr))
return -EDQUOT;
}

rc = inode_setattr(inode, iattr);

if (!rc && (iattr->ia_valid & ATTR_MODE))
rc = jfs_acl_chmod(inode);

return rc;
}
26 changes: 25 additions & 1 deletion trunk/fs/jfs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
*/

#include <linux/fs.h>
#include <linux/quotaops.h>
#include "jfs_incore.h"
#include "jfs_inode.h"
#include "jfs_dmap.h"
Expand Down Expand Up @@ -88,14 +89,37 @@ static int jfs_release(struct inode *inode, struct file *file)
return 0;
}

int jfs_setattr(struct dentry *dentry, struct iattr *iattr)
{
struct inode *inode = dentry->d_inode;
int rc;

rc = inode_change_ok(inode, iattr);
if (rc)
return rc;

if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) ||
(iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) {
if (vfs_dq_transfer(inode, iattr))
return -EDQUOT;
}

rc = inode_setattr(inode, iattr);

if (!rc && (iattr->ia_valid & ATTR_MODE))
rc = jfs_acl_chmod(inode);

return rc;
}

const struct inode_operations jfs_file_inode_operations = {
.truncate = jfs_truncate,
.setxattr = jfs_setxattr,
.getxattr = jfs_getxattr,
.listxattr = jfs_listxattr,
.removexattr = jfs_removexattr,
#ifdef CONFIG_JFS_POSIX_ACL
.setattr = jfs_setattr,
#ifdef CONFIG_JFS_POSIX_ACL
.check_acl = jfs_check_acl,
#endif
};
Expand Down
7 changes: 6 additions & 1 deletion trunk/fs/jfs/jfs_acl.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

int jfs_check_acl(struct inode *, int);
int jfs_init_acl(tid_t, struct inode *, struct inode *);
int jfs_setattr(struct dentry *, struct iattr *);
int jfs_acl_chmod(struct inode *inode);

#else

Expand All @@ -32,5 +32,10 @@ static inline int jfs_init_acl(tid_t tid, struct inode *inode,
return 0;
}

static inline int jfs_acl_chmod(struct inode *inode)
{
return 0;
}

#endif
#endif /* _H_JFS_ACL */
1 change: 1 addition & 0 deletions trunk/fs/jfs/jfs_inode.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ extern struct dentry *jfs_fh_to_parent(struct super_block *sb, struct fid *fid,
int fh_len, int fh_type);
extern void jfs_set_inode_flags(struct inode *);
extern int jfs_get_block(struct inode *, sector_t, struct buffer_head *, int);
extern int jfs_setattr(struct dentry *, struct iattr *);

extern const struct address_space_operations jfs_aops;
extern const struct inode_operations jfs_dir_inode_operations;
Expand Down
2 changes: 1 addition & 1 deletion trunk/fs/jfs/namei.c
Original file line number Diff line number Diff line change
Expand Up @@ -1541,8 +1541,8 @@ const struct inode_operations jfs_dir_inode_operations = {
.getxattr = jfs_getxattr,
.listxattr = jfs_listxattr,
.removexattr = jfs_removexattr,
#ifdef CONFIG_JFS_POSIX_ACL
.setattr = jfs_setattr,
#ifdef CONFIG_JFS_POSIX_ACL
.check_acl = jfs_check_acl,
#endif
};
Expand Down
23 changes: 22 additions & 1 deletion trunk/fs/udf/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#include <linux/errno.h>
#include <linux/smp_lock.h>
#include <linux/pagemap.h>
#include <linux/quotaops.h>
#include <linux/buffer_head.h>
#include <linux/aio.h>

Expand Down Expand Up @@ -217,6 +218,26 @@ const struct file_operations udf_file_operations = {
.llseek = generic_file_llseek,
};

static int udf_setattr(struct dentry *dentry, struct iattr *iattr)
{
struct inode *inode = dentry->d_inode;
int error;

error = inode_change_ok(inode, iattr);
if (error)
return error;

if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) ||
(iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) {
error = vfs_dq_transfer(inode, iattr) ? -EDQUOT : 0;
if (error)
return error;
}

return inode_setattr(inode, iattr);
}

const struct inode_operations udf_file_inode_operations = {
.truncate = udf_truncate,
.truncate = udf_truncate,
.setattr = udf_setattr,
};
7 changes: 7 additions & 0 deletions trunk/fs/ufs/truncate.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
#include <linux/buffer_head.h>
#include <linux/blkdev.h>
#include <linux/sched.h>
#include <linux/quotaops.h>

#include "ufs_fs.h"
#include "ufs.h"
Expand Down Expand Up @@ -517,6 +518,12 @@ static int ufs_setattr(struct dentry *dentry, struct iattr *attr)
if (error)
return error;

if ((ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) ||
(ia_valid & ATTR_GID && attr->ia_gid != inode->i_gid)) {
error = vfs_dq_transfer(inode, attr) ? -EDQUOT : 0;
if (error)
return error;
}
if (ia_valid & ATTR_SIZE &&
attr->ia_size != i_size_read(inode)) {
loff_t old_i_size = inode->i_size;
Expand Down

0 comments on commit 87eb6ca

Please sign in to comment.