Module Name:    src
Committed By:   manu
Date:           Fri Jun 17 14:23:52 UTC 2011

Modified Files:
        src/include: mntopts.h
        src/lib/libc/sys: mount.2
        src/sbin/mount: mount.8
        src/sbin/mount_ffs: mount_ffs.c
        src/share/man/man4: options.4
        src/sys/kern: vfs_syscalls.c
        src/sys/sys: extattr.h fstypes.h statvfs.h
        src/sys/ufs/ffs: ffs_extern.h ffs_vfsops.c
        src/sys/ufs/ufs: extattr.h ufs_extattr.c
        src/usr.sbin/extattrctl: extattrctl.8

Log Message:
Add mount -o extattr option to enable extended attributs (corrently only
for UFS1).
Remove kernel option for EA backing store autocreation and do it by
default. Add a sysctl so that autocreated attriutr size can be modified.


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/include/mntopts.h
cvs rdiff -u -r1.45 -r1.46 src/lib/libc/sys/mount.2
cvs rdiff -u -r1.70 -r1.71 src/sbin/mount/mount.8
cvs rdiff -u -r1.25 -r1.26 src/sbin/mount_ffs/mount_ffs.c
cvs rdiff -u -r1.406 -r1.407 src/share/man/man4/options.4
cvs rdiff -u -r1.429 -r1.430 src/sys/kern/vfs_syscalls.c
cvs rdiff -u -r1.4 -r1.5 src/sys/sys/extattr.h
cvs rdiff -u -r1.28 -r1.29 src/sys/sys/fstypes.h
cvs rdiff -u -r1.15 -r1.16 src/sys/sys/statvfs.h
cvs rdiff -u -r1.77 -r1.78 src/sys/ufs/ffs/ffs_extern.h
cvs rdiff -u -r1.267 -r1.268 src/sys/ufs/ffs/ffs_vfsops.c
cvs rdiff -u -r1.8 -r1.9 src/sys/ufs/ufs/extattr.h
cvs rdiff -u -r1.31 -r1.32 src/sys/ufs/ufs/ufs_extattr.c
cvs rdiff -u -r1.3 -r1.4 src/usr.sbin/extattrctl/extattrctl.8

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/include/mntopts.h
diff -u src/include/mntopts.h:1.13 src/include/mntopts.h:1.14
--- src/include/mntopts.h:1.13	Mon Jan 12 18:14:20 2009
+++ src/include/mntopts.h	Fri Jun 17 14:23:50 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: mntopts.h,v 1.13 2009/01/12 18:14:20 pooka Exp $	*/
+/*	$NetBSD: mntopts.h,v 1.14 2011/06/17 14:23:50 manu Exp $	*/
 
 /*-
  * Copyright (c) 1994
@@ -57,6 +57,7 @@
 #define MOPT_SOFTDEP		{ "softdep",	0, MNT_SOFTDEP, 0 }
 #define MOPT_LOG		{ "log",	0, MNT_LOG, 0 }
 #define MOPT_IGNORE		{ "hidden",	0, MNT_IGNORE, 0 }
+#define MOPT_EXTATTR		{ "extattr",	0, MNT_EXTATTR, 0 }
 
 /* Control flags. */
 #define MOPT_FORCE		{ "force",	0, MNT_FORCE, 0 }

Index: src/lib/libc/sys/mount.2
diff -u src/lib/libc/sys/mount.2:1.45 src/lib/libc/sys/mount.2:1.46
--- src/lib/libc/sys/mount.2:1.45	Mon May 31 12:16:20 2010
+++ src/lib/libc/sys/mount.2	Fri Jun 17 14:23:50 2011
@@ -1,4 +1,4 @@
-.\"	$NetBSD: mount.2,v 1.45 2010/05/31 12:16:20 njoly Exp $
+.\"	$NetBSD: mount.2,v 1.46 2011/06/17 14:23:50 manu Exp $
 .\"
 .\" Copyright (c) 1980, 1989, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -119,6 +119,9 @@
 filesystem, creating a record of meta-data writes to be
 performed, allowing the actual writes to be deferred.
 This improves performance in most cases.
+.It MNT_EXTATTR
+Enable extended attributes, if the filesystem supports them and do not enable
+them by default. Currently this is only the case for UFS1. 
 .El
 .Pp
 The

