Jelajahi Sumber

speeded up volume block allocation - thanks to Felix!

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8282 8c9fc860-2736-0410-a75d-ab315db34111
eth.morozova 7 tahun lalu
induk
melakukan
59c2648cae
1 mengubah file dengan 4 tambahan dan 1 penghapusan
  1. 4 1
      source/Files.Mod

+ 4 - 1
source/Files.Mod

@@ -187,10 +187,13 @@ TYPE
 			IF size - used <= reserved THEN HALT(VolumeFull) END;
 			ASSERT(hint >= 0);
 			IF hint > size THEN hint := 0 END;
+			hint := hint - hint MOD SetSize; (* in order to make sure that hint is hit when increasing by SetSize *)
 			adr := hint+1;
 			LOOP
 				IF adr > size THEN adr := 0 END;
-				IF (adr MOD SetSize) IN map[adr DIV SetSize] THEN
+				IF (adr MOD SetSize = 0) & (map[adr DIV SetSize] = {MIN(SET)..MAX(SET)}) THEN
+					INC(adr,SetSize);
+				ELSIF (adr MOD SetSize) IN map[adr DIV SetSize] THEN
 					INC(adr) (* Block in use *)
 				ELSE
 					INCL(map[adr DIV SetSize], adr MOD SetSize);