if (error)
                return error;
        mutex_lock(&inode->i_mutex);
-       error = security_path_chmod(path->dentry, path->mnt, mode);
+       error = security_path_chmod(path, mode);
        if (error)
                goto out_unlock;
        newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO);
 
                          struct dentry *new_dentry);
        int (*path_rename) (struct path *old_dir, struct dentry *old_dentry,
                            struct path *new_dir, struct dentry *new_dentry);
-       int (*path_chmod) (struct dentry *dentry, struct vfsmount *mnt,
-                          umode_t mode);
+       int (*path_chmod) (struct path *path, umode_t mode);
        int (*path_chown) (struct path *path, uid_t uid, gid_t gid);
        int (*path_chroot) (struct path *path);
 #endif
                       struct dentry *new_dentry);
 int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
                         struct path *new_dir, struct dentry *new_dentry);
-int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
-                       umode_t mode);
+int security_path_chmod(struct path *path, umode_t mode);
 int security_path_chown(struct path *path, uid_t uid, gid_t gid);
 int security_path_chroot(struct path *path);
 #else  /* CONFIG_SECURITY_PATH */
        return 0;
 }
 
-static inline int security_path_chmod(struct dentry *dentry,
-                                     struct vfsmount *mnt,
-                                     umode_t mode)
+static inline int security_path_chmod(struct path *path, umode_t mode)
 {
        return 0;
 }
 
        return error;
 }
 
-static int apparmor_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
-                              umode_t mode)
+static int apparmor_path_chmod(struct path *path, umode_t mode)
 {
-       if (!mediated_filesystem(dentry->d_inode))
+       if (!mediated_filesystem(path->dentry->d_inode))
                return 0;
 
-       return common_perm_mnt_dentry(OP_CHMOD, mnt, dentry, AA_MAY_CHMOD);
+       return common_perm_mnt_dentry(OP_CHMOD, path->mnt, path->dentry, AA_MAY_CHMOD);
 }
 
 static int apparmor_path_chown(struct path *path, uid_t uid, gid_t gid)
 
        return 0;
 }
 
-static int cap_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
-                         umode_t mode)
+static int cap_path_chmod(struct path *path, umode_t mode)
 {
        return 0;
 }
 
        return security_ops->path_truncate(path);
 }
 
-int security_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
-                       umode_t mode)
+int security_path_chmod(struct path *path, umode_t mode)
 {
-       if (unlikely(IS_PRIVATE(dentry->d_inode)))
+       if (unlikely(IS_PRIVATE(path->dentry->d_inode)))
                return 0;
-       return security_ops->path_chmod(dentry, mnt, mode);
+       return security_ops->path_chmod(path, mode);
 }
 
 int security_path_chown(struct path *path, uid_t uid, gid_t gid)
 
 /**
  * tomoyo_path_chmod - Target for security_path_chmod().
  *
- * @dentry: Pointer to "struct dentry".
- * @mnt:    Pointer to "struct vfsmount".
- * @mode:   DAC permission mode.
+ * @path: Pointer to "struct path".
+ * @mode: DAC permission mode.
  *
  * Returns 0 on success, negative value otherwise.
  */
-static int tomoyo_path_chmod(struct dentry *dentry, struct vfsmount *mnt,
-                            umode_t mode)
+static int tomoyo_path_chmod(struct path *path, umode_t mode)
 {
-       struct path path = { mnt, dentry };
-       return tomoyo_path_number_perm(TOMOYO_TYPE_CHMOD, &path,
+       return tomoyo_path_number_perm(TOMOYO_TYPE_CHMOD, path,
                                       mode & S_IALLUGO);
 }