Index: src/sbin/mount/mount.8
diff -u src/sbin/mount/mount.8:1.70 src/sbin/mount/mount.8:1.71
--- src/sbin/mount/mount.8:1.70	Sun Nov 21 18:33:08 2010
+++ src/sbin/mount/mount.8	Fri Jun 17 14:23:51 2011
@@ -1,4 +1,4 @@
-.\"	$NetBSD: mount.8,v 1.70 2010/11/21 18:33:08 pooka Exp $
+.\"	$NetBSD: mount.8,v 1.71 2011/06/17 14:23:51 manu Exp $
 .\"
 .\" Copyright (c) 1980, 1989, 1991, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -190,6 +190,9 @@
 Clear
 .Cm async
 mode.
+.It Cm extattr
+Enable extended attributes, if the filesystem supports them and do not enable
+them by default. Currently this is only the case for UFS1.
 .It Cm force
 The same as
 .Fl f ;

Index: src/sbin/mount_ffs/mount_ffs.c
diff -u src/sbin/mount_ffs/mount_ffs.c:1.25 src/sbin/mount_ffs/mount_ffs.c:1.26
--- src/sbin/mount_ffs/mount_ffs.c:1.25	Tue Aug  5 20:57:45 2008
+++ src/sbin/mount_ffs/mount_ffs.c	Fri Jun 17 14:23:51 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: mount_ffs.c,v 1.25 2008/08/05 20:57:45 pooka Exp $	*/
+/*	$NetBSD: mount_ffs.c,v 1.26 2011/06/17 14:23:51 manu Exp $	*/
 
 /*-
  * Copyright (c) 1993, 1994
@@ -39,7 +39,7 @@
 #if 0
 static char sccsid[] = "@(#)mount_ufs.c	8.4 (Berkeley) 4/26/95";
 #else
-__RCSID("$NetBSD: mount_ffs.c,v 1.25 2008/08/05 20:57:45 pooka Exp $");
+__RCSID("$NetBSD: mount_ffs.c,v 1.26 2011/06/17 14:23:51 manu Exp $");
 #endif
 #endif /* not lint */
 
@@ -74,6 +74,7 @@
 	MOPT_SOFTDEP,
 	MOPT_LOG,
 	MOPT_GETARGS,
+	MOPT_EXTATTR,
 	MOPT_NULL,
 };
 

Index: src/share/man/man4/options.4
diff -u src/share/man/man4/options.4:1.406 src/share/man/man4/options.4:1.407
--- src/share/man/man4/options.4:1.406	Tue Jun  7 20:23:14 2011
+++ src/share/man/man4/options.4	Fri Jun 17 14:23:51 2011
@@ -1,4 +1,4 @@
-.\"	$NetBSD: options.4,v 1.406 2011/06/07 20:23:14 wiz Exp $
+.\"	$NetBSD: options.4,v 1.407 2011/06/17 14:23:51 manu Exp $
 .\"
 .\" Copyright (c) 1996
 .\" 	Perry E. Metzger.  All rights reserved.
@@ -959,6 +959,8 @@
 support in FFS file systems.
 Maybe useful for install media kernels, small memory systems and
 embedded systems which don't require the snapshot support.
+.It Cd options UFS_EXTATTR
+Enable extended attribute support for UFS1 filesystems. 
 .It Cd options WAPBL
 Enable
 .Dq Write Ahead Physical Block Logging file system journaling .

Index: src/sys/kern/vfs_syscalls.c
diff -u src/sys/kern/vfs_syscalls.c:1.429 src/sys/kern/vfs_syscalls.c:1.430
--- src/sys/kern/vfs_syscalls.c:1.429	Sun Jun 12 03:35:57 2011
+++ src/sys/kern/vfs_syscalls.c	Fri Jun 17 14:23:51 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: vfs_syscalls.c,v 1.429 2011/06/12 03:35:57 rmind Exp $	*/
+/*	$NetBSD: vfs_syscalls.c,v 1.430 2011/06/17 14:23:51 manu Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -70,7 +70,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.429 2011/06/12 03:35:57 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.430 2011/06/17 14:23:51 manu Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_fileassoc.h"
@@ -97,6 +97,7 @@
 #ifdef FILEASSOC
 #include <sys/fileassoc.h>
 #endif /* FILEASSOC */
