On Tue, Jun 16, 2009 at 09:03:37AM +0200, Frank Batschulat (Home) wrote:
> On Tue, 16 Jun 2009 08:11:34 +0200, Frank Batschulat (Home) <Frank.Batschulat 
> at sun.com> wrote:
> > On Tue, 16 Jun 2009 07:31:35 +0200, Marcel Telka <Marcel.Telka at sun.com> 
> > wrote:
> >
> >> 4) When _PC_FILESIZEBITS is not supported VOP_PATHCONF() will fail and 
> >> return
> >> EINVAL (according to the comments section in the CR), so the codepath will
> >> break at line 1574 and your fix won't be used to salvage the situation:
> >>
> >> 1571                 error = VOP_PATHCONF(sarg->cs->vp, _PC_FILESIZEBITS, 
> >> &val,
> >> 1572                     sarg->cs->cr, NULL);
> >> 1573                 if (error)
> >> 1574                         break;
> >> 1575
> >> 1576                 /*
> >> 1577                  * If the underlying file system does not support
> >> 1578                  * _PC_FILESIZEBITS, return a reasonable default. 
> >> Note that
> >> 1579                  * error code on VOP_PATHCONF will be 0, even if the 
> >> underlying
> >> 1580                  * file system does not support _PC_FILESIZEBITS.
> >> 1581                  */
> >> 1582                 if (val == -1) {
> >> 1583                         na->maxfilesize = MAXOFF32_T;
> >> 1584                 } else {
> >> 1585                         if (val >= (sizeof (uint64_t) * 8))
> >> 1586                                 na->maxfilesize = UINT64_MAX;
> >> 1587                         else
> >> 1588                                 na->maxfilesize = ((1LL << val) - 1);
> >> 1589                 }
> >
> > I disagree, you have to distinguish between the fact that _PC_FILESIZEBITS 
> > is
> > not implemented and VOP_PATHCONF() not being implemented or returning an 
> > error.

You are probably right. I based my comment above on this comment in the CR only:

----------------------------------------------------------------
The NFSv4 server is wants to determine the maximum filesize
of the underlying filesystem.  It does this with the use of
VOP_PATHCONF(_PC_FILESIZEBITS).  Unfortunately, the underlying
PCFS filesystem doesn't like to talk about that particular
pathconf query and unconditionally returns EINVAL.  The NFSv4
server dutifully returns this error to the client.
The Solaris NFSv4 client likes to ask for the maxfilesize
attribute upon mount so the client will be unable to mount
this filesystem currently.
----------------------------------------------------------------

I know it is no longer true for pcfs, but I considered it as a general
description of possible behavior :-)...

-- 
Marcel Telka
Solaris RPE

Reply via email to