This patch replaces VFS helper function calls caused by
userland process's request with VFS wrapper functions call.
This patch doesn't modify individual filesystems in fs/*/ directory.

Signed-off-by: Tetsuo Handa <[EMAIL PROTECTED]>
---
 fs/namei.c         |   34 +++++++++++++++++++---------------
 fs/open.c          |   23 +++++++++++++----------
 net/unix/af_unix.c |    3 ++-
 3 files changed, 34 insertions(+), 26 deletions(-)

--- linux-2.6-mm.orig/fs/open.c 2007-11-14 15:14:48.000000000 +0900
+++ linux-2.6-mm/fs/open.c      2007-11-14 15:15:38.000000000 +0900
@@ -271,7 +271,8 @@ static long do_sys_truncate(const char _
        error = locks_verify_truncate(inode, NULL, length);
        if (!error) {
                DQUOT_INIT(inode);
-               error = do_truncate(nd.path.dentry, length, 0, NULL);
+               error = do_truncate2(nd.path.dentry, nd.path.mnt, length, 0,
+                                    NULL);
        }
 
 put_write_and_out:
@@ -326,7 +327,8 @@ static long do_sys_ftruncate(unsigned in
 
        error = locks_verify_truncate(inode, file, length);
        if (!error)
-               error = do_truncate(dentry, length, ATTR_MTIME|ATTR_CTIME, 
file);
+               error = do_truncate2(dentry, file->f_path.mnt, length,
+                                    ATTR_MTIME|ATTR_CTIME, file);
 out_putf:
        fput(file);
 out:
@@ -589,7 +591,7 @@ asmlinkage long sys_fchmod(unsigned int 
                mode = inode->i_mode;
        newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO);
        newattrs.ia_valid = ATTR_MODE | ATTR_CTIME;
-       err = notify_change(dentry, &newattrs);
+       err = notify_change2(dentry, file->f_path.mnt, &newattrs);
        mutex_unlock(&inode->i_mutex);
 
 out_drop_write:
@@ -626,7 +628,7 @@ asmlinkage long sys_fchmodat(int dfd, co
                mode = inode->i_mode;
        newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO);
        newattrs.ia_valid = ATTR_MODE | ATTR_CTIME;
-       error = notify_change(nd.path.dentry, &newattrs);
+       error = notify_change2(nd.path.dentry, nd.path.mnt, &newattrs);
        mutex_unlock(&inode->i_mutex);
 
 out_drop_write:
@@ -642,7 +644,8 @@ asmlinkage long sys_chmod(const char __u
        return sys_fchmodat(AT_FDCWD, filename, mode);
 }
 
-static int chown_common(struct dentry * dentry, uid_t user, gid_t group)
+static int chown_common(struct dentry *dentry, struct vfsmount *mnt,
+                       uid_t user, gid_t group)
 {
        struct inode * inode;
        int error;
@@ -669,7 +672,7 @@ static int chown_common(struct dentry * 
                newattrs.ia_valid |=
                        ATTR_KILL_SUID | ATTR_KILL_SGID | ATTR_KILL_PRIV;
        mutex_lock(&inode->i_mutex);
-       error = notify_change(dentry, &newattrs);
+       error = notify_change2(dentry, mnt, &newattrs);
        mutex_unlock(&inode->i_mutex);
 out:
        return error;
@@ -686,7 +689,7 @@ asmlinkage long sys_chown(const char __u
        error = mnt_want_write(nd.path.mnt);
        if (error)
                goto out_release;
-       error = chown_common(nd.path.dentry, user, group);
+       error = chown_common(nd.path.dentry, nd.path.mnt, user, group);
        mnt_drop_write(nd.path.mnt);
 out_release:
        path_put(&nd.path);
@@ -711,7 +714,7 @@ asmlinkage long sys_fchownat(int dfd, co
        error = mnt_want_write(nd.path.mnt);
        if (error)
                goto out_release;
-       error = chown_common(nd.path.dentry, user, group);
+       error = chown_common(nd.path.dentry, nd.path.mnt, user, group);
        mnt_drop_write(nd.path.mnt);
 out_release:
        path_put(&nd.path);
@@ -730,7 +733,7 @@ asmlinkage long sys_lchown(const char __
        error = mnt_want_write(nd.path.mnt);
        if (error)
                goto out_release;
-       error = chown_common(nd.path.dentry, user, group);
+       error = chown_common(nd.path.dentry, nd.path.mnt, user, group);
        mnt_drop_write(nd.path.mnt);
 out_release:
        path_put(&nd.path);
@@ -754,7 +757,7 @@ asmlinkage long sys_fchown(unsigned int 
                goto out_fput;
        dentry = file->f_path.dentry;
        audit_inode(NULL, dentry);
-       error = chown_common(dentry, user, group);
+       error = chown_common(dentry, file->f_vfsmnt, user, group);
        mnt_drop_write(file->f_vfsmnt);
 out_fput:
        fput(file);
--- linux-2.6-mm.orig/fs/namei.c        2007-11-14 15:14:48.000000000 +0900
+++ linux-2.6-mm/fs/namei.c     2007-11-14 15:22:32.000000000 +0900
@@ -1663,7 +1663,7 @@ int may_open(struct nameidata *nd, int a
                if (!error) {
                        DQUOT_INIT(inode);
 
-                       error = do_truncate(dentry, 0,
+                       error = do_truncate2(dentry, nd->path.mnt, 0,
                                            ATTR_MTIME|ATTR_CTIME|ATTR_OPEN,
                                            NULL);
                }
@@ -1690,7 +1690,7 @@ static int __open_namei_create(struct na
 
        if (!IS_POSIXACL(dir->d_inode))
                mode &= ~current->fs->umask;
-       error = vfs_create(dir->d_inode, path->dentry, mode, nd);
+       error = vfs_create2(dir->d_inode, path->dentry, mode, nd);
        mutex_unlock(&dir->d_inode->i_mutex);
        dput(nd->path.dentry);
        nd->path.dentry = path->dentry;
@@ -2076,16 +2076,17 @@ asmlinkage long sys_mknodat(int dfd, con
                goto out_dput;
        switch (mode & S_IFMT) {
                case 0: case S_IFREG:
-                       error = vfs_create(nd.path.dentry->d_inode, dentry,
-                                               mode, &nd);
+                       error = vfs_create2(nd.path.dentry->d_inode, dentry,
+                                           mode, &nd);
                        break;
                case S_IFCHR: case S_IFBLK:
-                       error = vfs_mknod(nd.path.dentry->d_inode, dentry, mode,
-                                       new_decode_dev(dev));
+                       error = vfs_mknod2(nd.path.dentry->d_inode, dentry,
+                                          nd.path.mnt, mode,
+                                          new_decode_dev(dev));
                        break;
                case S_IFIFO: case S_IFSOCK:
-                       error = vfs_mknod(nd.path.dentry->d_inode, dentry,
-                                               mode, 0);
+                       error = vfs_mknod2(nd.path.dentry->d_inode, dentry,
+                                          nd.path.mnt, mode, 0);
                        break;
        }
        mnt_drop_write(nd.path.mnt);
@@ -2152,7 +2153,7 @@ asmlinkage long sys_mkdirat(int dfd, con
        error = mnt_want_write(nd.path.mnt);
        if (error)
                goto out_dput;
-       error = vfs_mkdir(nd.path.dentry->d_inode, dentry, mode);
+       error = vfs_mkdir2(nd.path.dentry->d_inode, dentry, nd.path.mnt, mode);
        mnt_drop_write(nd.path.mnt);
 out_dput:
        dput(dentry);
@@ -2264,7 +2265,7 @@ static long do_rmdir(int dfd, const char
        error = mnt_want_write(nd.path.mnt);
        if (error)
                goto exit3;
-       error = vfs_rmdir(nd.path.dentry->d_inode, dentry);
+       error = vfs_rmdir2(nd.path.dentry->d_inode, dentry, nd.path.mnt);
        mnt_drop_write(nd.path.mnt);
 exit3:
        dput(dentry);
@@ -2349,7 +2350,8 @@ static long do_unlinkat(int dfd, const c
                error = mnt_want_write(nd.path.mnt);
                if (error)
                        goto exit2;
-               error = vfs_unlink(nd.path.dentry->d_inode, dentry);
+               error = vfs_unlink2(nd.path.dentry->d_inode, dentry,
+                                   nd.path.mnt);
                mnt_drop_write(nd.path.mnt);
        exit2:
                dput(dentry);
@@ -2434,7 +2436,8 @@ asmlinkage long sys_symlinkat(const char
        error = mnt_want_write(nd.path.mnt);
        if (error)
                goto out_dput;
-       error = vfs_symlink(nd.path.dentry->d_inode, dentry, from, S_IALLUGO);
+       error = vfs_symlink2(nd.path.dentry->d_inode, dentry, nd.path.mnt, from,
+                            S_IALLUGO);
        mnt_drop_write(nd.path.mnt);
 out_dput:
        dput(dentry);
@@ -2534,7 +2537,8 @@ asmlinkage long sys_linkat(int olddfd, c
        error = mnt_want_write(nd.path.mnt);
        if (error)
                goto out_dput;
-       error = vfs_link(old_nd.path.dentry, nd.path.dentry->d_inode, 
new_dentry);
+       error = vfs_link2(old_nd.path.dentry, nd.path.dentry->d_inode,
+                         new_dentry, nd.path.mnt);
        mnt_drop_write(nd.path.mnt);
 out_dput:
        dput(new_dentry);
@@ -2765,8 +2769,8 @@ static int do_rename(int olddfd, const c
        error = mnt_want_write(oldnd.path.mnt);
        if (error)
                goto exit5;
-       error = vfs_rename(old_dir->d_inode, old_dentry,
-                                  new_dir->d_inode, new_dentry);
+       error = vfs_rename2(old_dir->d_inode, old_dentry,
+                           new_dir->d_inode, new_dentry, newnd.path.mnt);
        mnt_drop_write(oldnd.path.mnt);
 exit5:
        dput(new_dentry);
--- linux-2.6-mm.orig/net/unix/af_unix.c        2007-11-14 15:14:48.000000000 
+0900
+++ linux-2.6-mm/net/unix/af_unix.c     2007-11-14 15:15:38.000000000 +0900
@@ -842,7 +842,8 @@ static int unix_bind(struct socket *sock
                err = mnt_want_write(nd.path.mnt);
                if (err)
                        goto out_mknod_dput;
-               err = vfs_mknod(nd.path.dentry->d_inode, dentry, mode, 0);
+               err = vfs_mknod2(nd.path.dentry->d_inode, dentry, nd.path.mnt,
+                                mode, 0);
                mnt_drop_write(nd.path.mnt);
                if (err)
                        goto out_mknod_dput;

-- 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to