findfreeblock.c 592 B

12345678910111213141516171819202122232425262728293031
  1. #include "logfsos.h"
  2. #include "logfs.h"
  3. #include "local.h"
  4. long
  5. logfsfindfreeblock(LogfsLowLevel *ll, AllocReason reason)
  6. {
  7. long b;
  8. long total;
  9. b = (*ll->findfreeblock)(ll, &total);
  10. if(b < 0)
  11. return b;
  12. switch(reason) {
  13. case AllocReasonReplace:
  14. break;
  15. case AllocReasonTransfer:
  16. if(total <= Replacements)
  17. return -1;
  18. break;
  19. case AllocReasonLogExtend:
  20. if(total <= Replacements + Transfers)
  21. return -1;
  22. break;
  23. case AllocReasonDataExtend:
  24. if(total <= Replacements + Transfers + LogSlack)
  25. return -1;
  26. break;
  27. }
  28. //print("allocated free block %ld\n", b);
  29. return b;
  30. }