Skip to content

Commit

Permalink
fuse: fix poll notify
Browse files Browse the repository at this point in the history
Move fuse_copy_finish() to before calling fuse_notify_poll_wakeup().
This is not a big issue because fuse_notify_poll_wakeup() should be
atomic, but it's cleaner this way, and later uses of notification will
need to be able to finish the copying before performing some actions.

Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
  • Loading branch information
Miklos Szeredi authored and Miklos Szeredi committed Jan 26, 2009
1 parent 26c3679 commit f6d47a1
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions fs/fuse/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -826,16 +826,21 @@ static int fuse_notify_poll(struct fuse_conn *fc, unsigned int size,
struct fuse_copy_state *cs)
{
struct fuse_notify_poll_wakeup_out outarg;
int err;
int err = -EINVAL;

if (size != sizeof(outarg))
return -EINVAL;
goto err;

err = fuse_copy_one(cs, &outarg, sizeof(outarg));
if (err)
return err;
goto err;

fuse_copy_finish(cs);
return fuse_notify_poll_wakeup(fc, &outarg);

err:
fuse_copy_finish(cs);
return err;
}

static int fuse_notify(struct fuse_conn *fc, enum fuse_notify_code code,
Expand All @@ -846,6 +851,7 @@ static int fuse_notify(struct fuse_conn *fc, enum fuse_notify_code code,
return fuse_notify_poll(fc, size, cs);

default:
fuse_copy_finish(cs);
return -EINVAL;
}
}
Expand Down Expand Up @@ -924,7 +930,6 @@ static ssize_t fuse_dev_write(struct kiocb *iocb, const struct iovec *iov,
*/
if (!oh.unique) {
err = fuse_notify(fc, oh.error, nbytes - sizeof(oh), &cs);
fuse_copy_finish(&cs);
return err ? err : nbytes;
}

Expand Down

0 comments on commit f6d47a1

Please sign in to comment.