# $Header$
+# kludge kludge kludge
+sub __STDC__ {0;}
+require "fcntl.ph";
+
$afsbin="/moira/bin";
$vos="$afsbin/vos";
$pts="$afsbin/pts";
$fs="$afsbin/fs";
+$zwrite="/usr/athena/bin/zwrite";
$afs_data="/moira/afs/afs_data";
$afs_save="$afs_data.tmp";
-$LOCK_EX=2;
-$LOCK_UN=8;
-
%vtypes_ATHENA_MIT_EDU =
("ACTIVITY", "activity",
"APROJ", "aproj",
# 8. Close the data file.
+$flock_t="ssllllllll";
+
sub afs_lock
{
open(SRV,"+<$afs_data") || die "Unable to open $afs_data\n";
select((select(SRV), $|=1)[$[]);
- flock(SRV, $LOCK_EX) || die "Unable to lock $afs_data\n";
+ $flkarr[0]=&F_WRLCK;
+ $flkarr[1]=$flkarr[2]=$flkarr[3]=$flkarr[4]=$flkarr[5]=$flkarr[6]=0;
+ $flkarr[7]=$flkarr[8]=$flkarr[9]=0;
+ $flk=pack($flock_t,@flkarr);
+ fcntl(SRV, &F_SETLKW, $flk) || die "Unable to lock $afs_data:$!\n";
die "Temporary status file: $afs_save exists... aborting\n"
if (-f $afs_save);
open(SRV2, ">$afs_save");
# max[ (2*free space) - (unused quota) ]
# = max(2*total - usage - alloc)
#
-# Note: This routine does not actually adjust the quota; the caller
-# should use afs_quota_adj();
+# Note: This routine does not actually adjust the quota;
+# the calling routine should use afs_quota_adj();
sub afs_find
{
#
sub afs_quota_adj
{
- local($cell,$asrv,$apart,$adj) = @_;
+ local($cell,$asrv,$apart,$adj,$dusage) = @_;
local($found) = 0;
&afs_lock;
for (@afs_data) {
local ($c, $as, $ap, $t, $total, $used, $alloc) = split(/\s+/,$_);
if ($c eq $cell && $as eq $asrv && $ap eq $apart) {
+ $dusage = $used unless ($dusage);
$alloc += $adj;
- $_ = join(' ',$c,$asrv,$apart,$t,$total,$used,$alloc);
+ $_ = join(' ',$c,$asrv,$apart,$t,$total,$dusage,$alloc);
$found = 1;
}
print SRV "$_\n";