+#include <sys/extattr.h>
 #include <sys/verified_exec.h>
 #include <sys/kauth.h>
 #include <sys/atomic.h>
@@ -232,12 +233,12 @@
 	  ~(MNT_NOSUID | MNT_NOEXEC | MNT_NODEV |
 	    MNT_SYNCHRONOUS | MNT_UNION | MNT_ASYNC | MNT_NOCOREDUMP |
 	    MNT_NOATIME | MNT_NODEVMTIME | MNT_SYMPERM | MNT_SOFTDEP |
-	    MNT_LOG);
+	    MNT_LOG | MNT_EXTATTR);
 	mp->mnt_flag |= flags &
 	   (MNT_NOSUID | MNT_NOEXEC | MNT_NODEV |
 	    MNT_SYNCHRONOUS | MNT_UNION | MNT_ASYNC | MNT_NOCOREDUMP |
 	    MNT_NOATIME | MNT_NODEVMTIME | MNT_SYMPERM | MNT_SOFTDEP |
-	    MNT_LOG | MNT_IGNORE);
+	    MNT_LOG | MNT_EXTATTR | MNT_IGNORE);
 
 	error = VFS_MOUNT(mp, path, data, data_len);
 
@@ -275,6 +276,25 @@
 	mutex_exit(&mp->mnt_updating);
 	vfs_unbusy(mp, false, NULL);
 
+	if ((error == 0) && !(saved_flags & MNT_EXTATTR) && 
+	    (flags & MNT_EXTATTR)) {
+		if (VFS_EXTATTRCTL(vp->v_mount, EXTATTR_CMD_START, 
+				   NULL, 0, NULL) != 0) {
+			printf("%s: failed to start extattr, error = %d",
+			       vp->v_mount->mnt_stat.f_mntonname, error);
+			mp->mnt_flag &= ~MNT_EXTATTR;
+		}
+	}
+
+	if ((error == 0) && (saved_flags & MNT_EXTATTR) && 
+	    !(flags & MNT_EXTATTR)) {
+		if (VFS_EXTATTRCTL(vp->v_mount, EXTATTR_CMD_STOP, 
+				   NULL, 0, NULL) != 0) {
+			printf("%s: failed to stop extattr, error = %d",
+			       vp->v_mount->mnt_stat.f_mntonname, error);
+			mp->mnt_flag |= MNT_RDONLY;
+		}
+	}
  out:
 	return (error);
 }
@@ -448,6 +468,14 @@
 		error = mount_domount(l, &vp, vfsops, path, flags, data_buf,
 		    &data_len);
 		vfsopsrele = false;
+
+		if ((error == 0) && (flags & MNT_EXTATTR)) {
+			if (VFS_EXTATTRCTL(vp->v_mount, EXTATTR_CMD_START, 
+					   NULL, 0, NULL) != 0)
+				printf("%s: failed to start extattr",
+				       vp->v_mount->mnt_stat.f_mntonname);
+				/* XXX remove flag */
+		}
 	}
 
     done:

Index: src/sys/sys/extattr.h
diff -u src/sys/sys/extattr.h:1.4 src/sys/sys/extattr.h:1.5
--- src/sys/sys/extattr.h:1.4	Sun May 14 21:38:18 2006
+++ src/sys/sys/extattr.h	Fri Jun 17 14:23:51 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: extattr.h,v 1.4 2006/05/14 21:38:18 elad Exp $	*/
+/*	$NetBSD: extattr.h,v 1.5 2011/06/17 14:23:51 manu Exp $	*/
 
 /*-
  * Copyright (c) 1999-2001 Robert N. M. Watson
@@ -46,6 +46,10 @@
 #define	EXTATTR_NAMESPACE_SYSTEM	0x00000002
 #define	EXTATTR_NAMESPACE_SYSTEM_STRING	"system"
 
+/* for sys_extattrctl */
+#define EXTATTR_CMD_START		0x00000001
+#define EXTATTR_CMD_STOP		0x00000002
+
 #ifdef _KERNEL
 
 #include <sys/syslimits.h>

