fs: Give dentry to inode_change_ok() instead of inode
authorJan Kara <jack@suse.cz>
Thu, 26 May 2016 14:55:18 +0000 (16:55 +0200)
committerJan Kara <jack@suse.cz>
Thu, 22 Sep 2016 08:56:19 +0000 (10:56 +0200)
inode_change_ok() will be resposible for clearing capabilities and IMA
extended attributes and as such will need dentry. Give it as an argument
to inode_change_ok() instead of an inode. Also rename inode_change_ok()
to setattr_prepare() to better relect that it does also some
modifications in addition to checks.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
51 files changed:
Documentation/filesystems/porting
drivers/staging/lustre/lustre/llite/llite_lib.c
fs/9p/vfs_inode.c
fs/9p/vfs_inode_dotl.c
fs/adfs/inode.c
fs/affs/inode.c
fs/attr.c
fs/btrfs/inode.c
fs/ceph/inode.c
fs/cifs/inode.c
fs/ecryptfs/inode.c
fs/exofs/inode.c
fs/ext2/inode.c
fs/ext4/inode.c
fs/f2fs/file.c
fs/fat/file.c
fs/fuse/dir.c
fs/gfs2/inode.c
fs/hfs/inode.c
fs/hfsplus/inode.c
fs/hostfs/hostfs_kern.c
fs/hpfs/inode.c
fs/hugetlbfs/inode.c
fs/jffs2/fs.c
fs/jfs/file.c
fs/kernfs/inode.c
fs/libfs.c
fs/logfs/file.c
fs/minix/file.c
fs/ncpfs/inode.c
fs/nfsd/nfsproc.c
fs/nilfs2/inode.c
fs/ntfs/inode.c
fs/ocfs2/dlmfs/dlmfs.c
fs/ocfs2/file.c
fs/omfs/file.c
fs/orangefs/inode.c
fs/overlayfs/inode.c
fs/proc/base.c
fs/proc/generic.c
fs/proc/proc_sysctl.c
fs/ramfs/file-nommu.c
fs/reiserfs/inode.c
fs/sysv/file.c
fs/ubifs/file.c
fs/udf/file.c
fs/ufs/inode.c
fs/utimes.c
fs/xfs/xfs_iops.c
include/linux/fs.h
mm/shmem.c

index b1bd05ea66b2d42fae1fcc34d5ddb91ead15eed5..ab320c77147a0cf70fe3d95ef418b93afd9b181f 100644 (file)
@@ -287,8 +287,8 @@ implementing on-disk size changes.  Start with a copy of the old inode_setattr
 and vmtruncate, and the reorder the vmtruncate + foofs_vmtruncate sequence to
 be in order of zeroing blocks using block_truncate_page or similar helpers,
 size update and on finally on-disk truncation which should not fail.
-inode_change_ok now includes the size checks for ATTR_SIZE and must be called
-in the beginning of ->setattr unconditionally.
+setattr_prepare (which used to be inode_change_ok) now includes the size checks
+for ATTR_SIZE and must be called in the beginning of ->setattr unconditionally.
 
 [mandatory]
 
index 546063e728db1cd9e3bb20c9d9276d7d399a7d49..fb7b54eff02746e77f0b509d0c72f5b1ff5791ee 100644 (file)
@@ -1192,7 +1192,7 @@ int ll_setattr_raw(struct dentry *dentry, struct iattr *attr, bool hsm_import)
                attr->ia_valid |= ATTR_MTIME | ATTR_CTIME;
        }
 
