Page MenuHomeFreeBSD

D10379.id27394.diff
No OneTemporary

D10379.id27394.diff

Index: sbin/savecore/savecore.c
===================================================================
--- sbin/savecore/savecore.c
+++ sbin/savecore/savecore.c
@@ -68,6 +68,7 @@
#include <sys/kerneldump.h>
#include <sys/mount.h>
#include <sys/stat.h>
+#include <ctype.h>
#include <errno.h>
#include <fcntl.h>
#include <fstab.h>
@@ -278,35 +279,49 @@
check_space(const char *savedir, off_t dumpsize, int bounds)
{
FILE *fp;
- off_t minfree, spacefree, totfree, needed;
struct statfs fsbuf;
char buf[100];
+ int64_t available, minfree, spacefree, totfree, needed;
if (statfs(".", &fsbuf) < 0) {
syslog(LOG_ERR, "%s: %m", savedir);
exit(1);
}
- spacefree = ((off_t) fsbuf.f_bavail * fsbuf.f_bsize) / 1024;
- totfree = ((off_t) fsbuf.f_bfree * fsbuf.f_bsize) / 1024;
+ spacefree = fsbuf.f_bavail * (fsbuf.f_bsize / 1024);
+ totfree = fsbuf.f_bfree * (fsbuf.f_bsize / 1024);
if ((fp = fopen("minfree", "r")) == NULL)
minfree = 0;
else {
if (fgets(buf, sizeof(buf), fp) == NULL)
minfree = 0;
- else
- minfree = atoi(buf);
+ else {
+ char *endp;
+
+ errno = 0;
+ minfree = strtoll(buf, &endp, 10);
+ while (*endp != '\0' && isspace(*endp))
+ endp++;
+ if (*endp != '\0' || minfree < 0) {
+ syslog(LOG_WARNING,
+ "minfree didn't contain a valid size; "
+ "setting minfree to 0");
+ minfree = 0;
+ }
+ }
(void)fclose(fp);
}
+ available = minfree > 0 ? spacefree - minfree : totfree;
needed = dumpsize / 1024 + 2; /* 2 for info file */
needed -= saved_dump_size(bounds);
- if ((minfree > 0 ? spacefree : totfree) - needed < minfree) {
+ if (available < needed) {
syslog(LOG_WARNING,
- "no dump: not enough free space on device (%lldkB "
- "available; need at least %lldkB)",
- (long long)(minfree > 0 ? spacefree : totfree),
- (long long)needed);
+ "no dump: not enough free space on device (need at least "
+ "%jdkB for dump; %jdkB available; %jdkB reserved)",
+ (intmax_t)needed,
+ (intmax_t)available + minfree,
+ (intmax_t)minfree);
return (0);
}
if (spacefree - needed < 0)

File Metadata

Mime Type
text/plain
Expires
Sat, Oct 10, 12:19 AM (8 h, 46 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40513608
Default Alt Text
D10379.id27394.diff (2 KB)

Event Timeline