Completed mbtask new disk watcher
This commit is contained in:
parent
f2a5b62745
commit
f55ff6280f
20
ChangeLog
20
ChangeLog
@ -42,6 +42,7 @@ v0.51.2 06-Mar-2004
|
||||
was already transmitted to remove that file from the outbound
|
||||
queue.
|
||||
Removed some debug logging from inbound handler.
|
||||
Updated to use new disk watcher.
|
||||
|
||||
mbfido:
|
||||
When removing files during tic import due to replace or maximum
|
||||
@ -55,6 +56,7 @@ v0.51.2 06-Mar-2004
|
||||
file was deleted or moved.
|
||||
Doesn't write Magic Request into files description anymore,
|
||||
this is now handled outsite the description lines.
|
||||
Updated to use new disk watcher.
|
||||
|
||||
mbfile:
|
||||
Updated kill, index, check, pack, list, adopt, import, move,
|
||||
@ -67,6 +69,7 @@ v0.51.2 06-Mar-2004
|
||||
Added rearc command.
|
||||
The check command does now also check if the magic alias file
|
||||
request names are valid and removes the invalid entries.
|
||||
Updated to use new disk watcher.
|
||||
|
||||
mbaff:
|
||||
When scanning for uploads, files which were hatched now have
|
||||
@ -77,6 +80,16 @@ v0.51.2 06-Mar-2004
|
||||
database structure.
|
||||
The filefind function is updated to the new files database
|
||||
structure.
|
||||
Updated to use new disk watcher.
|
||||
|
||||
mbindex:
|
||||
Updated to use new disk watcher.
|
||||
|
||||
mbdiff:
|
||||
Updated to use new disk watcher.
|
||||
|
||||
mbmsg:
|
||||
Updated to use new disk watcher.
|
||||
|
||||
mbsebbs:
|
||||
Updated to the new files database structure.
|
||||
@ -84,6 +97,9 @@ v0.51.2 06-Mar-2004
|
||||
mball:
|
||||
Added support for files database Magic request field.
|
||||
|
||||
mbuser:
|
||||
Updated to use new disk watcher.
|
||||
|
||||
mbsetup:
|
||||
Added auto upgrade for the files database.
|
||||
Changed menus 14, 7.n.6, 10.1 and 8.4.
|
||||
@ -92,6 +108,8 @@ v0.51.2 06-Mar-2004
|
||||
Added setup for filefind keyword length in menu 13.
|
||||
Added setup items in menu 1.5 for child priority and filesystem
|
||||
sync calls.
|
||||
In several menus that can change paths, a command to mbtask is
|
||||
given to reread filesystem tables when something is changed.
|
||||
|
||||
mbmon:
|
||||
Switched to use new filesystems command.
|
||||
@ -102,6 +120,8 @@ v0.51.2 06-Mar-2004
|
||||
|
||||
mbtask:
|
||||
Added communication commands for disk watch thread.
|
||||
Added disk watch thread, this will monitor filesystems usage
|
||||
for only the filesystems that are used by mbse.
|
||||
|
||||
mbuseradd:
|
||||
Fixed removing of a OS created homedir. This may solve problems
|
||||
|
6
TODO
6
TODO
@ -73,12 +73,6 @@ newuser:
|
||||
|
||||
N: Add menu setup to set users preffered character set.
|
||||
|
||||
mbtask:
|
||||
N: Add a thread that keeps track of disk usage of all partitions used
|
||||
by mbse, update partition list after setup changes. Make the info
|
||||
available for all other programs so they know very fast if enough
|
||||
space is still available.
|
||||
|
||||
mbfido:
|
||||
N: The elist rules files are named (8.3) areaname.rul where areaname
|
||||
is the first 8 characters of the area name and we use the full name
|
||||
|
89
lib/mbfile.c
89
lib/mbfile.c
@ -252,95 +252,6 @@ int mkdirs(char *name, mode_t mode)
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Check free diskspace on most filesystems. Exclude check on floppyies,
|
||||
* CD's and /boot partition. The amount of needed space is given in MBytes.
|
||||
*/
|
||||
int diskfree(int needed)
|
||||
{
|
||||
int RetVal = TRUE;
|
||||
struct statfs sfs;
|
||||
unsigned long temp;
|
||||
#if defined(__linux__)
|
||||
char *mtab, *dev, *fs, *type;
|
||||
FILE *fp;
|
||||
#elif defined(__FreeBSD__) || defined(__NetBSD__)
|
||||
struct statfs *mntbuf;
|
||||
long mntsize;
|
||||
int i;
|
||||
#endif
|
||||
|
||||
if (! needed)
|
||||
return TRUE;
|
||||
|
||||
#if defined(__linux__)
|
||||
|
||||
if ((fp = fopen((char *)"/etc/mtab", "r")) == 0) {
|
||||
WriteError("$Can't open /etc/mtab");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
mtab = calloc(PATH_MAX, sizeof(char));
|
||||
while (fgets(mtab, PATH_MAX, fp)) {
|
||||
dev = strtok(mtab, " \t");
|
||||
fs = strtok(NULL, " \t");
|
||||
type = strtok(NULL, " \t");
|
||||
if (strncmp((char *)"/dev/", dev, 5) == 0) {
|
||||
/*
|
||||
* Filter out unwanted filesystems, floppy.
|
||||
* Also filter out the /boot file system.
|
||||
*/
|
||||
if (strncmp((char *)"/dev/fd", dev, 7) && strncmp((char *)"/boot", fs, 5) &&
|
||||
(!strncmp((char *)"ext2", type, 4) || !strncmp((char *)"reiserfs", type, 8) ||
|
||||
!strncmp((char *)"vfat", type, 4) || !strncmp((char *)"msdos", type, 5) ||
|
||||
!strncmp((char *)"ext3", type, 4))) {
|
||||
if (statfs(fs, &sfs) == 0) {
|
||||
temp = (unsigned long)(sfs.f_bsize / 512L);
|
||||
if (((unsigned long)(sfs.f_bavail * temp) / 2048L) < needed) {
|
||||
RetVal = FALSE;
|
||||
WriteError("On \"%s\" only %d kb left, need %d kb", fs,
|
||||
(sfs.f_bavail * sfs.f_bsize) / 1024, needed * 1024);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
free(mtab);
|
||||
|
||||
#elif defined(__FreeBSD__) || defined(__NetBSD__)
|
||||
|
||||
if ((mntsize = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0) {
|
||||
WriteError("Huh, no filesystems mounted??");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
for (i = 0; i < mntsize; i++) {
|
||||
/*
|
||||
* Don't check kernfs (NetBSD) and procfs (FreeBSD), floppy and CD.
|
||||
*/
|
||||
if ((strncmp(mntbuf[i].f_fstypename, (char *)"kernfs", 6)) &&
|
||||
(strncmp(mntbuf[i].f_fstypename, (char *)"procfs", 6)) &&
|
||||
(strncmp(mntbuf[i].f_mntfromname, (char *)"/dev/fd", 7)) &&
|
||||
(strncmp(mntbuf[i].f_fstypename, (char *)"cd9660", 6)) &&
|
||||
(strncmp(mntbuf[i].f_fstypename, (char *)"msdos", 5)) &&
|
||||
(statfs(mntbuf[i].f_mntonname, &sfs) == 0)) {
|
||||
temp = (unsigned long)(sfs.f_bsize / 512L);
|
||||
if (((unsigned long)(sfs.f_bavail * temp) / 2048L) < needed) {
|
||||
RetVal = FALSE;
|
||||
WriteError("On \"%s\" only %d kb left, need %d kb", mntbuf[i].f_mntonname,
|
||||
(sfs.f_bavail * sfs.f_bsize) / 1024, needed * 1024);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
return RetVal;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Give a directory path and a filename, locate that filename in that
|
||||
* directory and return the filename with the correct case. This is
|
||||
|
@ -2206,7 +2206,6 @@ long file_size(char *path);
|
||||
long file_crc(char *path, int);
|
||||
time_t file_time(char *path);
|
||||
int mkdirs(char *name, mode_t);
|
||||
int diskfree(int);
|
||||
int getfilecase(char *, char *);
|
||||
|
||||
|
||||
|
@ -41,7 +41,6 @@ int termy = 24;
|
||||
|
||||
void TermInit(int mode, int x, int y)
|
||||
{
|
||||
Syslog('-', "Terminit(%d, %d, %d)", mode, x, y);
|
||||
termmode = mode;
|
||||
termx = x;
|
||||
termy = y;
|
||||
|
@ -1085,7 +1085,7 @@ TrType binkp_receiver(void)
|
||||
gettimeofday(&rxtvstart, &bp.tz);
|
||||
bp.rxpos = bp.roffs;
|
||||
|
||||
if (!diskfree(CFG.freespace)) {
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Binkp: low diskspace, sending BSY");
|
||||
binkp_send_command(MM_BSY, "Low diskspace, try again later");
|
||||
bp.RxState = RxDone;
|
||||
|
@ -346,8 +346,10 @@ int main(int argc, char *argv[])
|
||||
/*
|
||||
* Don't do outbound calls if low diskspace
|
||||
*/
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
WriteError("Low diskspace, abort");
|
||||
die(MBERR_DISK_FULL);
|
||||
}
|
||||
|
||||
if (addr == NULL) {
|
||||
WriteError("Calling mbcico without node address not supported anymore");
|
||||
|
@ -143,8 +143,10 @@ int main(int argc, char **argv)
|
||||
if (!do_quiet)
|
||||
printf("\n");
|
||||
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, abort");
|
||||
die(MBERR_DISK_FULL);
|
||||
}
|
||||
|
||||
if (lockprogram((char *)"mbaff")) {
|
||||
if (!do_quiet)
|
||||
|
@ -167,8 +167,10 @@ int main(int argc, char **argv)
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, abort");
|
||||
die(MBERR_DISK_FULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Extract work directory from the first commandline parameter
|
||||
|
@ -424,8 +424,10 @@ int main(int argc, char **argv)
|
||||
/*
|
||||
* Not yet locked, if anything goes wrong, exit with die(MBERR_NO_PROGLOCK)
|
||||
*/
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, abort");
|
||||
die(MBERR_DISK_FULL);
|
||||
}
|
||||
|
||||
if (do_mail) {
|
||||
/*
|
||||
@ -671,7 +673,8 @@ int TossMail(void)
|
||||
Syslog('+', "Detected upsalarm semafore, aborting toss");
|
||||
break;
|
||||
}
|
||||
if (!diskfree(CFG.freespace)) {
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, aborting toss");
|
||||
rc = MBERR_DISK_FULL;
|
||||
break;
|
||||
}
|
||||
@ -742,8 +745,10 @@ int TossPkts(void)
|
||||
*/
|
||||
while ((fname = pull_fdlist(&fdl)) != NULL) {
|
||||
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, abort tossing packet");
|
||||
return FALSE;
|
||||
}
|
||||
packets++;
|
||||
|
||||
/*
|
||||
|
@ -234,8 +234,10 @@ int main(int argc, char **argv)
|
||||
if (!do_quiet)
|
||||
printf("\n");
|
||||
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, abort");
|
||||
die(MBERR_DISK_FULL);
|
||||
}
|
||||
|
||||
if (lockprogram((char *)"mbfile")) {
|
||||
if (!do_quiet)
|
||||
|
@ -173,8 +173,10 @@ void ImportFiles(int Area)
|
||||
/*
|
||||
* Check diskspace
|
||||
*/
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, abort");
|
||||
die(MBERR_DISK_FULL);
|
||||
}
|
||||
|
||||
Files++;
|
||||
memset(&f_db, 0, sizeof(f_db));
|
||||
|
@ -358,8 +358,10 @@ void ReqIndex(void)
|
||||
|
||||
if (area.Available) {
|
||||
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, abort");
|
||||
die(MBERR_DISK_FULL);
|
||||
}
|
||||
|
||||
if (!do_quiet) {
|
||||
printf("\r%4ld => %-44s \b\b\b\b", i, area.Name);
|
||||
@ -597,8 +599,10 @@ void HtmlIndex(char *Lang)
|
||||
|
||||
if (area.Available) {
|
||||
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, abort");
|
||||
die(MBERR_DISK_FULL);
|
||||
}
|
||||
|
||||
if (!do_quiet) {
|
||||
printf("\r%4ld => %-44s \b\b\b\b", i, area.Name);
|
||||
|
@ -86,8 +86,10 @@ void Kill(void)
|
||||
|
||||
if ((area.Available) && (area.DLdays || area.FDdays) && (!area.CDrom)) {
|
||||
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, abort");
|
||||
die(MBERR_DISK_FULL);
|
||||
}
|
||||
|
||||
if (!do_quiet) {
|
||||
printf("\r%4d => %-44s \b\b\b\b", i, area.Name);
|
||||
|
@ -79,8 +79,10 @@ void PackFileBase(void)
|
||||
|
||||
if (area.Available && !area.CDrom) {
|
||||
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, abort");
|
||||
die(MBERR_DISK_FULL);
|
||||
}
|
||||
|
||||
if (!do_quiet) {
|
||||
printf("\r%4d => %-44s", i, area.Name);
|
||||
|
@ -158,8 +158,10 @@ void SortFileBase(int Area)
|
||||
|
||||
if (area.Available) {
|
||||
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, abort");
|
||||
die(MBERR_DISK_FULL);
|
||||
}
|
||||
|
||||
if (!do_quiet) {
|
||||
printf("Sorting area %d: %-44s", Area, area.Name);
|
||||
|
@ -177,8 +177,10 @@ int main(int argc,char *argv[])
|
||||
Syslog(' ', cmd);
|
||||
free(cmd);
|
||||
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, abort");
|
||||
die(MBERR_DISK_FULL);
|
||||
}
|
||||
|
||||
if (lockprogram((char *)"mbindex")) {
|
||||
if (!do_quiet)
|
||||
|
@ -277,8 +277,10 @@ void DoMsgBase()
|
||||
fread(&msgs, msgshdr.recsize, 1, pAreas);
|
||||
if (msgs.Active) {
|
||||
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, abort");
|
||||
die(MBERR_DISK_FULL);
|
||||
}
|
||||
|
||||
if (!do_quiet) {
|
||||
colour(3, 0);
|
||||
@ -306,8 +308,10 @@ void DoMsgBase()
|
||||
arearec++;
|
||||
if (msgs.Active) {
|
||||
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, abort");
|
||||
die(MBERR_DISK_FULL);
|
||||
}
|
||||
|
||||
Nopper();
|
||||
if (!do_quiet) {
|
||||
|
@ -610,8 +610,10 @@ void flush_queue(void)
|
||||
DIR *dp;
|
||||
|
||||
Syslog('+', "Flushing outbound queue");
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, not flushing outbound queue");
|
||||
return;
|
||||
}
|
||||
|
||||
IsDoing("Flush queue");
|
||||
if (!do_quiet) {
|
||||
|
@ -76,7 +76,8 @@ int Tic()
|
||||
}
|
||||
Syslog('+', "Pass: process ticfiles (%s)", inbound);
|
||||
|
||||
if (!diskfree(CFG.freespace)) {
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, abort tic processing");
|
||||
free(inbound);
|
||||
return -1;
|
||||
}
|
||||
@ -128,7 +129,8 @@ int Tic()
|
||||
Syslog('+', "Detected upsalarm semafore, aborting tic processing");
|
||||
break;
|
||||
}
|
||||
if (!diskfree(CFG.freespace)) {
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, aborting tic processing");
|
||||
rc = 0;
|
||||
break;
|
||||
}
|
||||
|
@ -100,8 +100,10 @@ int main(int argc, char **argv)
|
||||
Syslog(' ', cmd);
|
||||
free(cmd);
|
||||
|
||||
if (!diskfree(CFG.freespace))
|
||||
if (enoughspace(CFG.freespace) == 0) {
|
||||
Syslog('+', "Low diskspace, abort");
|
||||
ExitClient(MBERR_DISK_FULL);
|
||||
}
|
||||
|
||||
if (lockprogram((char *)"mbuser")) {
|
||||
if (!do_quiet)
|
||||
|
@ -162,6 +162,7 @@ void CloseFilearea(int force)
|
||||
unlink(fout);
|
||||
chmod(fin, 0640);
|
||||
Syslog('+', "Updated \"fareas.data\"");
|
||||
disk_reset();
|
||||
if (!force)
|
||||
working(6, 0, 0);
|
||||
return;
|
||||
|
@ -197,6 +197,7 @@ void CloseFGroup(int force)
|
||||
fclose(fo);
|
||||
unlink(fout);
|
||||
chmod(fin, 0640);
|
||||
disk_reset();
|
||||
Syslog('+', "Updated \"fgroups.data\"");
|
||||
if (!force)
|
||||
working(6, 0, 0);
|
||||
|
@ -1476,6 +1476,7 @@ void global_menu(void)
|
||||
if (crc != crc1) {
|
||||
if (yes_no((char *)"Configuration is changed, save") == 1) {
|
||||
cf_close();
|
||||
disk_reset();
|
||||
Syslog('+', "Saved main config");
|
||||
working(6, 0, 0);
|
||||
}
|
||||
|
@ -183,6 +183,7 @@ void CloseHatch(int force)
|
||||
fclose(fo);
|
||||
unlink(fout);
|
||||
chmod(fin, 0640);
|
||||
disk_reset();
|
||||
Syslog('+', "Updated \"hatch.data\"");
|
||||
if (!force)
|
||||
working(6, 0, 0);
|
||||
|
@ -239,6 +239,7 @@ void CloseLanguage(int force)
|
||||
tidy_stlist(&lan);
|
||||
chmod(fin, 0640);
|
||||
Syslog('+', "Updated \"language.data\"");
|
||||
disk_reset();
|
||||
if (!force)
|
||||
working(6, 0, 0);
|
||||
return;
|
||||
|
@ -174,6 +174,7 @@ void CloseMagics(int force)
|
||||
tidy_stlist(&mag);
|
||||
unlink(fout);
|
||||
chmod(fin, 0640);
|
||||
disk_reset();
|
||||
Syslog('+', "Updated \"magic.data\"");
|
||||
if (!force)
|
||||
working(6, 0, 0);
|
||||
|
@ -270,6 +270,7 @@ void CloseMsgarea(int Force)
|
||||
unlink(fout);
|
||||
chmod(fin, 0660);
|
||||
Syslog('+', "Updated \"mareas.data\"");
|
||||
disk_reset();
|
||||
if (!Force)
|
||||
working(6, 0, 0);
|
||||
return;
|
||||
|
@ -206,6 +206,7 @@ void CloseMGroup(int force)
|
||||
fclose(fo);
|
||||
unlink(fout);
|
||||
chmod(fin, 0640);
|
||||
disk_reset();
|
||||
Syslog('+', "Updated \"mgroups.data\"");
|
||||
if (!force)
|
||||
working(6, 0, 0);
|
||||
|
@ -259,6 +259,7 @@ void CloseNoderec(int Force)
|
||||
free(fin);
|
||||
free(fout);
|
||||
Syslog('+', "Updated \"nodes.data\"");
|
||||
disk_reset();
|
||||
CreateSema((char *)"scanout");
|
||||
working(6, 0, 0);
|
||||
return;
|
||||
|
@ -136,3 +136,9 @@ void addtoc(FILE *fp, FILE *toc, int chapt, int par, int page, char *title)
|
||||
|
||||
|
||||
|
||||
void disk_reset(void)
|
||||
{
|
||||
SockS("DRES:0;");
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,10 +1,12 @@
|
||||
#ifndef _MUTIL_H
|
||||
#define _MUTIL_H
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
unsigned char readkey(int, int, int, int);
|
||||
unsigned char testkey(int, int);
|
||||
int newpage(FILE *, int);
|
||||
void addtoc(FILE *, FILE *, int, int, int, char *);
|
||||
void disk_reset(void);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -34,11 +34,6 @@
|
||||
#include "taskutil.h"
|
||||
|
||||
|
||||
int disk_reread = FALSE; /* Reread tables */
|
||||
extern int T_Shutdown; /* Program shutdown */
|
||||
int disk_run = FALSE; /* Thread running */
|
||||
|
||||
|
||||
typedef struct _mfs_list {
|
||||
struct _mfs_list *next; /* Linked list */
|
||||
char *mountpoint; /* Mountpoint */
|
||||
@ -48,6 +43,12 @@ typedef struct _mfs_list {
|
||||
} mfs_list;
|
||||
|
||||
mfs_list *mfs = NULL; /* List of filesystems */
|
||||
int disk_reread = FALSE; /* Reread tables */
|
||||
extern int T_Shutdown; /* Program shutdown */
|
||||
int disk_run = FALSE; /* Thread running */
|
||||
|
||||
|
||||
pthread_mutex_t a_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||
|
||||
|
||||
/*
|
||||
@ -132,10 +133,10 @@ char *disk_check(char *token)
|
||||
static char buf[SS_BUFSIZE];
|
||||
mfs_list *tmp;
|
||||
unsigned long needed;
|
||||
int rc;
|
||||
|
||||
strtok(token, ",");
|
||||
needed = atol(strtok(NULL, ";"));
|
||||
Syslog('d', "disk_check(%ld)", needed);
|
||||
|
||||
if (! needed) {
|
||||
/*
|
||||
@ -153,16 +154,24 @@ char *disk_check(char *token)
|
||||
return buf;
|
||||
}
|
||||
|
||||
if ((rc = pthread_mutex_lock(&a_mutex)))
|
||||
Syslog('!', "disk_check() mutex_lock failed rc=%d", rc);
|
||||
|
||||
for (tmp = mfs; tmp; tmp = tmp->next) {
|
||||
if (tmp->avail < needed) {
|
||||
/*
|
||||
* Answer Not enough space
|
||||
*/
|
||||
if ((rc = pthread_mutex_unlock(&a_mutex)))
|
||||
Syslog('!', "disk_check() mutex_unlock failed rc=%d", rc);
|
||||
sprintf(buf, "100:1,0");
|
||||
return buf;
|
||||
}
|
||||
}
|
||||
|
||||
if ((rc = pthread_mutex_unlock(&a_mutex)))
|
||||
Syslog('!', "disk_check() mutex_unlock failed rc=%d", rc);
|
||||
|
||||
/*
|
||||
* Enough space
|
||||
*/
|
||||
@ -181,7 +190,7 @@ char *disk_getfs()
|
||||
static char buf[SS_BUFSIZE];
|
||||
char tt[80], *ans = NULL;
|
||||
mfs_list *tmp;
|
||||
int i = 0;
|
||||
int rc, i = 0;
|
||||
|
||||
buf[0] = '\0';
|
||||
if (mfs == NULL) {
|
||||
@ -189,6 +198,9 @@ char *disk_getfs()
|
||||
return buf;
|
||||
}
|
||||
|
||||
if ((rc = pthread_mutex_lock(&a_mutex)))
|
||||
Syslog('!', "disk_getfs() mutex_lock failed rc=%d", rc);
|
||||
|
||||
for (tmp = mfs; tmp; tmp = tmp->next) {
|
||||
i++;
|
||||
if (ans == NULL)
|
||||
@ -201,6 +213,8 @@ char *disk_getfs()
|
||||
if (i == 10) /* No more then 10 filesystems */
|
||||
break;
|
||||
}
|
||||
if ((rc = pthread_mutex_unlock(&a_mutex)))
|
||||
Syslog('!', "disk_getfs() mutex_unlock failed rc=%d", rc);
|
||||
|
||||
if (strlen(ans) > (SS_BUFSIZE - 8))
|
||||
sprintf(buf, "100:0;");
|
||||
@ -223,6 +237,10 @@ void update_diskstat(void)
|
||||
struct statfs sfs;
|
||||
unsigned long temp;
|
||||
mfs_list *tmp;
|
||||
int rc;
|
||||
|
||||
if ((rc = pthread_mutex_lock(&a_mutex)))
|
||||
Syslog('!', "update_diskstat() mutex_lock failed rc=%d", rc);
|
||||
|
||||
for (tmp = mfs; tmp; tmp = tmp->next) {
|
||||
if (statfs(tmp->mountpoint, &sfs) == 0) {
|
||||
@ -231,6 +249,9 @@ void update_diskstat(void)
|
||||
tmp->avail = (unsigned long)(sfs.f_bavail * temp) / 2048L;
|
||||
}
|
||||
}
|
||||
|
||||
if ((rc = pthread_mutex_unlock(&a_mutex)))
|
||||
Syslog('!', "update_diskstat() mutex_unlock failed rc=%d", rc);
|
||||
}
|
||||
|
||||
|
||||
@ -338,6 +359,7 @@ void *disk_thread(void)
|
||||
FILE *fp;
|
||||
char *temp;
|
||||
mfs_list *tmp;
|
||||
int rc;
|
||||
|
||||
Syslog('+', "Start disk thread");
|
||||
disk_run = TRUE;
|
||||
@ -348,6 +370,10 @@ void *disk_thread(void)
|
||||
if (disk_reread) {
|
||||
disk_reread = FALSE;
|
||||
Syslog('+', "Reread disk filesystems");
|
||||
|
||||
if ((rc = pthread_mutex_lock(&a_mutex)))
|
||||
Syslog('!', "disk_thread() mutex_lock failed rc=%d", rc);
|
||||
|
||||
tidy_mfslist(&mfs);
|
||||
|
||||
add_path(getenv("MBSE_ROOT"));
|
||||
@ -489,6 +515,9 @@ void *disk_thread(void)
|
||||
for (tmp = mfs; tmp; tmp = tmp->next) {
|
||||
Syslog('+', "%s %s %ld %ld", tmp->mountpoint, tmp->fstype, tmp->size, tmp->avail);
|
||||
}
|
||||
|
||||
if ((rc = pthread_mutex_unlock(&a_mutex)))
|
||||
Syslog('!', "disk_thread() mutex_unlock failed rc=%d", rc);
|
||||
}
|
||||
|
||||
update_diskstat();
|
||||
|
Reference in New Issue
Block a user