Module Name: src Committed By: manu Date: Mon Apr 30 03:51:10 UTC 2012
Modified Files: src/sys/kern: vfs_syscalls.c Log Message: Fix mount -o extattr : previous patch fixed a panic but caused operation to happen on the mount point instead of the mounted filesystem. To generate a diff of this commit: cvs rdiff -u -r1.452 -r1.453 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_syscalls.c diff -u src/sys/kern/vfs_syscalls.c:1.452 src/sys/kern/vfs_syscalls.c:1.453 --- src/sys/kern/vfs_syscalls.c:1.452 Sat Apr 28 17:30:19 2012 +++ src/sys/kern/vfs_syscalls.c Mon Apr 30 03:51:10 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: vfs_syscalls.c,v 1.452 2012/04/28 17:30:19 manu Exp $ */ +/* $NetBSD: vfs_syscalls.c,v 1.453 2012/04/30 03:51:10 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.452 2012/04/28 17:30:19 manu Exp $"); +__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.453 2012/04/30 03:51:10 manu Exp $"); #ifdef _KERNEL_OPT #include "opt_fileassoc.h" @@ -458,8 +458,6 @@ 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 mount *mp = vp->v_mount; - /* Locking is handled internally in mount_domount(). */ KASSERT(vfsopsrele == true); error = mount_domount(l, &vp, vfsops, path, flags, data_buf, @@ -467,10 +465,18 @@ do_sys_mount(struct lwp *l, struct vfsop vfsopsrele = false; if ((error == 0) && (flags & MNT_EXTATTR)) { - if (VFS_EXTATTRCTL(mp, EXTATTR_CMD_START, + if ((error = namei_simple_user(path, + NSM_FOLLOW_TRYEMULROOT, &vp)) != 0) + goto done; + + if (vp->v_mountedhere == NULL) + goto done; + + if (VFS_EXTATTRCTL(vp->v_mountedhere, + EXTATTR_CMD_START, NULL, 0, NULL) != 0) printf("%s: failed to start extattr", - mp->mnt_stat.f_mntonname); + vp->v_mountedhere->mnt_stat.f_mntonname); /* XXX remove flag */ } }