aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/inode.c
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2006-03-20 13:44:48 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2006-03-20 13:44:48 -0500
commit03f28e3a2059fc466761d872122f30acb7be61ae (patch)
treed478e553b79520c34bb3d06e75b59609de2993f4 /fs/nfs/inode.c
parent01d0ae8beaee75d954900109619b700fe68707d9 (diff)
NFS: Make nfs_fhget() return appropriate error values
Currently it returns NULL, which usually gets interpreted as ENOMEM. In fact it can mean a host of issues. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/inode.c')
-rw-r--r--fs/nfs/inode.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index 17654bffc3c6..a0cda53461b3 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -241,7 +241,6 @@ static struct inode *
241nfs_get_root(struct super_block *sb, struct nfs_fh *rootfh, struct nfs_fsinfo *fsinfo) 241nfs_get_root(struct super_block *sb, struct nfs_fh *rootfh, struct nfs_fsinfo *fsinfo)
242{ 242{
243 struct nfs_server *server = NFS_SB(sb); 243 struct nfs_server *server = NFS_SB(sb);
244 struct inode *rooti;
245 int error; 244 int error;
246 245
247 error = server->rpc_ops->getroot(server, rootfh, fsinfo); 246 error = server->rpc_ops->getroot(server, rootfh, fsinfo);
@@ -250,10 +249,7 @@ nfs_get_root(struct super_block *sb, struct nfs_fh *rootfh, struct nfs_fsinfo *f
250 return ERR_PTR(error); 249 return ERR_PTR(error);
251 } 250 }
252 251
253 rooti = nfs_fhget(sb, rootfh, fsinfo->fattr); 252 return nfs_fhget(sb, rootfh, fsinfo->fattr);
254 if (!rooti)
255 return ERR_PTR(-ENOMEM);
256 return rooti;
257} 253}
258 254
259/* 255/*
@@ -853,7 +849,7 @@ nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr)
853 .fh = fh, 849 .fh = fh,
854 .fattr = fattr 850 .fattr = fattr
855 }; 851 };
856 struct inode *inode = NULL; 852 struct inode *inode = ERR_PTR(-ENOENT);
857 unsigned long hash; 853 unsigned long hash;
858 854
859 if ((fattr->valid & NFS_ATTR_FATTR) == 0) 855 if ((fattr->valid & NFS_ATTR_FATTR) == 0)
@@ -866,8 +862,11 @@ nfs_fhget(struct super_block *sb, struct nfs_fh *fh, struct nfs_fattr *fattr)
866 862
867 hash = nfs_fattr_to_ino_t(fattr); 863 hash = nfs_fattr_to_ino_t(fattr);
868 864
869 if (!(inode = iget5_locked(sb, hash, nfs_find_actor, nfs_init_locked, &desc))) 865 inode = iget5_locked(sb, hash, nfs_find_actor, nfs_init_locked, &desc);
866 if (inode == NULL) {
867 inode = ERR_PTR(-ENOMEM);
870 goto out_no_inode; 868 goto out_no_inode;
869 }
871 870
872 if (inode->i_state & I_NEW) { 871 if (inode->i_state & I_NEW) {
873 struct nfs_inode *nfsi = NFS_I(inode); 872 struct nfs_inode *nfsi = NFS_I(inode);
@@ -936,7 +935,7 @@ out:
936 return inode; 935 return inode;
937 936
938out_no_inode: 937out_no_inode:
939 printk("nfs_fhget: iget failed\n"); 938 dprintk("nfs_fhget: iget failed with error %ld\n", PTR_ERR(inode));
940 goto out; 939 goto out;
941} 940}
942 941