2010-11-14 23:15:56

by Alexey Zaytsev

[permalink] [raw]
Subject: Re: A possible fsnotify bug.

Confirmed, the user is getting duplicate notifications. Looks like
this has been working this way since the original inotify patch. Is
this the intended behavior?

On Sun, Nov 14, 2010 at 08:14, Alexey Zaytsev <[email protected]> wrote:
> Hi.
>
> Have not tested, but this code in fs/nfsd/vfs.c looks suspicious:
> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=fs/nfsd/vfs.c;h=184938fcff04d5dff712b8bee01f5d7e41bb20ad;hb=HEAD#l1032
>
> 1032         host_err = vfs_writev(file, (struct iovec __user *)vec,
> vlen, &offset);
> 1033         set_fs(oldfs);
> 1034         if (host_err < 0)
> 1035                 goto out_nfserr;
> 1036         *cnt = host_err;
> 1037         nfsdstats.io_write += host_err;
> 1038         fsnotify_modify(file);
>
> fsnotify_modify() is called from vfs_writev() -> do_readv_writev(),
> and the users are probably getting duplicate events, right?
>


2010-11-15 17:24:22

by J. Bruce Fields

[permalink] [raw]
Subject: Re: A possible fsnotify bug.

On Mon, Nov 15, 2010 at 02:15:55AM +0300, Alexey Zaytsev wrote:
> Confirmed, the user is getting duplicate notifications. Looks like
> this has been working this way since the original inotify patch. Is
> this the intended behavior?

I can't think of any reason for the nfsd code to be diong the
notification itself--looks like just a mistake to me.

--b.

>
> On Sun, Nov 14, 2010 at 08:14, Alexey Zaytsev <[email protected]> wrote:
> > Hi.
> >
> > Have not tested, but this code in fs/nfsd/vfs.c looks suspicious:
> > http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=fs/nfsd/vfs.c;h=184938fcff04d5dff712b8bee01f5d7e41bb20ad;hb=HEAD#l1032
> >
> > 1032         host_err = vfs_writev(file, (struct iovec __user *)vec,
> > vlen, &offset);
> > 1033         set_fs(oldfs);
> > 1034         if (host_err < 0)
> > 1035                 goto out_nfserr;
> > 1036         *cnt = host_err;
> > 1037         nfsdstats.io_write += host_err;
> > 1038         fsnotify_modify(file);
> >
> > fsnotify_modify() is called from vfs_writev() -> do_readv_writev(),
> > and the users are probably getting duplicate events, right?
> >