From owner-freebsd-hackers@freebsd.org Tue Nov 10 08:14:26 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 E4EC2A2B21C for ; Tue, 10 Nov 2015 08:14:26 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 5FD091F20 for ; Tue, 10 Nov 2015 08:14:26 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kostik@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id tAA8ELQY024055 (version=TLSv1 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Tue, 10 Nov 2015 10:14:21 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua tAA8ELQY024055 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id tAA8ELtA024049; Tue, 10 Nov 2015 10:14:21 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Tue, 10 Nov 2015 10:14:21 +0200 From: Konstantin Belousov To: Ivan Radovanovic Cc: freebsd-hackers@FreeBSD.org Subject: Re: Detecting new file name after receiving kevent's NOTE_RENAME Message-ID: <20151110081421.GL2257@kib.kiev.ua> References: <5641A2A5.7070909@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5641A2A5.7070909@gmail.com> User-Agent: Mutt/1.5.24 (2015-08-30) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home 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, 10 Nov 2015 08:14:27 -0000 On Tue, Nov 10, 2015 at 08:54:13AM +0100, Ivan Radovanovic wrote: > What is the best practice for discovering new file name after receiving > kevent(2) NOTE_RENAME on its descriptor? > > At the moment I am storing fileno from dirent(5) structure together with > descriptor and name, and when I receive NOTE_RENAME I re-read directory > and use it (fileno) to discover new name, but this obviously requires > re-reading entire directory on each NOTE_RENAME. NOTE_RENAME means that the file backing the given file descriptor was renamed, not that some directory entry in the contained directory renamed. In particular, the new dirent for the file, for which you get the notification, may belong to some other directory. As such, scanning the directory which contained the file before rename is useless. > > I am wondering is there some more clever way to get this new name > (kernel is obviously aware of it, otherwise it couldn't notify > descriptor about rename)? The most correct way is to use sysctl kern.proc.filedesc and look for the path of the given file descriptor. This is inefficient since kern.proc.filedesc returns information about all opened files for the process. If somebody cares about this, she should implement e.g. sysctl kern.proc.onefd which takes both pid and filedescriptor, to return single fileinfo structure for given file descriptor.