On Mon, May 06, 2013 at 08:16:11PM +0200, Pawel Jakub Dawidek wrote: > On Sun, Apr 28, 2013 at 07:12:09PM +0000, Konstantin Belousov wrote: > > Author: kib > > Date: Sun Apr 28 19:12:09 2013 > > New Revision: 250027 > > URL: http://svnweb.freebsd.org/changeset/base/250027 > > > > Log: > > Eliminate the layering violation in the kern_sendfile(). When quering > > the file size, use VOP_GETATTR() instead of accessing vnode vm_object > > un_pager.vnp.vnp_size. > > Doesn't it add extra I/O to query file system about file's attributes? > If it does, does it matter here?
It should not, typically. E.g. UFS always keeps the unpacked inode in memory for any non-reclaimed vnode. For NFS, vnode usually caches the attributes. Anyway, using VOP_GETATTR() is the only sanctioned way to get file size. Directly accessing vm_object assumes that vm_object is of OBJT_VNODE type, which is no longer true.
pgpiRobVp9Wff.pgp
Description: PGP signature