Index: src/sys/sys/fstypes.h
diff -u src/sys/sys/fstypes.h:1.28 src/sys/sys/fstypes.h:1.29
--- src/sys/sys/fstypes.h:1.28	Thu Jan 13 07:25:50 2011
+++ src/sys/sys/fstypes.h	Fri Jun 17 14:23:51 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: fstypes.h,v 1.28 2011/01/13 07:25:50 pooka Exp $	*/
+/*	$NetBSD: fstypes.h,v 1.29 2011/06/17 14:23:51 manu Exp $	*/
 
 /*
  * Copyright (c) 1989, 1991, 1993
@@ -86,7 +86,6 @@
 #define	__MNT_UNUSED1	0x00020000
 #define	__MNT_UNUSED2	0x00200000
 #define	__MNT_UNUSED3	0x00800000
-#define	__MNT_UNUSED4	0x01000000
 
 #define	MNT_RDONLY	0x00000001	/* read only filesystem */
 #define	MNT_SYNCHRONOUS	0x00000002	/* file system written synchronously */
@@ -97,6 +96,7 @@
 #define	MNT_ASYNC	0x00000040	/* file system written asynchronously */
 #define	MNT_NOCOREDUMP	0x00008000	/* don't write core dumps to this FS */
 #define	MNT_IGNORE	0x00100000	/* don't show entry in df */
+#define	MNT_EXTATTR	0x01000000	/* enable extended attributes */
 #define	MNT_LOG		0x02000000	/* Use logging */
 #define	MNT_NOATIME	0x04000000	/* Never update access times in fs */
 #define	MNT_SYMPERM	0x20000000	/* recognize symlink permission */
@@ -117,7 +117,8 @@
 	{ MNT_SYMPERM,		0,	"symperm" }, \
 	{ MNT_NODEVMTIME,	0,	"nodevmtime" }, \
 	{ MNT_SOFTDEP,		0,	"soft dependencies" }, \
-	{ MNT_LOG,		0,	"log" },
+	{ MNT_LOG,		0,	"log" }, \
+	{ MNT_EXTATTR,		0,	"extattr" }, 
 
 /*
  * exported mount flags.
@@ -178,7 +179,8 @@
      MNT_LOCAL | \
      MNT_QUOTA | \
      MNT_ROOTFS | \
-     MNT_LOG)
+     MNT_LOG | \
+     MNT_EXTATTR)
 
 /*
  * External filesystem control flags.
@@ -227,7 +229,7 @@
 	"\34MNT_EXNORESPORT" \
 	"\33MNT_NOATIME" \
 	"\32MNT_LOG" \
-	"\31MNT_UNUSED" \
+	"\31MNT_EXTATTR" \
 	"\30MNT_UNUSED" \
 	"\27MNT_GETARGS" \
 	"\26MNT_UNUSED" \

Index: src/sys/sys/statvfs.h
diff -u src/sys/sys/statvfs.h:1.15 src/sys/sys/statvfs.h:1.16
--- src/sys/sys/statvfs.h:1.15	Thu Jul 31 05:38:06 2008
+++ src/sys/sys/statvfs.h	Fri Jun 17 14:23:51 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: statvfs.h,v 1.15 2008/07/31 05:38:06 simonb Exp $	 */
+/*	$NetBSD: statvfs.h,v 1.16 2011/06/17 14:23:51 manu Exp $	 */
 
 /*-
  * Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -119,6 +119,7 @@
 #define	ST_NODEVMTIME	MNT_NODEVMTIME
 #define	ST_SOFTDEP	MNT_SOFTDEP
 #define	ST_LOG		MNT_LOG
+#define	ST_EXTATTR	MNT_EXTATTR
 
 #define	ST_EXRDONLY	MNT_EXRDONLY
 #define	ST_EXPORTED	MNT_EXPORTED

Index: src/sys/ufs/ffs/ffs_extern.h
diff -u src/sys/ufs/ffs/ffs_extern.h:1.77 src/sys/ufs/ffs/ffs_extern.h:1.78
--- src/sys/ufs/ffs/ffs_extern.h:1.77	Wed Apr 27 07:24:52 2011
+++ src/sys/ufs/ffs/ffs_extern.h	Fri Jun 17 14:23:52 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: ffs_extern.h,v 1.77 2011/04/27 07:24:52 hannken Exp $	*/
+/*	$NetBSD: ffs_extern.h,v 1.78 2011/06/17 14:23:52 manu Exp $	*/
 
 /*-
  * Copyright (c) 1991, 1993, 1994
@@ -42,7 +42,8 @@
 #define FFS_REALLOCBLKS		3	/* block reallocation enabled */
 #define FFS_ASYNCFREE		4	/* asynchronous block freeing enabled */
 #define FFS_LOG_CHANGEOPT	5	/* log optimalization strategy change */
