aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2001-11-16 21:40:00 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2001-11-16 21:40:00 +0000
commit4c749295c233ceaa91b53c816eb4ad3ccfee4748 (patch)
tree116ecf0a75643e389440dff9ee97c062b588aa7b
parent66aeb510efbf3d6d46e5848be53162c156ee27a6 (diff)
downloadlibfuse-4c749295c233ceaa91b53c816eb4ad3ccfee4748.tar.gz
fixes in kernel module
-rw-r--r--kernel/dev.c22
-rw-r--r--kernel/dir.c5
-rw-r--r--python/fuse.py2
3 files changed, 26 insertions, 3 deletions
diff --git a/kernel/dev.c b/kernel/dev.c
index 1cc12a2..d4206e1 100644
--- a/kernel/dev.c
+++ b/kernel/dev.c
@@ -18,6 +18,26 @@
static struct proc_dir_entry *proc_fs_fuse;
struct proc_dir_entry *proc_fuse_dev;
+static int interrupt_error(enum fuse_opcode opcode)
+{
+ switch(opcode) {
+ case FUSE_LOOKUP:
+ case FUSE_GETATTR:
+ case FUSE_READLINK:
+ case FUSE_GETDIR:
+ case FUSE_OPEN:
+ case FUSE_READ:
+ case FUSE_WRITE:
+ return -ERESTARTSYS;
+
+ default:
+ /* Operations which modify the filesystem cannot be safely
+ restarted, because it is uncertain whether the
+ operation has completed or not... */
+ return -EINTR;
+ }
+}
+
static int request_wait_answer(struct fuse_req *req)
{
int ret = 0;
@@ -27,7 +47,7 @@ static int request_wait_answer(struct fuse_req *req)
while(!list_empty(&req->list)) {
set_current_state(TASK_INTERRUPTIBLE);
if(signal_pending(current)) {
- ret = -EINTR;
+ ret = interrupt_error(req->opcode);
break;
}
spin_unlock(&fuse_lock);
diff --git a/kernel/dir.c b/kernel/dir.c
index 8c60afa..537b71c 100644
--- a/kernel/dir.c
+++ b/kernel/dir.c
@@ -545,7 +545,10 @@ static int fuse_dentry_revalidate(struct dentry *entry, int flags)
{
if(!entry->d_inode)
return 0;
- else if(!(flags & LOOKUP_CONTINUE))
+ /* Must not revaidate too soon, since kernel revalidate logic is
+ broken, and could return ENOENT */
+ else if(!(flags & LOOKUP_CONTINUE) &&
+ time_after(jiffies, entry->d_time + FUSE_REVALIDATE_TIME))
return 0;
else
return 1;
diff --git a/python/fuse.py b/python/fuse.py
index dff6f47..7336fd7 100644
--- a/python/fuse.py
+++ b/python/fuse.py
@@ -105,6 +105,6 @@ class Xmp(Fuse):
if __name__ == '__main__':
server = Xmp()
- server.flags = DEBUG
+ server.flags = 0
server.multithreaded = 1;
server.main()