ref: babf901b4a508c3ec5d1f89655f10377bbdf9637
dir: /liblogfs/findfreeblock.c/
#include "logfsos.h"
#include "logfs.h"
#include "local.h"
long
logfsfindfreeblock(LogfsLowLevel *ll, AllocReason reason)
{
long b;
long total;
b = (*ll->findfreeblock)(ll, &total);
if(b < 0)
return b;
switch(reason) {
case AllocReasonReplace:
break;
case AllocReasonTransfer:
if(total <= Replacements)
return -1;
break;
case AllocReasonLogExtend:
if(total <= Replacements + Transfers)
return -1;
break;
case AllocReasonDataExtend:
if(total <= Replacements + Transfers + LogSlack)
return -1;
break;
}
//print("allocated free block %ld\n", b);
return b;
}