Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 11 Feb 1998 17:20:18 -0500 (EST)
From:      "John W. DeBoskey" <jwd@unx.sas.com>
To:        freebsd-current@FreeBSD.ORG
Cc:        jwd@unx.sas.com (John W. DeBoskey)
Subject:   NFS V3 page caching & vm_page_is_valid()
Message-ID:  <199802112220.AA20790@iluvatar.unx.sas.com>

next in thread | raw e-mail | index | archive | help
Hi,

   For this test, I am cat'ing a 16385 byte file from an NFS V3
fileserver. ie: 2 8k blocks and a 1byte frag.

   The completely full pages are cached correctly.

   The last partial page is not. As I trace nfs_bioread() into brelse()
and then into vm_page_is_valid(), I find that m->valid is 0.

(kgdb) p m->valid
$12 = 0 '\000'
(kgdb) p bits
$13 = 1

   Thus, the following statement:

   if (m->valid && ((m->valid & bits) == bits))
      return 1;
   else
      return 0

   is false, and we are returning 0. Unfortunately, there is 1 single
solitary valid byte in this buffer. 

   Due to the above, the buffer is tossed causing an nfs readrpc to
the server to read the tail of the file everytime. Yuck.


   I am continuing to trace this problem, but any hints about where
to look for how the decision to set m->valid is made  would be much
appreciated.

Thanks,
John

ps: Thanks for pushing the logical vs bitwise and fix.
   
-- 
jwd@unx.sas.com       (w) John W. De Boskey          (919) 677-8000 x6915

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe current" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199802112220.AA20790>