-#define FFS_MAXID		6	/* number of valid ffs ids */
+#define FFS_EXTATTR_AUTOCREATE	6	/* size for backing file autocreation */
+#define FFS_MAXID		7	/* number of valid ffs ids */
 
 struct buf;
 struct fid;

Index: src/sys/ufs/ffs/ffs_vfsops.c
diff -u src/sys/ufs/ffs/ffs_vfsops.c:1.267 src/sys/ufs/ffs/ffs_vfsops.c:1.268
--- src/sys/ufs/ffs/ffs_vfsops.c:1.267	Sun Jun 12 03:36:00 2011
+++ src/sys/ufs/ffs/ffs_vfsops.c	Fri Jun 17 14:23:52 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: ffs_vfsops.c,v 1.267 2011/06/12 03:36:00 rmind Exp $	*/
+/*	$NetBSD: ffs_vfsops.c,v 1.268 2011/06/17 14:23:52 manu Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.267 2011/06/12 03:36:00 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_vfsops.c,v 1.268 2011/06/17 14:23:52 manu Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_ffs.h"
@@ -181,6 +181,9 @@
 #if 0
 	extern int doasyncfree;
 #endif
+#ifdef UFS_EXTATTR
+	extern int ufs_extattr_autocreate;
+#endif
 	extern int ffs_log_changeopt;
 
 	switch (cmd) {
@@ -200,7 +203,6 @@
 			       SYSCTL_DESCR("Berkeley Fast File System"),
 			       NULL, 0, NULL, 0,
 			       CTL_VFS, 1, CTL_EOL);
-
 		/*
 		 * @@@ should we even bother with these first three?
 		 */
@@ -233,6 +235,17 @@
 			       SYSCTL_DESCR("Log changes in optimization strategy"),
 			       NULL, 0, &ffs_log_changeopt, 0,
 			       CTL_VFS, 1, FFS_LOG_CHANGEOPT, CTL_EOL);
+#ifdef UFS_EXTATTR
+		sysctl_createv(&ffs_sysctl_log, 0, NULL, NULL,
+			       CTLFLAG_PERMANENT|CTLFLAG_READWRITE,
+			       CTLTYPE_INT, "extattr_autocreate",
+			       SYSCTL_DESCR("Size of attribute for "
+					    "backing file autocreation"),
+			       NULL, 0, &ufs_extattr_autocreate, 0,
+			       CTL_VFS, 1, FFS_EXTATTR_AUTOCREATE, CTL_EOL);
+		
+#endif /* UFS_EXTATTR */
+
 		break;
 	case MODULE_CMD_FINI:
 		error = vfs_detach(&ffs_vfsops);
@@ -1255,24 +1268,16 @@
 			}
 		}
 #endif
-	}
-
+	 }
 #ifdef UFS_EXTATTR
 	/*
 	 * Initialize file-backed extended attributes on UFS1 file
 	 * systems.
 	 */
-	if (ump->um_fstype == UFS1) {
-		ufs_extattr_uepm_init(&ump->um_extattr);
-#ifdef UFS_EXTATTR_AUTOSTART
-		/*
-		 * XXX Just ignore errors.  Not clear that we should
-		 * XXX fail the mount in this case.
-		 */
-		(void) ufs_extattr_autostart(mp, l);
-#endif
-	}
+	if (ump->um_fstype == UFS1)
+		ufs_extattr_uepm_init(&ump->um_extattr);	
 #endif /* UFS_EXTATTR */
+
 	return (0);
 out:
 #ifdef WAPBL

