Albert Chin wrote:
> We have a X4100 running b66 exporting ZFS filesystems via NFS to
> several HP-UX clients. Due to bug 6538387,
> http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6538387,

Condolences that you haven't been able to upgrade to HP-UX 11.31 yet.
As you know, that has the client side fix for the underlying problem.

 > we must mount the ZFS filesystems from our X4100 server as NFSv2.
> However, this causes problems with getconf(1) on this system:
 >
>   hp-ux# mount -o vers=2 b66:/opt/tww /mnt
>   hp-ux# getconf NAME_MAX /mnt
>   getconf NAME_MAX /mnt: Operation not supported

Right - NFSv2 doesn't have a PATHCONF op.  On Solaris, we have a
way to work around that with a different version of the MOUNT
protocol which can transmit a static set of per-filesystem values.
The client can then stash those and use it to answer questions.
That would support NAME_MAX if HP supported MOUNTVERS_POSIX (== 2).
You can see more on /usr/include/rpcsvc/mount.x on a Solaris system.

> We can "zfs set xattr=off" on the ZFS filesystems as, according to
> zfs(1m):
>   xattr=on | off
>       Controls whether extended  attributes  are  enabled  for
>       this file system. The default value is "on".

Does this actually help you at all?  If so, do you know why?  I don't
see a connection to extended attributes here.

> However, this isn't enough. Is it possible to disable the extra
> attribute bits used by NFS when NFSv3 is being used by the client? We
> don't need any extra attribute bits more than the standard UNIX
> permissions.

The root cause of the bug you're fighting is that the HP client is
programmed to use a "guard" - it echos a server-generated time and
asks the server to make sure it's correct.  The problem is that the
HP-UX client is storing that value with only microsecond precision,
so the fact that ZFS has nanosecond precision means the client's
request doesn't match and needs to be rejected.  This is referring
to the sattrguard3 field for SETATTR in /usr/include/rpcsvc/nfs_prot.x
if you want to have a look.  With this kind of problem, the only two
options are to change the way the client is coded or to make the
server either throw away precision or accept a value that's actually
incorrect.  There's no server side workaround that I could recommend
here; sorry about that :-(

Rob T

Reply via email to