-       /* POSIX: check before ATTR_*TIME_SET set (from inode_change_ok) */
+       /* POSIX: check before ATTR_*TIME_SET set (from setattr_prepare) */
        if (attr->ia_valid & TIMES_SET_FLAGS) {
                if ((!uid_eq(current_fsuid(), inode->i_uid)) &&
                    !capable(CFS_CAP_FOWNER))
index 8b1999b528e9b4b048b136afc3aff6022bc23dee..aa639bb1f2896698dce99bf73497240dddd57dfa 100644 (file)
@@ -1094,7 +1094,7 @@ static int v9fs_vfs_setattr(struct dentry *dentry, struct iattr *iattr)
        struct p9_wstat wstat;
 
        p9_debug(P9_DEBUG_VFS, "\n");
-       retval = inode_change_ok(d_inode(dentry), iattr);
+       retval = setattr_prepare(dentry, iattr);
        if (retval)
                return retval;
 
index eeabcb0bad1255085c2d487785ebb92f638f00b0..0e6ad301971109dea109bac917c3c738b1c063e5 100644 (file)
@@ -558,7 +558,7 @@ int v9fs_vfs_setattr_dotl(struct dentry *dentry, struct iattr *iattr)
 
        p9_debug(P9_DEBUG_VFS, "\n");
 
-       retval = inode_change_ok(inode, iattr);
+       retval = setattr_prepare(dentry, iattr);
        if (retval)
                return retval;
 
index 335055d828e45d082f24558ac5b1c155dac1fefb..f57baaa511aa5ceea8dbd03e1b040d46238c0d45 100644 (file)
@@ -303,7 +303,7 @@ adfs_notify_change(struct dentry *dentry, struct iattr *attr)
        unsigned int ia_valid = attr->ia_valid;
        int error;
        
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
 
        /*
         * we can't change the UID or GID of any file -
index 0fdb0f5b2239df24b69363a7449a7a7ff360003c..1aa243502c7ff267475acfb1fafec1048bf1978c 100644 (file)
@@ -219,7 +219,7 @@ affs_notify_change(struct dentry *dentry, struct iattr *attr)
 
        pr_debug("notify_change(%lu,0x%x)\n", inode->i_ino, attr->ia_valid);
 
-       error = inode_change_ok(inode,attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                goto out;
 
index 42bb42bb3c72c206923294a3f08f0020df6c5a43..5c45909ea2042a9f342b876aac6ac2b529314cf2 100644 (file)
--- a/fs/attr.c
+++ b/fs/attr.c
 #include <linux/ima.h>
 
 /**
- * inode_change_ok - check if attribute changes to an inode are allowed
- * @inode:     inode to check
+ * setattr_prepare - check if attribute changes to a dentry are allowed
+ * @dentry:    dentry to check
  * @attr:      attributes to change
  *
  * Check if we are allowed to change the attributes contained in @attr
- * in the given inode.  This includes the normal unix access permission
- * checks, as well as checks for rlimits and others.
+ * in the given dentry.  This includes the normal unix access permission
+ * checks, as well as checks for rlimits and others. The function also clears
+ * SGID bit from mode if user is not allowed to set it. Also file capabilities
+ * and IMA extended attributes are cleared if ATTR_KILL_PRIV is set.
  *
  * Should be called as the first thing in ->setattr implementations,
  * possibly after taking additional locks.
  */
-int inode_change_ok(const struct inode *inode, struct iattr *attr)
+int setattr_prepare(struct dentry *dentry, struct iattr *attr)
 {
+       struct inode *inode = d_inode(dentry);
        unsigned int ia_valid = attr->ia_valid;
 
        /*
@@ -79,7 +82,7 @@ int inode_change_ok(const struct inode *inode, struct iattr *attr)
 
        return 0;
 }
-EXPORT_SYMBOL(inode_change_ok);
+EXPORT_SYMBOL(setattr_prepare);
 
 /**
  * inode_newsize_ok - may this inode be truncated to a given size
index 2f5975954ccf198737e07b29c8706024114a78ae..bfa0b07160d5bf21036f4295df9ffb74103fd45d 100644 (file)
@@ -5042,7 +5042,7 @@ static int btrfs_setattr(struct dentry *dentry, struct iattr *attr)
        if (btrfs_root_readonly(root))
                return -EROFS;
 
-       err = inode_change_ok(inode, attr);
+       err = setattr_prepare(dentry, attr);
        if (err)
                return err;
 
index 2aa3c0bcf3a52c6a02ea8a28d98e22f216eeee0d..082e82dcbaa41c9f305294fb07603645a2c41b1e 100644 (file)
@@ -2123,7 +2123,7 @@ int ceph_setattr(struct dentry *dentry, struct iattr *attr)
        if (ceph_snap(inode) != CEPH_NOSNAP)
                return -EROFS;
 
-       err = inode_change_ok(inode, attr);
+       err = setattr_prepare(dentry, attr);
        if (err != 0)
                return err;
 
index b87efd0c92d60adc82e54adcdafc4cab91007802..13cf507d142390e982ad40090e7be80590271ff6 100644 (file)
@@ -2154,7 +2154,7 @@ cifs_setattr_unix(struct dentry *direntry, struct iattr *attrs)
        if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM)
                attrs->ia_valid |= ATTR_FORCE;
 
-       rc = inode_change_ok(inode, attrs);
+       rc = setattr_prepare(direntry, attrs);
        if (rc < 0)
                goto out;
 
@@ -2294,7 +2294,7 @@ cifs_setattr_nounix(struct dentry *direntry, struct iattr *attrs)
        if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_PERM)
                attrs->ia_valid |= ATTR_FORCE;
 
-       rc = inode_change_ok(inode, attrs);
+       rc = setattr_prepare(direntry, attrs);
        if (rc < 0) {
                free_xid(xid);
                return rc;
index 9d153b6a1d72308ae7130233697082b7028a3e51..5ffba186f35210385085e12ff56b8587721c9e98 100644 (file)
@@ -927,7 +927,7 @@ static int ecryptfs_setattr(struct dentry *dentry, struct iattr *ia)
        }
        mutex_unlock(&crypt_stat->cs_mutex);
 
-       rc = inode_change_ok(inode, ia);
+       rc = setattr_prepare(dentry, ia);
        if (rc)
                goto out;
        if (ia->ia_valid & ATTR_SIZE) {
index 9dc4c6dbf3c99f012cb965e1aaba357fff6ce194..5e68daee5fe479fe9cb2dfc6fff27b8130986593 100644 (file)
@@ -1034,7 +1034,7 @@ int exofs_setattr(struct dentry *dentry, struct iattr *iattr)
        if (unlikely(error))
                return error;
 
-       error = inode_change_ok(inode, iattr);
+       error = setattr_prepare(dentry, iattr);
        if (unlikely(error))
                return error;
 
index d5c7d09919f318066c1be57cf446624875ba229a..65c077d9a5e9334b5219a8b034f40cfce20f490c 100644 (file)
@@ -1580,7 +1580,7 @@ int ext2_setattr(struct dentry *dentry, struct iattr *iattr)
        struct inode *inode = d_inode(dentry);
        int error;
 
-       error = inode_change_ok(inode, iattr);
+       error = setattr_prepare(dentry, iattr);
        if (error)
                return error;
 
index 3131747199e160f5feca6c322a2b4190201108bf..fdf9bee67a128c052db6cd54f83deadedd54fb18 100644 (file)
@@ -5073,7 +5073,7 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)
        int orphan = 0;
        const unsigned int ia_valid = attr->ia_valid;
 
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                return error;
 
index 0e493f63ea41410ad04c22e24038bd2d4eebe0ba..26ebda971d537e0a3bdb0e2474d4cdfa767fde09 100644 (file)
@@ -680,7 +680,7 @@ int f2fs_setattr(struct dentry *dentry, struct iattr *attr)
        struct inode *inode = d_inode(dentry);
        int err;
 
-       err = inode_change_ok(inode, attr);
+       err = setattr_prepare(dentry, attr);
        if (err)
                return err;
 
index f7018566883241bc65a981cf0d6e533e4d331241..c09ab4e108e5fb9fd787a548a1f4cf2dd3091502 100644 (file)
@@ -450,7 +450,7 @@ int fat_setattr(struct dentry *dentry, struct iattr *attr)
                        attr->ia_valid &= ~TIMES_SET_FLAGS;
        }
 
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        attr->ia_valid = ia_valid;
        if (error) {
                if (sbi->options.quiet)
index 6911bfad7834ec3d17787f3431beb391bb0c7a17..b23502174682df53f775e11641f1f3213dd4babd 100644 (file)
@@ -1609,7 +1609,7 @@ int fuse_do_setattr(struct dentry *dentry, struct iattr *attr,
        if (!(fc->flags & FUSE_DEFAULT_PERMISSIONS))
                attr->ia_valid |= ATTR_FORCE;
 
-       err = inode_change_ok(inode, attr);
+       err = setattr_prepare(dentry, attr);
        if (err)
                return err;
 
index e4da0ecd32852bb95d5bb3db8ae9cc71991f40f2..d693af5ca5bccfd51050d854f0865b973669c042 100644 (file)
@@ -1932,7 +1932,7 @@ static int gfs2_setattr(struct dentry *dentry, struct iattr *attr)
        if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
                goto out;
 
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                goto out;
 
index c6a32415735bcb55e5187fdcd14159db1aa6ab9c..09cce23864dae266344a655df8ab4cc11365dbdd 100644 (file)
@@ -605,7 +605,7 @@ int hfs_inode_setattr(struct dentry *dentry, struct iattr * attr)
        struct hfs_sb_info *hsb = HFS_SB(inode->i_sb);
        int error;
 
-       error = inode_change_ok(inode, attr); /* basic permission checks */
+       error = setattr_prepare(dentry, attr); /* basic permission checks */
        if (error)
                return error;
 
index 19462d773fe2443c3c483249630c646dc1f3c3f9..c43ef397a3aab0b5223b57ccbca54d733c30da84 100644 (file)
@@ -245,7 +245,7 @@ static int hfsplus_setattr(struct dentry *dentry, struct iattr *attr)
        struct inode *inode = d_inode(dentry);
        int error;
 
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                return error;
 
index 90e46cd752fe7568bc13198898bc450a63cc9e36..44aa96ba1df87987136068a421a0bd44f2632c98 100644 (file)
@@ -812,7 +812,7 @@ static int hostfs_setattr(struct dentry *dentry, struct iattr *attr)
 
        int fd = HOSTFS_I(inode)->fd;
 
-       err = inode_change_ok(inode, attr);
+       err = setattr_prepare(dentry, attr);
        if (err)
                return err;
 
index 1f3c6d76200bea68aa7d879955f0351b74b9cdc0..b9c724ed1e7e3cabcec7059af86d967edb83eb50 100644 (file)
@@ -273,7 +273,7 @@ int hpfs_setattr(struct dentry *dentry, struct iattr *attr)
        if ((attr->ia_valid & ATTR_SIZE) && attr->ia_size > inode->i_size)
                goto out_unlock;
 
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                goto out_unlock;
 
index 4ea71eba40a57a3dd1c2e32460021878e12f56d3..fb3312f2c861c3f1f980f4ad9b2190195346830c 100644 (file)
@@ -672,7 +672,7 @@ static int hugetlbfs_setattr(struct dentry *dentry, struct iattr *attr)
 
        BUG_ON(!inode);
 
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                return error;
 
index ae2ebb26b4468fdf4d1c528b65db24d2618c1ead..3773b24b4db0dc250f49caf9b17c2454861fbacf 100644 (file)
@@ -193,7 +193,7 @@ int jffs2_setattr(struct dentry *dentry, struct iattr *iattr)
        struct inode *inode = d_inode(dentry);
        int rc;
 
-       rc = inode_change_ok(inode, iattr);
+       rc = setattr_prepare(dentry, iattr);
        if (rc)
                return rc;
 
index 7f1a585a0a947b7c6468d0654748be6f128a3df3..cf62037b8a042ac034581abbf737f54764bf96b7 100644 (file)
@@ -103,7 +103,7 @@ int jfs_setattr(struct dentry *dentry, struct iattr *iattr)
        struct inode *inode = d_inode(dentry);
        int rc;
 
-       rc = inode_change_ok(inode, iattr);
+       rc = setattr_prepare(dentry, iattr);
        if (rc)
                return rc;
 
index 63b925d5ba1e43c67a83dfc1c92f59325fc954ba..df21f5b755499323e822d20cf2a0f8546110d236 100644 (file)
@@ -122,7 +122,7 @@ int kernfs_iop_setattr(struct dentry *dentry, struct iattr *iattr)
                return -EINVAL;
 
        mutex_lock(&kernfs_mutex);
-       error = inode_change_ok(inode, iattr);
+       error = setattr_prepare(dentry, iattr);
        if (error)
                goto out;
 
index 74dc8b9e7f53ab394113783c96fb754c045735fa..2b3c3ae701533ffb8233aee819050e6aba10c26a 100644 (file)
@@ -394,7 +394,7 @@ int simple_setattr(struct dentry *dentry, struct iattr *iattr)
        struct inode *inode = d_inode(dentry);
        int error;
 
-       error = inode_change_ok(inode, iattr);
+       error = setattr_prepare(dentry, iattr);
        if (error)
                return error;
 
index f01ddfb1a03b6ecc5d122b0bd94c6e301a1f6fa3..5d9fe466bbc942272a964f7a5cb06e3a61752713 100644 (file)
@@ -244,7 +244,7 @@ static int logfs_setattr(struct dentry *dentry, struct iattr *attr)
        struct inode *inode = d_inode(dentry);
        int err = 0;
 
-       err = inode_change_ok(inode, attr);
+       err = setattr_prepare(dentry, attr);
        if (err)
                return err;
 
index 94f0eb9a6e2c1f77db3b3d5095092cf47c655976..a6a4797aa0d40cb89d99d00edbfd32ef590de86c 100644 (file)
@@ -26,7 +26,7 @@ static int minix_setattr(struct dentry *dentry, struct iattr *attr)
        struct inode *inode = d_inode(dentry);
        int error;
 
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                return error;
 
index 1af15fcbe57b74c74c85dff9b956be07bea49f79..f6cf4c7e92b1b8c3cf7e7846aa4c968a24829b03 100644 (file)
@@ -884,7 +884,7 @@ int ncp_notify_change(struct dentry *dentry, struct iattr *attr)
        /* ageing the dentry to force validation */
        ncp_age_dentry(server, dentry);
 
-       result = inode_change_ok(inode, attr);
+       result = setattr_prepare(dentry, attr);
        if (result < 0)
                goto out;
 
index e9214768cde90f84138f6279e115a7a8c7350b95..08188743db537276614a5c9cb56fb49f981123e3 100644 (file)
@@ -74,10 +74,10 @@ nfsd_proc_setattr(struct svc_rqst *rqstp, struct nfsd_sattrargs *argp,
         * which only requires access, and "set-[ac]time-to-X" which
         * requires ownership.
         * So if it looks like it might be "set both to the same time which
-        * is close to now", and if inode_change_ok fails, then we
+        * is close to now", and if setattr_prepare fails, then we
         * convert to "set to now" instead of "set to explicit time"
         *
-        * We only call inode_change_ok as the last test as technically
+        * We only call setattr_prepare as the last test as technically
         * it is not an interface that we should be using.
         */
 #define BOTH_TIME_SET (ATTR_ATIME_SET | ATTR_MTIME_SET)
@@ -92,17 +92,15 @@ nfsd_proc_setattr(struct svc_rqst *rqstp, struct nfsd_sattrargs *argp,
                 * request is.  We require it be within 30 minutes of now.
                 */
                time_t delta = iap->ia_atime.tv_sec - get_seconds();
-               struct inode *inode;
 
                nfserr = fh_verify(rqstp, fhp, 0, NFSD_MAY_NOP);
                if (nfserr)
                        goto done;
-               inode = d_inode(fhp->fh_dentry);
 
                if (delta < 0)
                        delta = -delta;
                if (delta < MAX_TOUCH_TIME_ERROR &&
-                   inode_change_ok(inode, iap) != 0) {
+                   setattr_prepare(fhp->fh_dentry, iap) != 0) {
                        /*
                         * Turn off ATTR_[AM]TIME_SET but leave ATTR_[AM]TIME.
                         * This will cause notify_change to set these times
index af04f553d7c9d8b83acb9d5181f45948694b0af5..402c325e0467f84861f2ebd315860dcb5f9129eb 100644 (file)
@@ -829,7 +829,7 @@ int nilfs_setattr(struct dentry *dentry, struct iattr *iattr)
        struct super_block *sb = inode->i_sb;
        int err;
 
-       err = inode_change_ok(inode, iattr);
+       err = setattr_prepare(dentry, iattr);
        if (err)
                return err;
 
index e01287c964a88ab4db60472e1e084449bcd166e3..9d7a44872df5d46d326bdbfde087548989baa413 100644 (file)
@@ -2893,7 +2893,7 @@ int ntfs_setattr(struct dentry *dentry, struct iattr *attr)
        int err;
        unsigned int ia_valid = attr->ia_valid;
 
-       err = inode_change_ok(vi, attr);
+       err = setattr_prepare(dentry, attr);
        if (err)
                goto out;
        /* We do not support NTFS ACLs yet. */
index ef474cdd640479d1e9b3b48204f12dc5c6a7704f..6a4b21654037db731ae9b3e8db2f776014b0c0bb 100644 (file)
@@ -211,7 +211,7 @@ static int dlmfs_file_setattr(struct dentry *dentry, struct iattr *attr)
        struct inode *inode = d_inode(dentry);
 
        attr->ia_valid &= ~ATTR_SIZE;
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                return error;
 
index 4e7b0dc22450564cd86064061d7d84e8461f2bbf..1ab3657242e82274155571595b20ae48f77620f6 100644 (file)
@@ -1155,7 +1155,7 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)
        if (!(attr->ia_valid & OCFS2_VALID_ATTRS))
                return 0;
 
-       status = inode_change_ok(inode, attr);
+       status = setattr_prepare(dentry, attr);
        if (status)
                return status;
 
index d9e26cfbb793113f15b73bde769e49b69932bc9c..bf83e6644333f5edb4c7dfb6a4ad68415ad7e6ea 100644 (file)
@@ -349,7 +349,7 @@ static int omfs_setattr(struct dentry *dentry, struct iattr *attr)
        struct inode *inode = d_inode(dentry);
        int error;
 
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                return error;
 
index 28a0557a69be8bc82795c2136d122f4da77ab2dc..cff00ebac03aa55e88a9ed5b84bba5e652096407 100644 (file)
@@ -219,7 +219,7 @@ int orangefs_setattr(struct dentry *dentry, struct iattr *iattr)
                     "orangefs_setattr: called on %s\n",
                     dentry->d_name.name);
 
-       ret = inode_change_ok(inode, iattr);
+       ret = setattr_prepare(dentry, iattr);
        if (ret)
                goto out;
 
index 1b885c156028d3a4209cf51b6898006c28ac0ee6..990388dba9b8a61f204b69cf80a12b66885ed9f9 100644 (file)
@@ -52,7 +52,7 @@ int ovl_setattr(struct dentry *dentry, struct iattr *attr)
         * inode_newsize_ok() will always check against MAX_LFS_FILESIZE and not
         * check for a swapfile (which this won't be anyway).
         */
-       err = inode_change_ok(dentry->d_inode, attr);
+       err = setattr_prepare(dentry, attr);
        if (err)
                return err;
 
index 54e270262979b6f331a31b132171c0b74b92b920..207f36039f634561624927d15f7584984d3e9b02 100644 (file)
@@ -709,7 +709,7 @@ int proc_setattr(struct dentry *dentry, struct iattr *attr)
        if (attr->ia_valid & ATTR_MODE)
                return -EPERM;
 
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                return error;
 
index c633476616e0fe7be920d9421f8eba627a4398b3..23ff30e3c1e77be8f2236f520db77afeb39ff1b1 100644 (file)
@@ -105,7 +105,7 @@ static int proc_notify_change(struct dentry *dentry, struct iattr *iattr)
        struct proc_dir_entry *de = PDE(inode);
        int error;
 
-       error = inode_change_ok(inode, iattr);
+       error = setattr_prepare(dentry, iattr);
        if (error)
                return error;
 
index 1b93650dda2fc5f51cb9c0d42c94efcc2f561a92..268fcf592b0ef7e59c835725e264f0891f8da8e3 100644 (file)
@@ -754,7 +754,7 @@ static int proc_sys_setattr(struct dentry *dentry, struct iattr *attr)
        if (attr->ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID))
                return -EPERM;
 
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                return error;
 
index be3ddd189cd4330b3da372f52a270d2ea786aa98..2bcbf4e77982a7933906d0a60ee75464b2dc72c3 100644 (file)
@@ -169,7 +169,7 @@ static int ramfs_nommu_setattr(struct dentry *dentry, struct iattr *ia)
        int ret = 0;
 
        /* POSIX UID/GID verification for setting inode attributes */
-       ret = inode_change_ok(inode, ia);
+       ret = setattr_prepare(dentry, ia);
        if (ret)
                return ret;
 
index c2c59f9ff04beec2a71b28e30c9b0340df0ede6a..cb7f518d37ae9ea5a2e18eb78b9403212e4d7258 100644 (file)
@@ -3312,7 +3312,7 @@ int reiserfs_setattr(struct dentry *dentry, struct iattr *attr)
        unsigned int ia_valid;
        int error;
 
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                return error;
 
index 82ddc09061e2891cec1a877d43dc2c248719114e..7ba997e31aeb9bfb3f0474dd55933061c63e11df 100644 (file)
@@ -33,7 +33,7 @@ static int sysv_setattr(struct dentry *dentry, struct iattr *attr)
        struct inode *inode = d_inode(dentry);
        int error;
 
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                return error;
 
index 7bbf420d128988470b0fb90491f05587b83b9052..b0a6a53263f37855af3a357897924cfb6ee8064d 100644 (file)
@@ -1262,7 +1262,7 @@ int ubifs_setattr(struct dentry *dentry, struct iattr *attr)
 
        dbg_gen("ino %lu, mode %#x, ia_valid %#x",
                inode->i_ino, inode->i_mode, attr->ia_valid);
-       err = inode_change_ok(inode, attr);
+       err = setattr_prepare(dentry, attr);
        if (err)
                return err;
 
index e855bf8d74b4b7bcf4a695f746f6876b71e4f2d0..dbcb3a4a0cb99ca261774767230bd2af77233640 100644 (file)
@@ -261,7 +261,7 @@ static int udf_setattr(struct dentry *dentry, struct iattr *attr)
        struct inode *inode = d_inode(dentry);
        int error;
 
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                return error;
 
index 9f49431e798d6778f371eb482eed0c0390c250c4..e4a4d248a0f53fa6e511d7922a2de38242d8039b 100644 (file)
@@ -1208,7 +1208,7 @@ int ufs_setattr(struct dentry *dentry, struct iattr *attr)
        unsigned int ia_valid = attr->ia_valid;
        int error;
 
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                return error;
 
index 794f5f5b1fb5cfd636725bfd65a7d21df916c36e..c84b26e46bc5e2c0fd1596c867dccf4d0266a803 100644 (file)
@@ -81,7 +81,7 @@ static int utimes_common(struct path *path, struct timespec *times)
                        newattrs.ia_valid |= ATTR_MTIME_SET;
                }
                /*
-                * Tell inode_change_ok(), that this is an explicit time
+                * Tell setattr_prepare(), that this is an explicit time
                 * update, even if neither ATTR_ATIME_SET nor ATTR_MTIME_SET
                 * were used.
                 */
@@ -90,7 +90,7 @@ static int utimes_common(struct path *path, struct timespec *times)
                /*
                 * If times is NULL (or both times are UTIME_NOW),
                 * then we need to check permissions, because
-                * inode_change_ok() won't do it.
+                * setattr_prepare() won't do it.
                 */
                error = -EPERM;
                 if (IS_IMMUTABLE(inode))
index f5db392e7d1efe8dcac29ce87525fabbe5038940..6d0d5d413fad29b806a6c881041487c75863aaad 100644 (file)
@@ -547,9 +547,7 @@ xfs_vn_change_ok(
        struct dentry   *dentry,
        struct iattr    *iattr)
 {
-       struct inode            *inode = d_inode(dentry);
-       struct xfs_inode        *ip = XFS_I(inode);
-       struct xfs_mount        *mp = ip->i_mount;
+       struct xfs_mount        *mp = XFS_I(d_inode(dentry))->i_mount;
 
        if (mp->m_flags & XFS_MOUNT_RDONLY)
                return -EROFS;
@@ -557,14 +555,14 @@ xfs_vn_change_ok(
        if (XFS_FORCED_SHUTDOWN(mp))
                return -EIO;
 
-       return inode_change_ok(inode, iattr);
+       return setattr_prepare(dentry, iattr);
 }
 
 /*
  * Set non-size attributes of an inode.
  *
  * Caution: The caller of this function is responsible for calling
- * inode_change_ok() or otherwise verifying the change is fine.
+ * setattr_prepare() or otherwise verifying the change is fine.
  */
 int
 xfs_setattr_nonsize(
@@ -772,7 +770,7 @@ xfs_vn_setattr_nonsize(
  * Truncate file.  Must have write permission and not be a directory.
  *
  * Caution: The caller of this function is responsible for calling
- * inode_change_ok() or otherwise verifying the change is fine.
+ * setattr_prepare() or otherwise verifying the change is fine.
  */
 int
 xfs_setattr_size(
index 3523bf62f32869f6c936f93386fa04db5f6edbb9..943a21cbb469eee173b95ec8ac348983e0b47aa0 100644 (file)
@@ -2994,7 +2994,7 @@ extern int buffer_migrate_page(struct address_space *,
 #define buffer_migrate_page NULL
 #endif
 
-extern int inode_change_ok(const struct inode *, struct iattr *);
+extern int setattr_prepare(struct dentry *, struct iattr *);
 extern int inode_newsize_ok(const struct inode *, loff_t offset);
 extern void setattr_copy(struct inode *inode, const struct iattr *attr);
 
index 7f7748a0f9e1f738fd1ffcaceccdee2ae54d8d35..886b1236e68a5022ebfd6c610cc84d9cbaa3803f 100644 (file)
@@ -959,7 +959,7 @@ static int shmem_setattr(struct dentry *dentry, struct iattr *attr)
        struct shmem_sb_info *sbinfo = SHMEM_SB(inode->i_sb);
        int error;
 
-       error = inode_change_ok(inode, attr);
+       error = setattr_prepare(dentry, attr);
        if (error)
                return error;