Index: src/sys/ufs/ufs/extattr.h
diff -u src/sys/ufs/ufs/extattr.h:1.8 src/sys/ufs/ufs/extattr.h:1.9
--- src/sys/ufs/ufs/extattr.h:1.8	Wed Jan 30 14:54:01 2008
+++ src/sys/ufs/ufs/extattr.h	Fri Jun 17 14:23:52 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: extattr.h,v 1.8 2008/01/30 14:54:01 ad Exp $	*/
+/*	$NetBSD: extattr.h,v 1.9 2011/06/17 14:23:52 manu Exp $	*/
 
 /*-
  * Copyright (c) 1999-2001 Robert N. M. Watson
@@ -54,8 +54,8 @@
 #define	UFS_EXTATTR_UEPM_INITIALIZED	0x00000001
 #define	UFS_EXTATTR_UEPM_STARTED	0x00000002
 
-#define	UFS_EXTATTR_CMD_START		0x00000001
-#define	UFS_EXTATTR_CMD_STOP		0x00000002
+#define	UFS_EXTATTR_CMD_START		EXTATTR_CMD_START
+#define	UFS_EXTATTR_CMD_STOP		EXTATTR_CMD_STOP
 #define	UFS_EXTATTR_CMD_ENABLE		0x00000003
 #define	UFS_EXTATTR_CMD_DISABLE		0x00000004
 

Index: src/sys/ufs/ufs/ufs_extattr.c
diff -u src/sys/ufs/ufs/ufs_extattr.c:1.31 src/sys/ufs/ufs/ufs_extattr.c:1.32
--- src/sys/ufs/ufs/ufs_extattr.c:1.31	Wed Jun 15 12:54:32 2011
+++ src/sys/ufs/ufs/ufs_extattr.c	Fri Jun 17 14:23:52 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: ufs_extattr.c,v 1.31 2011/06/15 12:54:32 manu Exp $	*/
+/*	$NetBSD: ufs_extattr.c,v 1.32 2011/06/17 14:23:52 manu Exp $	*/
 
 /*-
  * Copyright (c) 1999-2002 Robert N. M. Watson
@@ -48,7 +48,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ufs_extattr.c,v 1.31 2011/06/15 12:54:32 manu Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ufs_extattr.c,v 1.32 2011/06/17 14:23:52 manu Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_ffs.h"
@@ -80,6 +80,7 @@
 static MALLOC_JUSTDEFINE(M_UFS_EXTATTR, "ufs_extattr","ufs extended attribute");
 
 int ufs_extattr_sync = 1;
+int ufs_extattr_autocreate = 1024;
 
 static int	ufs_extattr_valid_attrname(int attrnamespace,
 		    const char *attrname);
@@ -149,7 +150,6 @@
 	return (1);
 }
 
-#ifdef UFS_EXTATTR_AUTOCREATE
 /*
  * Autocreate an attribute storage
  */
@@ -236,7 +236,7 @@
 
 	uef.uef_magic = UFS_EXTATTR_MAGIC;
 	uef.uef_version = UFS_EXTATTR_VERSION;
-	uef.uef_size = UFS_EXTATTR_AUTOCREATE;
+	uef.uef_size = ufs_extattr_autocreate;
 
 	error = vn_rdwr(UIO_WRITE, backing_vp, &uef, sizeof(uef), 0,
 		        UIO_SYSSPACE, IO_NODELOCKED|IO_APPEND, 
@@ -283,7 +283,6 @@
 
 	return uele;
 }
