From 2a15fef88c8aa09952144bb5d16b4be8dd9e8ebe Mon Sep 17 00:00:00 2001 From: Kirk McKusick Date: Fri, 23 Mar 1990 03:55:56 -0800 Subject: [PATCH] use statfs instead of reading superblock to get space threshold SCCS-vsn: sbin/savecore/savecore.c 5.21 --- usr/src/sbin/savecore/savecore.c | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/usr/src/sbin/savecore/savecore.c b/usr/src/sbin/savecore/savecore.c index ec8c6bdec5..afaf229b04 100644 --- a/usr/src/sbin/savecore/savecore.c +++ b/usr/src/sbin/savecore/savecore.c @@ -22,7 +22,7 @@ char copyright[] = #endif /* not lint */ #ifndef lint -static char sccsid[] = "@(#)savecore.c 5.20 (Berkeley) %G%"; +static char sccsid[] = "@(#)savecore.c 5.21 (Berkeley) %G%"; #endif /* not lint */ /* @@ -30,11 +30,12 @@ static char sccsid[] = "@(#)savecore.c 5.20 (Berkeley) %G%"; */ #include -#include +#include #include #include #include #include +#include #include #include #include @@ -332,26 +333,20 @@ path(file) check_space() { - struct stat dsb; - register char *ddev; - int dfd, spacefree; - struct fs fs; + long minfree, spacefree; + struct statfs fsbuf; - if (stat(dirname, &dsb) < 0) { + if (statfs(dirname, &fsbuf) < 0) { Perror(LOG_ERR, "%s: %m\n", dirname); exit(1); } - ddev = find_dev(dsb.st_dev, S_IFBLK); - dfd = Open(ddev, O_RDONLY); - Lseek(dfd, SBOFF, L_SET); - Read(dfd, (char *)&fs, sizeof (fs)); - close(dfd); - spacefree = freespace(&fs, fs.fs_minfree) * fs.fs_fsize / 1024; - if (spacefree < read_number("minfree")) { + spacefree = fsbuf.f_bavail * fsbuf.f_fsize / 1024; + minfree = read_number("minfree"); + if (minfree > 0 && spacefree - dumpsize < minfree) { log(LOG_WARNING, "Dump omitted, not enough space on device\n"); return (0); } - if (freespace(&fs, fs.fs_minfree) < 0) + if (spacefree - dumpsize < minfree) log(LOG_WARNING, "Dump performed, but free space threshold crossed\n"); return (1); -- 2.20.1