On 2013-08-21 18:04, Kenneth D. Merry wrote:
Author: ken
Date: Wed Aug 21 23:04:48 2013
New Revision: 254627
URL: http://svnweb.freebsd.org/changeset/base/254627

Log:
  Expand the use of stat(2) flags to allow storing some Windows/DOS
  and CIFS file attributes as BSD stat(2) flags.

  This work is intended to be compatible with ZFS, the Solaris CIFS
  server's interaction with ZFS, somewhat compatible with MacOS X,
  and of course compatible with Windows.

  The Windows attributes that are implemented were chosen based on
  the attributes that ZFS already supports.

  The summary of the flags is as follows:
[...]

  UF_ARCHIVE:   Command line name: "uarch", "uarchive"
                ZFS_NAME: XAT_ARCHIVE, ZFS_ARCHIVE
                Windows name: FILE_ATTRIBUTE_ARCHIVE

                The UF_ARCHIVED flag means that the file has changed and
                needs to be archived.  The meaning is same as
                the Windows FILE_ATTRIBUTE_ARCHIVE attribute, and
                the ZFS XAT_ARCHIVE and ZFS_ARCHIVE attribute.

                msdosfs and ZFS have special handling for this flag.
                i.e. they will set it when the file changes.

Is it intended that this flag is automatically added to all new and existing ZFS files?

# touch test
# ls -alo test
-rw-r--r--- 1 root wheel  uarch  0 Aug 28 15:46 test

This breaks 'cp -p' to tmpfs as tmpfs does not allow this flag.

# mkdir /tmp/tmpfs
# mount -t tmpfs tmpfs /tmp/tmpfs
# cp -f test /tmp/tmpfs
cp: test: Operation not supported


[...]
Modified: head/sys/ufs/ufs/ufs_vnops.c
==============================================================================
--- head/sys/ufs/ufs/ufs_vnops.c        Wed Aug 21 22:57:29 2013        
(r254626)
+++ head/sys/ufs/ufs/ufs_vnops.c        Wed Aug 21 23:04:48 2013        
(r254627)
@@ -528,9 +528,11 @@ ufs_setattr(ap)
                return (EINVAL);
        }
        if (vap->va_flags != VNOVAL) {
-               if ((vap->va_flags & ~(UF_NODUMP | UF_IMMUTABLE | UF_APPEND |
-                   UF_OPAQUE | UF_NOUNLINK | SF_ARCHIVED | SF_IMMUTABLE |
-                   SF_APPEND | SF_NOUNLINK | SF_SNAPSHOT)) != 0)
+               if ((vap->va_flags & ~(SF_APPEND | SF_ARCHIVED | SF_IMMUTABLE |
+                   SF_NOUNLINK | SF_SNAPSHOT | UF_APPEND | UF_ARCHIVE |
+                   UF_HIDDEN | UF_IMMUTABLE | UF_NODUMP | UF_NOUNLINK |
+                   UF_OFFLINE | UF_OPAQUE | UF_READONLY | UF_REPARSE |
+                   UF_SPARSE | UF_SYSTEM)) != 0)
                        return (EOPNOTSUPP);
                if (vp->v_mount->mnt_flag & MNT_RDONLY)
                        return (EROFS);

Seems a similar change is needed in tmpfs_subr.c:tmpfs_chflags() (antoine pointed this out)
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to