From owner-freebsd-bugs@FreeBSD.ORG Mon Dec 4 00:39:36 2006 Return-Path: X-Original-To: freebsd-bugs@FreeBSD.org Delivered-To: freebsd-bugs@FreeBSD.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id CDE2116A403; Mon, 4 Dec 2006 00:39:36 +0000 (UTC) (envelope-from bde@zeta.org.au) Received: from mailout2.pacific.net.au (mailout2-3.pacific.net.au [61.8.2.226]) by mx1.FreeBSD.org (Postfix) with ESMTP id DF50443CA2; Mon, 4 Dec 2006 00:39:06 +0000 (GMT) (envelope-from bde@zeta.org.au) Received: from mailproxy2.pacific.net.au (mailproxy2.pacific.net.au [61.8.2.163]) by mailout2.pacific.net.au (Postfix) with ESMTP id 6748E10982D; Mon, 4 Dec 2006 11:39:33 +1100 (EST) Received: from katana.zip.com.au (katana.zip.com.au [61.8.7.246]) by mailproxy2.pacific.net.au (Postfix) with ESMTP id 5811C27410; Mon, 4 Dec 2006 11:39:33 +1100 (EST) Date: Mon, 4 Dec 2006 11:39:32 +1100 (EST) From: Bruce Evans X-X-Sender: bde@delplex.bde.org To: Rene Ladan In-Reply-To: <200612031104.kB3B4jcS098474@www.freebsd.org> Message-ID: <20061204110256.V24317@delplex.bde.org> References: <200612031104.kB3B4jcS098474@www.freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed Cc: freebsd-bugs@FreeBSD.org, freebsd-gnats-submit@FreeBSD.org Subject: Re: kern/106255: [msdosfs] : correct setting of archive flag X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Dec 2006 00:39:36 -0000 On Sun, 3 Dec 2006, Rene Ladan wrote: >> Description: > The MSDOS file system has an archive bit in the flags field. This bit roughly corresponds to the archive flag on the UFS file system. However, it is set the wrong way around: the flag should be set when the bit is present, and cleared when the bit is absent. The comment in msdosfs/direntry.h says that ATTR_ARCHIVE means that the file is new or modified (in other words, not archived), while the comment in sys/stat.h says that SF_ARCHIVED means that the file is archived, but I think both mean that it is archived. > --- msdosfs_vnops.c Mon Nov 6 14:41:57 2006 > +++ msdosfs_vnops.c.rene Sun Dec 3 11:58:47 2006 > @@ -352,7 +352,7 @@ > vap->va_ctime = vap->va_mtime; > } > vap->va_flags = 0; > - if ((dep->de_Attributes & ATTR_ARCHIVE) == 0) > + if (dep->de_Attributes & ATTR_ARCHIVE) > vap->va_flags |= SF_ARCHIVED; > vap->va_gen = 0; > vap->va_blocksize = pmp->pm_bpcluster; This only fixes the reporting of the flag. msdosfs still maintains the flag perfectly backwards (except DETIMES() is missing setting of it for for all changes -- I think all changes to metadata except possibly to atimes should set it to be perfectly backwards and clear it to be correct). Grep shows that this flag is negatively useful in FreeBSD. No file systems maintain it (except for getting it backwards in msdosfs). All archiving utilities need to maintain it for it to be useful, but none except tar even reference it (except possibly indirectly via strtofflags(3)), and tar seems to just print it (indirectly via a special version of strtofflags(3)). Bruce