[Bug 186293] tar(1): Problems with tar on FreeBSD 10.0

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Wed Oct 8 14:52:25 UTC 2014


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=186293

--- Comment #8 from jnaughto at ee.ryerson.ca ---
Now the somewhat good news.    So after getting the SR report back from Oracle
I started to dive into the FreeBSD NFS client code.   So this is what I
modified and how I got the issue (which seems to be) resolved.

On my FreeBSD 10 station:

# uname -a
FreeBSD NFSCLIENT 10.1-BETA1 FreeBSD 10.1-BETA1 #4 r271672M: Tue Oct  7
16:52:00 EDT 2014     NFSCLIENT:/usr/obj/usr/src/sys/GENERIC  amd64


I edited the files: nfs_subs.c

NFSCLIENT:/usr/src/sys/nfsclient # ls
nfs.h           nfs_krpc.c      nfs_subs.c      nfsargs.h       nfsnode.h
nfs_bio.c       nfs_nfsiod.c    nfs_vfsops.c    nfsm_subs.h     nfsstats.h
nfs_kdtrace.c   nfs_node.c      nfs_vnops.c     nfsmount.h      nlminfo.h

I commented out the following lines in this file

        if (va->va_atime.tv_sec != VNOVAL) {
//              if ((va->va_vaflags & VA_UTIMES_NULL) == 0) {
//                      tl = nfsm_build_xx(3 * NFSX_UNSIGNED, mb, bpos);
//                      *tl++ = txdr_unsigned(NFSV3SATTRTIME_TOCLIENT);
//                      txdr_nfsv3time(&va->va_atime, tl);
//              } else {
                        tl = nfsm_build_xx(NFSX_UNSIGNED, mb, bpos);
                        *tl = txdr_unsigned(NFSV3SATTRTIME_TOSERVER);
//              }

I also blocked out the following:

//              if ((va->va_vaflags & VA_UTIMES_NULL) == 0) {
//                      tl = nfsm_build_xx(3 * NFSX_UNSIGNED, mb, bpos);
//                      *tl++ = txdr_unsigned(NFSV3SATTRTIME_TOCLIENT);
//                      txdr_nfsv3time(&va->va_mtime, tl);
//              } else {
                        tl = nfsm_build_xx(NFSX_UNSIGNED, mb, bpos);
                        *tl = txdr_unsigned(NFSV3SATTRTIME_TOSERVER);
//              }

How I read this is if the vaflags are set to NULL then let the NFS server set
the atime and mtime based on the server's Clock.  We're not done yet.  To use
this code you also seem to have to mount the filesystem with the "oldnfs" flag.
 For example in my /etc/fstab I have:

NFSSERVER:/var/mnt              /mnt             oldnfs    rw,soft  0 0

Now once I re-compiled the FreeBSD kernel to take the above changes into
account and of course mount the filesystem with the "oldnfs" flags in place the
problems (for what I see) went away.   For example:

NFSCLIENT:/# mount /mnt
NFSCLIENT:/# mount
NFSSERVER:/var/mnt on /mnt (oldnfs)

NFSCLIENT:/# cd /mnt
NFSCLIENT:/mnt# tar xf ~user/foo.tar

Now foo.tar has only one file in it BOB which has perms of 0644.  Now doing a
directory listing:

# ls -l
NFSCLIENT:/mnt # ls -l
total 1
-rw-r--r--  1 user  group  0 Oct  8 10:28 BOB

So far so good.   Now this seems to resolve my problem right now but I'm not
sure whether or not this is going to open up other problems in the future.

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-bugs mailing list