From owner-freebsd-hackers@freebsd.org Tue Nov 17 02:05:36 2015 Return-Path: Delivered-To: freebsd-hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AA59BA30C05 for ; Tue, 17 Nov 2015 02:05:36 +0000 (UTC) (envelope-from alfred@freebsd.org) Received: from mailman.ysv.freebsd.org (mailman.ysv.freebsd.org [IPv6:2001:1900:2254:206a::50:5]) by mx1.freebsd.org (Postfix) with ESMTP id 8F74F1F91 for ; Tue, 17 Nov 2015 02:05:36 +0000 (UTC) (envelope-from alfred@freebsd.org) Received: by mailman.ysv.freebsd.org (Postfix) id 8BFDDA30C04; Tue, 17 Nov 2015 02:05:36 +0000 (UTC) Delivered-To: hackers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 71A2EA30C03 for ; Tue, 17 Nov 2015 02:05:36 +0000 (UTC) (envelope-from alfred@freebsd.org) Received: from elvis.mu.org (elvis.mu.org [IPv6:2001:470:1f05:b76::196]) by mx1.freebsd.org (Postfix) with ESMTP id 600ED1F90 for ; Tue, 17 Nov 2015 02:05:36 +0000 (UTC) (envelope-from alfred@freebsd.org) Received: from Alfreds-MacBook-Pro-2.local (unknown [IPv6:2601:645:8004:7515:6d56:aa8e:b437:27b3]) by elvis.mu.org (Postfix) with ESMTPSA id 27827345A916; Mon, 16 Nov 2015 18:05:36 -0800 (PST) Subject: Re: kqueue of a nfs mounted file not working To: Rick Macklem , Daniel Braniss References: <9BC3EFA2-945F-4C86-89F6-778873B58469@cs.huji.ac.il> <20151115152635.GB5854@kib.kiev.ua> <3AEC67FD-2E67-4EF9-9D46-818ABF3D8118@cs.huji.ac.il> <661673285.88370232.1447682409478.JavaMail.zimbra@uoguelph.ca> Cc: Konstantin Belousov , hackers@freebsd.org From: Alfred Perlstein Organization: FreeBSD Message-ID: <564A8B6F.3080009@freebsd.org> Date: Mon, 16 Nov 2015 18:05:35 -0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:38.0) Gecko/20100101 Thunderbird/38.3.0 MIME-Version: 1.0 In-Reply-To: <661673285.88370232.1447682409478.JavaMail.zimbra@uoguelph.ca> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 17 Nov 2015 02:05:36 -0000 On 11/16/15 6:00 AM, Rick Macklem wrote: > Daniel Braniss wrote: >>> On 15 Nov 2015, at 17:26, Konstantin Belousov wrote: >>> >>> On Sun, Nov 15, 2015 at 11:22:55AM +0200, Daniel Braniss wrote: >>>> HI, >>>> I???m writing a program to monitor a file using kqueue(2), if the file is >>>> local >>>> all is OK, but if the file is via a nfs mounted fs, it only works once. >>>> stat shows the file growing, but kevent is not triggered. >>> Does file grow due to local changes on the nfs client, or some other >>> client changes the file, while your client tries to get kevent >>> notifications ? >> it gets updated by a host which has the file as local, so yes, it gets >> updated >> by another client/host. >> > Hmm, I am not surprised that this doesn't work. The only indication to the > client that the file has changed on the server is a change in the file's > attributes when they're acquired (via a Getattr RPC or similar) from the server. > > There is a vfs operation called VFS_SYSCTL(). This isn't implemented on > the current NFS client. It was implemented on the old one, but only for > NFS locking events and I didn't understand what needed to be done, so I > didn't do it. > Kostik, do you know if there is a VFS_SYSCTL() call done when the kevent > stuff is probing for a file size change? (Or does it not probe and events > get triggered via the write syscall or ???) I took a quick look at the kevent > stuff, but admit I got lost and couldn't figure out what triggered events > being logged? > > Also, is the event for "file growing" or "file changed"? > If it is the latter, all the NFS client can do is look for a change in > the file's modify time and this is often at a resolution of 1sec., which > implies that a change within the same second as the previous one may not > be noticed. (NFSv4 has a Change attribute that is always guaranteed to > change, but that is only NFSv4.) Also, you see metadata changes as well > as data changes, at least for the NFSv4 attribute. > > rick > Hello Rick, I implemented the VFS_SYSCTL work in NFS. The goal was to allow a path to query filesystems via sysctl. This was used in OS X to provide a way to query the filesystem for "events". https://github.com/opensource-apple/xnu/blob/10.10/bsd/nfs/nfs_vfsops.c#L5188 For NFS you want to inform the user that an nfs filesystem is down, or the locking daemon is down. That was inside a GUI you can pop up a dialog box to allow the user to force-unmount or turn off locking. Image you're connected to multiple NFS shares inside of X11 or whatever windowing system you have. Then there is a network outage. You'll want to know which filesystems are not responding and why. -Alfred -Alfred