diff -Nurp old-lustre/libsysio/include/native.h lustre-1.5.97/libsysio/include/native.h --- old-lustre/libsysio/include/native.h 2007-01-31 15:54:57.000000000 +0900 +++ lustre-1.5.97/libsysio/include/native.h 2007-02-01 14:22:08.000000000 +0900 @@ -253,3 +253,9 @@ do { #if defined(SYS_ioctl) #define SYSIO_SYS_ioctl SYS_ioctl #endif +#if defined(SYS_statfs) +#define SYSIO_SYS_statfs SYS_statfs +#endif +#if defined(SYS_fstatfs) +#define SYSIO_SYS_fstatfs SYS_fstatfs +#endif diff -Nurp old-lustre/libsysio/src/module.mk lustre-1.5.97/libsysio/src/module.mk --- old-lustre/libsysio/src/module.mk 2007-01-31 15:54:59.000000000 +0900 +++ lustre-1.5.97/libsysio/src/module.mk 2007-02-01 14:15:41.000000000 +0900 @@ -23,7 +23,7 @@ SRCDIR_SRCS = src/access.c src/chdir.c s src/link.c src/lseek.c src/mkdir.c \ src/mknod.c src/mount.c src/namei.c \ src/open.c src/rw.c src/reconcile.c src/rename.c \ - src/rmdir.c src/stat64.c src/stat.c \ + src/rmdir.c src/stat64.c src/stat.c src/statvfs.c \ src/stddir.c src/readdir.c src/readdir64.c \ src/symlink.c src/readlink.c \ src/truncate.c src/unlink.c src/utime.c \ diff -Nurp old-lustre/libsysio/src/statvfs.c lustre-1.5.97/libsysio/src/statvfs.c --- old-lustre/libsysio/src/statvfs.c 1970-01-01 08:00:00.000000000 +0800 +++ lustre-1.5.97/libsysio/src/statvfs.c 2007-02-01 14:17:12.000000000 +0900 @@ -0,0 +1,103 @@ +/* + * This Cplant(TM) source code is the property of Sandia National + * Laboratories. + * + * This Cplant(TM) source code is copyrighted by Sandia National + * Laboratories. + * + * The redistribution of this Cplant(TM) source code is subject to the + * terms of the GNU Lesser General Public License + * (see cit/LGPL or http://www.gnu.org/licenses/lgpl.html) + * + * Cplant(TM) Copyright 1998-2003 Sandia Corporation. + * Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive + * license for use of this work by or on behalf of the US Government. + * Export of this program may require a license from the United States + * Government. + */ + +/* + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Questions or comments about this library should be sent to: + * + * Lee Ward + * Sandia National Laboratories, New Mexico + * P.O. Box 5800 + * Albuquerque, NM 87185-1110 + * + * lee@sandia.gov + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "sysio.h" +#include "inode.h" +#include "fs.h" +#include "mount.h" +#include "sysio-symbols.h" + +static void +convstatvfs(struct intnl_statvfs *internal, struct statvfs *st_buf) +{ + st_buf->f_bsize = internal->f_bsize; + st_buf->f_frsize = internal->f_frsize; + st_buf->f_blocks = internal->f_blocks; + st_buf->f_bfree = internal->f_bfree; + st_buf->f_bavail = internal->f_bavail; + st_buf->f_files = internal->f_files; + st_buf->f_ffree = internal->f_ffree; + st_buf->f_favail = internal->f_favail; + st_buf->f_fsid = internal->f_fsid; + st_buf->f_flag = internal->f_flag; + st_buf->f_namemax = internal->f_namemax; +} + +int +SYSIO_INTERFACE_NAME(statvfs)(const char *path, struct statvfs *statbuf) +{ + struct intent intent; + int err; + struct pnode *pno; + struct inode *ino; + struct intnl_statvfs internal; + SYSIO_INTERFACE_DISPLAY_BLOCK; + + SYSIO_INTERFACE_ENTER; + INTENT_INIT(&intent, 0, NULL, NULL); + err = _sysio_namei(_sysio_cwd, path, ND_NOFOLLOW, &intent, &pno); + if (err) + goto out; + ino = pno->p_base->pb_ino; + err = (*pno->p_base->pb_ino->i_ops.inop_statvfs)(pno, ino, &internal); + if (err == 0) + convstatvfs(&internal, statbuf); + + P_RELE(pno); + out: + SYSIO_INTERFACE_RETURN(err ? -1 : 0, err); +} + +#ifdef REDSTORM +#undef __statvfs +sysio_sym_weak_alias(SYSIO_INTERFACE_NAME(statvfs), + PREPEND(__, SYSIO_INTERFACE_NAME(statvfs))) +#endif