This is part [3/7] of the v9fs-2.0.2 patch against Linux 2.6.13-rc2-mm2.

This part of the patch contains the VFS inode interfaces changes related
to hch's comments.

Signed-off-by: Eric Van Hensbergen <[EMAIL PROTECTED]>


 ----------

 fs/9p/vfs_inode.c   |   69 +++++-----------------------------------------------
 1 files changed, 7 insertions(+), 62 deletions(-)

 ----------

--- a/fs/9p/vfs_inode.c
+++ b/fs/9p/vfs_inode.c
@@ -34,9 +34,9 @@
 #include <linux/smp_lock.h>
 #include <linux/inet.h>
 #include <linux/namei.h>
+#include <linux/idr.h>
 
 #include "debug.h"
-#include "idpool.h"
 #include "v9fs.h"
 #include "9p.h"
 #include "v9fs_vfs.h"
@@ -268,7 +268,6 @@ struct inode *v9fs_get_inode(struct supe
                default:
                        dprintk(DEBUG_ERROR, "BAD mode 0x%x S_IFMT 0x%x\n",
                                mode, mode & S_IFMT);
-                       sb->s_op->put_inode(inode);
                        return ERR_PTR(-EINVAL);
                }
        } else {
@@ -446,30 +445,14 @@ static int v9fs_remove(struct inode *dir
        dprintk(DEBUG_VFS, "inode: %p dentry: %p rmdir: %d\n", dir, file,
                rmdir);
 
-       if (!dir || !S_ISDIR(dir->i_mode)) {
-               dprintk(DEBUG_ERROR, "dir inode is NULL or not a directory\n");
-               return -ENOENT;
-       }
-
-       if (!file) {
-               dprintk(DEBUG_ERROR, "NO dentry for file to remove\n");
-               return -EBADF;
-       }
-
-       if (!file->d_inode) {
-               dprintk(DEBUG_ERROR,
-                       "dentry %p NO INODE for file to remove!\n", file);
-               return -EBADF;
-       }
-
        file_inode = file->d_inode;
        sb = file_inode->i_sb;
        v9ses = v9fs_inode2v9ses(file_inode);
        v9fid = v9fs_fid_lookup(file, FID_OP);
 
-       if (!sb || !v9ses || !v9fid) {
+       if (!v9fid) {
                dprintk(DEBUG_ERROR,
-                       "no superblock or v9session or v9fs_fid\n");
+                       "no v9fs_fid\n");
                return -EBADF;
        }
 
@@ -480,14 +463,6 @@ static int v9fs_remove(struct inode *dir
                return -EBADF;
        }
 
-       if (rmdir && (!S_ISDIR(file_inode->i_mode))) {
-               dprintk(DEBUG_ERROR, "trying to remove non-directory\n");
-               return -ENOTDIR;
-       } else if ((!rmdir) && S_ISDIR(file_inode->i_mode)) {
-               dprintk(DEBUG_ERROR, "trying to remove directory\n");
-               return -EISDIR;
-       }
-
        result = v9fs_t_remove(v9ses, fid, &fcall);
        if (result < 0)
                dprintk(DEBUG_ERROR, "remove of file fails: %s(%d)\n",
@@ -498,7 +473,6 @@ static int v9fs_remove(struct inode *dir
        }
 
        kfree(fcall);
-
        return result;
 }
 
@@ -556,17 +530,12 @@ static struct dentry *v9fs_vfs_lookup(st
        dprintk(DEBUG_VFS, "dir: %p dentry: (%s) %p nameidata: %p\n",
                dir, dentry->d_iname, dentry, nameidata);
 
-       if (!dir) {
-               dprintk(DEBUG_ERROR, "no dir inode\n");
-               return ERR_PTR(-EINVAL);
-       }
-
        sb = dir->i_sb;
        v9ses = v9fs_inode2v9ses(dir);
        dirfid = v9fs_fid_lookup(dentry->d_parent, FID_WALK);
 
-       if (!sb || !v9ses || !dirfid) {
-               dprintk(DEBUG_ERROR, "no superblock, v9ses, or dirfid\n");
+       if (!dirfid) {
+               dprintk(DEBUG_ERROR, "no dirfid\n");
                return ERR_PTR(-EINVAL);
        }
 
@@ -867,7 +836,7 @@ void
 v9fs_mistat2inode(struct v9fs_stat *mistat, struct inode *inode,
                  struct super_block *sb)
 {
-       struct v9fs_session_info *v9ses = sb ? sb->s_fs_info : NULL;
+       struct v9fs_session_info *v9ses = sb->s_fs_info;
 
        inode->i_nlink = 1;
 
@@ -878,7 +847,7 @@ v9fs_mistat2inode(struct v9fs_stat *mist
        inode->i_uid = -1;
        inode->i_gid = -1;
 
-       if (v9ses && v9ses->extended) {
+       if (v9ses->extended) {
                /* TODO: string to uid mapping via user-space daemon */
                inode->i_uid = mistat->n_uid;
                inode->i_gid = mistat->n_gid;
@@ -959,7 +928,6 @@ v9fs_vfs_symlink(struct inode *dir, stru
        int retval = -EPERM;
        struct v9fs_fid *newfid;
        struct v9fs_session_info *v9ses = v9fs_inode2v9ses(dir);
-       struct super_block *sb = dir ? dir->i_sb : NULL;
        struct v9fs_fcall *fcall = NULL;
        struct v9fs_stat *mistat = kmalloc(v9ses->maxdata, GFP_KERNEL);
 
@@ -969,11 +937,6 @@ v9fs_vfs_symlink(struct inode *dir, stru
        if(!mistat)
                return -ENOMEM;
 
-       if ((!dentry) || (!sb) || (!v9ses)) {
-               dprintk(DEBUG_ERROR, "problem with arguments\n");
-               return -EBADF;
-       }
-
        if (!v9ses->extended) {
                dprintk(DEBUG_ERROR, "not extended\n");
                goto FreeFcall;
@@ -997,9 +960,7 @@ v9fs_vfs_symlink(struct inode *dir, stru
                goto FreeFcall;
        }
 
-       /* need to update dcache so we show up */
        kfree(fcall);
-       fcall = NULL;
 
        if (v9fs_t_clunk(v9ses, newfid->fid, &fcall)) {
                dprintk(DEBUG_ERROR, "clunk for symlink failed: %s\n",
@@ -1172,7 +1133,6 @@ v9fs_vfs_link(struct dentry *old_dentry,
 {
        int retval = -EPERM;
        struct v9fs_session_info *v9ses = v9fs_inode2v9ses(dir);
-       struct super_block *sb = dir ? dir->i_sb : NULL;
        struct v9fs_fcall *fcall = NULL;
        struct v9fs_stat *mistat = kmalloc(v9ses->maxdata, GFP_KERNEL);
        struct v9fs_fid *oldfid = v9fs_fid_lookup(old_dentry, FID_OP);
@@ -1185,12 +1145,6 @@ v9fs_vfs_link(struct dentry *old_dentry,
        if (!mistat)
                return -ENOMEM;
 
-       if ((!dentry) || (!sb) || (!v9ses) || (!oldfid)) {
-               dprintk(DEBUG_ERROR, "problem with arguments\n");
-               retval = -EBADF;
-               goto FreeMem;
-       }
-
        if (!v9ses->extended) {
                dprintk(DEBUG_ERROR, "not extended\n");
                goto FreeMem;
@@ -1221,9 +1175,7 @@ v9fs_vfs_link(struct dentry *old_dentry,
                goto FreeMem;
        }
 
-       /* need to update dcache so we show up */
        kfree(fcall);
-       fcall = NULL;
 
        if (v9fs_t_clunk(v9ses, newfid->fid, &fcall)) {
                dprintk(DEBUG_ERROR, "clunk for symlink failed: %s\n",
@@ -1258,7 +1210,6 @@ v9fs_vfs_mknod(struct inode *dir, struct
        int retval = -EPERM;
        struct v9fs_fid *newfid;
        struct v9fs_session_info *v9ses = v9fs_inode2v9ses(dir);
-       struct super_block *sb = dir ? dir->i_sb : NULL;
        struct v9fs_fcall *fcall = NULL;
        struct v9fs_stat *mistat = kmalloc(v9ses->maxdata, GFP_KERNEL);
        char *symname = __getname();
@@ -1274,12 +1225,6 @@ v9fs_vfs_mknod(struct inode *dir, struct
                goto FreeMem;
        }
 
-       if ((!dentry) || (!sb) || (!v9ses)) {
-               dprintk(DEBUG_ERROR, "problem with arguments\n");
-               retval = -EBADF;
-               goto FreeMem;
-       }
-
        if (!v9ses->extended) {
                dprintk(DEBUG_ERROR, "not extended\n");
                goto FreeMem;
-
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to