aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/dir.c
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2004-06-22 18:46:02 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2004-06-22 18:46:02 +0000
commitd3dd2d5466a520f7ca866b478faecd1afd3de1f5 (patch)
tree4b26642d6057813ce5d3a18b37db1022207a91b6 /kernel/dir.c
parent2778f6cf5d27e40337f163f476fac8f0ffec1130 (diff)
downloadlibfuse-d3dd2d5466a520f7ca866b478faecd1afd3de1f5.tar.gz
request allocation improvements
Diffstat (limited to 'kernel/dir.c')
-rw-r--r--kernel/dir.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/kernel/dir.c b/kernel/dir.c
index 59cab49..af41ab5 100644
--- a/kernel/dir.c
+++ b/kernel/dir.c
@@ -78,8 +78,6 @@ static void fuse_init_inode(struct inode *inode, struct fuse_attr *attr)
new_decode_dev(attr->rdev));
} else
printk("fuse_init_inode: bad file type: %o\n", inode->i_mode);
-
- inode->u.generic_ip = inode;
}
struct inode *fuse_iget(struct super_block *sb, ino_t ino, int generation,
@@ -90,6 +88,13 @@ struct inode *fuse_iget(struct super_block *sb, ino_t ino, int generation,
inode = iget(sb, ino);
if (inode) {
if (!inode->u.generic_ip) {
+ struct fuse_req *req = fuse_request_alloc();
+ if (!req) {
+ iput(inode);
+ inode = NULL;
+ goto out;
+ }
+ inode->u.generic_ip = req;
inode->i_generation = generation;
fuse_init_inode(inode, attr);
} else if (inode->i_generation != generation)
@@ -98,6 +103,7 @@ struct inode *fuse_iget(struct super_block *sb, ino_t ino, int generation,
change_attributes(inode, attr);
inode->i_version = version;
}
+ out:
return inode;
}