1*28942eadSforsyth #include "logfsos.h" 237da2899SCharles.Forsyth #include "logfs.h" 337da2899SCharles.Forsyth #include "local.h" 437da2899SCharles.Forsyth 537da2899SCharles.Forsyth long logfsfindfreeblock(LogfsLowLevel * ll,AllocReason reason)637da2899SCharles.Forsythlogfsfindfreeblock(LogfsLowLevel *ll, AllocReason reason) 737da2899SCharles.Forsyth { 837da2899SCharles.Forsyth long b; 937da2899SCharles.Forsyth long total; 1037da2899SCharles.Forsyth b = (*ll->findfreeblock)(ll, &total); 1137da2899SCharles.Forsyth if(b < 0) 1237da2899SCharles.Forsyth return b; 1337da2899SCharles.Forsyth switch(reason) { 1437da2899SCharles.Forsyth case AllocReasonReplace: 1537da2899SCharles.Forsyth break; 1637da2899SCharles.Forsyth case AllocReasonTransfer: 1737da2899SCharles.Forsyth if(total <= Replacements) 1837da2899SCharles.Forsyth return -1; 1937da2899SCharles.Forsyth break; 2037da2899SCharles.Forsyth case AllocReasonLogExtend: 2137da2899SCharles.Forsyth if(total <= Replacements + Transfers) 2237da2899SCharles.Forsyth return -1; 2337da2899SCharles.Forsyth break; 2437da2899SCharles.Forsyth case AllocReasonDataExtend: 2537da2899SCharles.Forsyth if(total <= Replacements + Transfers + LogSlack) 2637da2899SCharles.Forsyth return -1; 2737da2899SCharles.Forsyth break; 2837da2899SCharles.Forsyth } 2937da2899SCharles.Forsyth //print("allocated free block %ld\n", b); 3037da2899SCharles.Forsyth return b; 3137da2899SCharles.Forsyth } 32