Subject: RFC: new mode bits in stat structure
To: None <tech-kern@NetBSD.ORG>
From: Jason Thorpe <thorpej@nas.nasa.gov>
List: tech-kern
Date: 06/25/1998 23:36:05
Hi folks...
For the HSM we're building on NetBSD/alpha, I need a couple of additional
mode bits to indicate two separate additional file states:
- File has been archived
- File is not resident on disk
I'll also be making some changes to various system utilities, like ls(1)
(to display these extra status bits in ls -l) and find(1) (e.g. "find all
non-resident files").
Another option is to have a separate structure for this, returned by a
separate call, but that is bad for us in several ways (not the least of
which is the extra, needless system call overhead to get the additional
information; this is a big deal, since we have file systems which have
LARGE numbers of files in a single directory, for example).
The following diff adds those two additional bits in the top 16 bits
of the mode_t. These bits are currently otherwise unused. If a program
uses the old stat interface, it will obviously not get these bits, but
this isn't really a practical problem, since those programs wouldn't know
what to do with them anyhow :-)
I'd like to add these new bits and the changes to the system utilities that
would care about them to the master NetBSD sources (not only does this save
hair for us, but we are hoping to fold all of the HSM code back into NetBSD
at some point). Are there any objections to this?
Jason R. Thorpe thorpej@nas.nasa.gov
NASA Ames Research Center Home: +1 408 866 1912
NAS: M/S 258-5 Work: +1 650 604 0935
Moffett Field, CA 94035 Pager: +1 650 428 6939
Index: stat.h
===================================================================
RCS file: /cvsroot/src/sys/sys/stat.h,v
retrieving revision 1.35
diff -c -r1.35 stat.h
*** stat.h 1998/05/05 21:25:05 1.35
--- stat.h 1998/06/26 06:38:52
***************
*** 205,210 ****
--- 205,224 ----
#endif
#if !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)
+ /*
+ * These live in the upper 16 bits of a mode_t, and are thus not
+ * visible in the old stat structures, which only have 16 bits
+ * for mode. This is not a practical problem, since these bits
+ * are used by hierarchical storage mangement systems, which should
+ * all be new code, anyhow.
+ */
+ #define S_IFARCHIVED 0200000 /* file is archived */
+ #define S_IFNONRES 0400000 /* file is non-resident */
+ #define S_ISARCHIVED(m) ((m) & S_IFARCHIVED)
+ #define S_ISNONRES(m) ((m) & S_IFNONRES)
+ #endif
+
+ #if !defined(_POSIX_C_SOURCE) && !defined(_XOPEN_SOURCE)
#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */
/* 7777 */
#define ALLPERMS (S_ISUID|S_ISGID|S_ISTXT|S_IRWXU|S_IRWXG|S_IRWXO)