Module Name: src
Committed By: gson
Date: Tue May 8 08:44:49 UTC 2012
Modified Files:
src/sys/kern: vfs_mount.c vfs_syscalls.c
Log Message:
Move VFS_EXTATTRCTL to mount_domount(). This makes the
fs/puffs/t_fuzz:mountfuzz7, fs/puffs/t_fuzz:mountfuzz8,
and fs/zfs/t_zpool:create tests pass again. Patch from
manu, discussed on tech-kern and committed at his request.
To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/kern/vfs_mount.c
cvs rdiff -u -r1.455 -r1.456 src/sys/kern/vfs_syscalls.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/kern/vfs_mount.c
diff -u src/sys/kern/vfs_mount.c:1.13 src/sys/kern/vfs_mount.c:1.14
--- src/sys/kern/vfs_mount.c:1.13 Tue Mar 13 18:40:55 2012
+++ src/sys/kern/vfs_mount.c Tue May 8 08:44:49 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_mount.c,v 1.13 2012/03/13 18:40:55 elad Exp $ */
+/* $NetBSD: vfs_mount.c,v 1.14 2012/05/08 08:44:49 gson Exp $ */
/*-
* Copyright (c) 1997-2011 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.13 2012/03/13 18:40:55 elad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,v 1.14 2012/05/08 08:44:49 gson Exp $");
#include <sys/param.h>
#include <sys/kernel.h>
@@ -83,6 +83,7 @@ __KERNEL_RCSID(0, "$NetBSD: vfs_mount.c,
#include <sys/module.h>
#include <sys/mount.h>
#include <sys/namei.h>
+#include <sys/extattr.h>
#include <sys/syscallargs.h>
#include <sys/sysctl.h>
#include <sys/systm.h>
@@ -739,8 +740,15 @@ mount_domount(struct lwp *l, vnode_t **v
vfs_unbusy(mp, true, NULL);
(void) VFS_STATVFS(mp, &mp->mnt_stat);
error = VFS_START(mp, 0);
- if (error)
+ if (error) {
vrele(vp);
+ } else if (flags & MNT_EXTATTR) {
+ error = VFS_EXTATTRCTL(vp->v_mountedhere,
+ EXTATTR_CMD_START, NULL, 0, NULL);
+ if (error)
+ printf("%s: failed to start extattr: error = %d\n",
+ vp->v_mountedhere->mnt_stat.f_mntonname, error);
+ }
/* Drop reference held for VFS_START(). */
vfs_destroy(mp);
*vpp = NULL;
Index: src/sys/kern/vfs_syscalls.c
diff -u src/sys/kern/vfs_syscalls.c:1.455 src/sys/kern/vfs_syscalls.c:1.456
--- src/sys/kern/vfs_syscalls.c:1.455 Wed May 2 20:48:29 2012
+++ src/sys/kern/vfs_syscalls.c Tue May 8 08:44:49 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_syscalls.c,v 1.455 2012/05/02 20:48:29 rmind Exp $ */
+/* $NetBSD: vfs_syscalls.c,v 1.456 2012/05/08 08:44:49 gson 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.455 2012/05/02 20:48:29 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.456 2012/05/08 08:44:49 gson Exp $");
#ifdef _KERNEL_OPT
#include "opt_fileassoc.h"
@@ -458,30 +458,11 @@ do_sys_mount(struct lwp *l, struct vfsop
} else if (flags & MNT_UPDATE) {
error = mount_update(l, vp, path, flags, data_buf, &data_len);
} else {
- struct vnode *svp;
-
- /* Save vp as mount_domount sets it to NULL */
- vref(vp);
- svp = vp;
-
/* Locking is handled internally in mount_domount(). */
KASSERT(vfsopsrele == true);
error = mount_domount(l, &vp, vfsops, path, flags, data_buf,
&data_len);
vfsopsrele = false;
-
- if ((error == 0) && (flags & MNT_EXTATTR)) {
- KASSERT(svp->v_mountedhere != NULL);
-
- if (VFS_EXTATTRCTL(svp->v_mountedhere,
- EXTATTR_CMD_START,
- NULL, 0, NULL) != 0)
- printf("%s: failed to start extattr",
- svp->v_mountedhere->mnt_stat.f_mntonname);
- /* XXX remove flag */
- }
-
- vrele(svp);
}
done: