+2004-09-14 Miklos Szeredi <miklos@szeredi.hu>
+
+ * Check temporary file creation failure in do_getdir(). Bug
+ spotted by Terje Oseberg
+
+2004-09-13 Miklos Szeredi <miklos@szeredi.hu>
+
+ * Make requests non-interruptible so race with FORGET is avoided.
+ This is only a temporary solution
+
2004-09-09 Miklos Szeredi <miklos@szeredi.hu>
* Fix bug in case two FORGETs for the same node are executed in
void request_send(struct fuse_conn *fc, struct fuse_in *in,
struct fuse_out *out)
{
- __request_send(fc, in, out, 1);
+ /* There are problems with interrupted requests so it's
+ disabled for now */
+ __request_send(fc, in, out, 0);
}
void request_send_nonint(struct fuse_conn *fc, struct fuse_in *in,
dh.fuse = f;
dh.fp = tmpfile();
dh.dir = in->ino;
- res = -ENOENT;
- path = get_path(f, in->ino);
- if(path != NULL) {
- res = -ENOSYS;
- if(f->op.getdir)
- res = f->op.getdir(path, &dh, (fuse_dirfil_t) fill_dir);
- free(path);
+ res = -EIO;
+
+ if (dh.fp == NULL)
+ perror("fuse: failed to create temporary file");
+ else {
+ res = -ENOENT;
+ path = get_path(f, in->ino);
+ if(path != NULL) {
+ res = -ENOSYS;
+ if(f->op.getdir)
+ res = f->op.getdir(path, &dh, (fuse_dirfil_t) fill_dir);
+ free(path);
+ }
+ fflush(dh.fp);
}
- fflush(dh.fp);
-
memset(&arg, 0, sizeof(struct fuse_getdir_out));
- arg.fd = fileno(dh.fp);
+ if (res == 0)
+ arg.fd = fileno(dh.fp);
send_reply(f, in, res, &arg, sizeof(arg));
- fclose(dh.fp);
+ if (dh.fp != NULL)
+ fclose(dh.fp);
}
static void do_mknod(struct fuse *f, struct fuse_in_header *in,