Subject: Re: linux32 statfs/statfs64
To: None <port-amd64@NetBSD.org>
From: Edgar =?iso-8859-1?B?RnXf?= <ef@math.uni-bonn.de>
List: port-amd64
Date: 03/16/2007 17:02:22
--u3/rZRmxL6MmkK24
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
> Looks ok.
Could we pull this up to 4.0?
With the statfs and sched_yield calls added and Nicolas Joly's patch
applied, I've finally managed to make dsmc (the Tivoli client) work.
If we could have select() fixed, it would probably work even better.
> But you should trim the unused stuff (variables and headers)
> from linux32_misc.c
I trimmed headers, but I can't find any variables to trim.
BTW, in sys/compat/linux32/Makefile.inc, we have:
OBJS= linux_sysent.c linux_syscalls.c linux_syscall.h linux_syscallargs.h
and I suppose this should s/linux_/linux32_/g
--u3/rZRmxL6MmkK24
Content-Type: text/plain; charset=us-ascii
Content-Description: linux32_misc.c
Content-Disposition: attachment; filename="linux32_misc.c"
/* $NetBSD: linux32_misc.c,v $ */
/*-
* Copyright (c) 1995, 1998, 1999 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Frank van der Linden and Eric Haszlakiewicz; by Jason R. Thorpe
* of the Numerical Aerospace Simulation Facility, NASA Ames Research Center;
* by Edgar Fu\ss, Mathematisches Institut der Uni Bonn.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: linux32_misc.c,v $");
#include <sys/param.h>
#include <sys/proc.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/malloc.h>
#include <compat/netbsd32/netbsd32.h>
#include <compat/netbsd32/netbsd32_syscallargs.h>
#include <compat/linux32/common/linux32_types.h>
#include <compat/linux32/common/linux32_signal.h>
#include <compat/linux32/linux32_syscallargs.h>
#include <compat/linux/common/linux_types.h>
#include <compat/linux/common/linux_signal.h>
#include <compat/linux/common/linux_misc.h>
#include <compat/linux/linux_syscallargs.h>
extern const struct linux_mnttypes linux_fstypes[];
extern const int linux_fstypes_cnt;
void bsd_to_linux_statfs __P((const struct statvfs *,
struct linux_statfs *));
/*
* Implement the fs stat functions. Straightforward.
*/
int
linux32_sys_statfs(l, v, retval)
struct lwp *l;
void *v;
register_t *retval;
{
struct linux32_sys_statfs_args /* {
syscallarg(const netbsd32_charp char) path;
syscallarg(struct linux_statfs *) sp;
} */ *uap = v;
struct proc *p = l->l_proc;
struct statvfs *btmp, *bsp;
struct linux_statfs ltmp;
struct sys_statvfs1_args bsa;
caddr_t sg;
int error;
sg = stackgap_init(p, 0);
bsp = stackgap_alloc(p, &sg, sizeof (struct statvfs));
NETBSD32TOP(uap, &bsa, path, const char);
CHECK_ALT_EXIST(l, &sg, SCARG(&bsa, path));
SCARG(&bsa, buf) = bsp;
SCARG(&bsa, flags) = ST_WAIT;
if ((error = sys_statvfs1(l, &bsa, retval)))
return error;
btmp = STATVFSBUF_GET();
error = copyin(bsp, btmp, sizeof(*btmp));
if (error) {
goto out;
}
bsd_to_linux_statfs(btmp, <mp);
error = copyout(<mp, NETBSD32PTR64(SCARG(uap, sp)), sizeof ltmp);
out:
STATVFSBUF_PUT(btmp);
return error;
}
--u3/rZRmxL6MmkK24--