Module Name: src
Committed By: dholland
Date: Sun Jul 28 01:26:13 UTC 2013
Modified Files:
src/sys/ufs/lfs: lfs_vfsops.c
Log Message:
Merge in some of the stuff for supporting the extended attributes code.
To generate a diff of this commit:
cvs rdiff -u -r1.312 -r1.313 src/sys/ufs/lfs/lfs_vfsops.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/ufs/lfs/lfs_vfsops.c
diff -u src/sys/ufs/lfs/lfs_vfsops.c:1.312 src/sys/ufs/lfs/lfs_vfsops.c:1.313
--- src/sys/ufs/lfs/lfs_vfsops.c:1.312 Sun Jul 28 01:25:06 2013
+++ src/sys/ufs/lfs/lfs_vfsops.c Sun Jul 28 01:26:13 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_vfsops.c,v 1.312 2013/07/28 01:25:06 dholland Exp $ */
+/* $NetBSD: lfs_vfsops.c,v 1.313 2013/07/28 01:26:13 dholland Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003, 2007, 2007
@@ -61,7 +61,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.312 2013/07/28 01:25:06 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_vfsops.c,v 1.313 2013/07/28 01:26:13 dholland Exp $");
#if defined(_KERNEL_OPT)
#include "opt_lfs.h"
@@ -119,6 +119,8 @@ MODULE(MODULE_CLASS_VFS, lfs, NULL);
static int lfs_gop_write(struct vnode *, struct vm_page **, int, int);
static int lfs_mountfs(struct vnode *, struct mount *, struct lwp *);
+static int lfs_extattrctl(struct mount *, int, struct vnode *, int,
+ const char *);
static struct sysctllog *lfs_sysctl_log;
@@ -158,7 +160,7 @@ struct vfsops lfs_vfsops = {
lfs_done,
lfs_mountroot,
(int (*)(struct mount *, struct vnode *, struct timespec *)) eopnotsupp,
- vfs_stdextattrctl,
+ lfs_extattrctl,
(void *)eopnotsupp, /* vfs_suspendctl */
genfs_renamelock_enter,
genfs_renamelock_exit,
@@ -1171,6 +1173,18 @@ lfs_mountfs(struct vnode *devvp, struct
}
}
+#ifdef LFS_EXTATTR
+ /*
+ * Initialize file-backed extended attributes for ULFS1 file
+ * systems.
+ *
+ * XXX: why is this limited to ULFS1?
+ */
+ if (ump->um_fstype == ULFS1) {
+ ulfs_extattr_uepm_init(&ump->um_extattr);
+ }
+#endif
+
#ifdef LFS_KERNEL_RFW
lfs_roll_forward(fs, mp, l);
#endif
@@ -1268,6 +1282,16 @@ lfs_unmount(struct mount *mp, int mntfla
&lfs_lock);
mutex_exit(&lfs_lock);
+#ifdef LFS_EXTATTR
+ if (ump->um_fstype == ULFS1) {
+ if (ump->um_extattr.uepm_flags & ULFS_EXTATTR_UEPM_STARTED) {
+ ulfs_extattr_stop(mp, curlwp);
+ }
+ if (ump->um_extattr.uepm_flags & ULFS_EXTATTR_UEPM_INITIALIZED) {
+ ulfs_extattr_uepm_destroy(&ump->um_extattr);
+ }
+ }
+#endif
#ifdef LFS_QUOTA
if ((error = lfsquota1_umount(mp, flags)) != 0)
return (error);
@@ -2300,3 +2324,21 @@ lfs_resize_fs(struct lfs *fs, int newnse
lfs_segunlock(fs);
return error;
}
+
+/*
+ * Extended attribute dispatch
+ */
+static int
+lfs_extattrctl(struct mount *mp, int cmd, struct vnode *vp,
+ int attrnamespace, const char *attrname)
+{
+#ifdef LFS_EXTATTR
+ struct ulfsmount *ump;
+
+ ump = VFSTOULFS(mp);
+ if (ump->um_fstype == ULFS1) {
+ return ulfs_extattrctl(mp, cmd, vp, attrnamespace, attrname);
+ }
+#endif
+ return vfs_stdextattrctl(mp, cmd, vp, attrnamespace, attrname);
+}