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: