aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2005-02-28 11:46:56 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2005-02-28 11:46:56 +0000
commitf43f06394ff53c2cb36a6843298fe36900cd902c (patch)
treeec83707d80bdc26ed5c82f7d492ffa77a3a08cc8 /kernel
parent47c529838cde03fa23387f2bf91dfb5706a4470b (diff)
downloadlibfuse-f43f06394ff53c2cb36a6843298fe36900cd902c.tar.gz
fixes
Diffstat (limited to 'kernel')
-rw-r--r--kernel/dir.c1
-rw-r--r--kernel/file.c1
-rw-r--r--kernel/inode.c22
3 files changed, 17 insertions, 7 deletions
diff --git a/kernel/dir.c b/kernel/dir.c
index 7903a66..be51309 100644
--- a/kernel/dir.c
+++ b/kernel/dir.c
@@ -1016,6 +1016,7 @@ static struct inode_operations fuse_dir_inode_operations = {
};
static struct file_operations fuse_dir_operations = {
+ .llseek = generic_file_llseek,
.read = generic_read_dir,
.readdir = fuse_readdir,
.open = fuse_dir_open,
diff --git a/kernel/file.c b/kernel/file.c
index 3adcb30..74921d6 100644
--- a/kernel/file.c
+++ b/kernel/file.c
@@ -641,6 +641,7 @@ static int fuse_set_page_dirty(struct page *page)
#endif
static struct file_operations fuse_file_operations = {
+ .llseek = generic_file_llseek,
.read = fuse_file_read,
.write = fuse_file_write,
.mmap = fuse_file_mmap,
diff --git a/kernel/inode.c b/kernel/inode.c
index 67bc755..f702a4a 100644
--- a/kernel/inode.c
+++ b/kernel/inode.c
@@ -520,26 +520,34 @@ static struct inode *get_root_inode(struct super_block *sb, unsigned mode)
#ifdef KERNEL_2_6
static struct dentry *fuse_get_dentry(struct super_block *sb, void *vobjp)
{
+ int err;
__u32 *objp = vobjp;
unsigned long nodeid = objp[0];
__u32 generation = objp[1];
struct inode *inode;
struct dentry *entry;
+ err = -ESTALE;
if (nodeid == 0)
- return ERR_PTR(-ESTALE);
+ goto error;
inode = ilookup5(sb, nodeid, fuse_inode_eq, &nodeid);
- if (!inode || inode->i_generation != generation)
- return ERR_PTR(-ESTALE);
+ if (!inode)
+ goto error;
+ if (inode->i_generation != generation)
+ goto error_iput;
+ err = -ENOMEM;
entry = d_alloc_anon(inode);
- if (!entry) {
- iput(inode);
- return ERR_PTR(-ENOMEM);
- }
+ if (!entry)
+ goto error_iput;
return entry;
+
+ error_iput:
+ iput(inode);
+ error:
+ return ERR_PTR(err);
}
static int fuse_encode_fh(struct dentry *dentry, __u32 *fh, int *max_len,