-#endif /* UFS_EXTATTR_AUTOCREATE */
 
 /*
  * Locate an attribute given a name and mountpoint.
@@ -380,7 +379,6 @@
 	return (error);
 }
 
-#ifdef UFS_EXTATTR_AUTOSTART
 /*
  * Helper routine: given a locked parent directory and filename, return
  * the locked vnode of the inode associated with the name.  Will not
@@ -442,7 +440,6 @@
 	*vp = target_vp;
 	return (0);
 }
-#endif /* !UFS_EXTATTR_AUTOSTART */
 
 /*
  * Enable an EA using the passed filesystem, backing vnode, attribute name,
@@ -479,7 +476,6 @@
 	return (error);
 }
 
-#ifdef UFS_EXTATTR_AUTOSTART
 /*
  * Given a locked directory vnode, iterate over the names in the directory
  * and use ufs_extattr_lookup() to retrieve locked vnodes of potential
@@ -680,7 +676,6 @@
 
 	return (error);
 }
-#endif /* !UFS_EXTATTR_AUTOSTART */
 
 /*
  * Stop extended attribute support on an FS.
@@ -879,11 +874,7 @@
 		if (attrname != NULL)
 			return (EINVAL);
 
-#ifdef UFS_EXTATTR_AUTOSTART
 		error = ufs_extattr_autostart(mp, l);
-#else
-		error = ufs_extattr_start(mp, l);
-#endif
 		return (error);
 		
 	case UFS_EXTATTR_CMD_STOP:
@@ -1207,14 +1198,10 @@
 
 	attribute = ufs_extattr_find_attr(ump, attrnamespace, name);
 	if (!attribute) {
-#ifdef UFS_EXTATTR_AUTOCREATE
 		attribute =  ufs_extattr_autocreate_attr(vp, attrnamespace, 
 							 name, l);
 		if  (!attribute)
 			return (ENOATTR);
-#else /* UFS_EXTATTR_AUTOCREATE */
-		return (ENOATTR);
-#endif /* UFS_EXTATTR_AUTOCREATE */
 	}
 
 	/*

Index: src/usr.sbin/extattrctl/extattrctl.8
diff -u src/usr.sbin/extattrctl/extattrctl.8:1.3 src/usr.sbin/extattrctl/extattrctl.8:1.4
--- src/usr.sbin/extattrctl/extattrctl.8:1.3	Wed Mar 11 18:05:37 2009
+++ src/usr.sbin/extattrctl/extattrctl.8	Fri Jun 17 14:23:52 2011
@@ -1,4 +1,4 @@
-.\"	$NetBSD: extattrctl.8,v 1.3 2009/03/11 18:05:37 joerg Exp $
+.\"	$NetBSD: extattrctl.8,v 1.4 2011/06/17 14:23:52 manu Exp $
 .\"
 .\" Copyright (c) 2000-2001 Robert N. M. Watson
 .\" All rights reserved.
@@ -82,7 +82,17 @@
 .Ar path .
 The file system must be a UFS1 file system, and the
 .Dv UFS_EXTATTR
-kernel option must have been enabled.
+kernel option must have been enabled. If 
+.Pa .attribute/user 
+and 
+.Pa .attribute/system
+exist at the filesystem root, extended attribute backed by files
+in theses directories will be automatically enabled. Note that
+extended attributes can be automatically started at mount time 
+by using the 
+.Cm -o extattr
+option to 
+.Xr mount 8 .
 .It Cm stop Ar path
 Stop extended attribute support on the file system named using
 .Ar path .
@@ -110,6 +120,17 @@
 .Pp
 This file should not exist before running
 .Cm initattr .
+.Pp
+When a user attempt to set a
+.Dq user
+or
+.Dq system
+extended attribute that lacks a backing file,
+the kernel will attempt to automatically create it, provided
+.Pa .attribute/user
+or
+.Pa .attribute/system
+exist and are writtable by the  requesting user.
 .It Cm showattr Ar attrfile
 Show the attribute header values in the attribute file named by
 .Ar attrfile .
@@ -146,25 +167,6 @@
 most have been enabled using
 .Cm enable .
 .El
-.Pp
-The kernel also includes support for automatic starting of extended
-attributes on a file system at mount time once configured with
-.Nm .
-If the kernel is built with the
-.Dv UFS_EXTATTR_AUTOSTART
-option, UFS will search for a
-.Pa .attribute
-sub-directory of the file system root during the mount operation.
-If found, extended attribute support will be started for the file system.
-UFS will then search for
-.Pa system
-and
-.Pa user
-sub-directories of the
-.Pa .attribute
-directory for any potential backing files and enable an extended attribute
-for each valid backing file with the backing file name as the attribute
-name.
 .Sh EXAMPLES
 .Dl extattrctl start /
 .Pp
@@ -201,7 +203,9 @@
 and
 .Nx 4.0 .
 It was developed to support security extensions requiring additional
-labels to be associated with each file or directory.
+labels to be associated with each file or directory. Backing file
+autocreation was added in
+.Nx 6.0
 .Sh AUTHORS
 .An Robert N M Watson
 .Sh BUGS

Reply via email to