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