def clean_segment(self): segment = Segment.SegmentClass(self.next_segment_to_clean) for i in range(0, NUMBLOCKS): blockidtocheck = segment.segmentbase + 1 + i data = Disk.disk.blockread(blockidtocheck) data = data[BLOCKSIZE:] inodeid, blockoffset = struct.unpack("II", data) if not self._is_valid(inodeid, blockoffset): continue inodeblockid = InodeMap.inodemap.lookup(inodeid) if inodeblockid == None: segment.superblock.blockinuse[i] = False if DEBUG: print "Cleaner cleaned :", blockidtocheck else: if blockoffset != INODEIDENTIFIEROFFSET: inodeobject = Inode( str=Segment.segmentmanager.blockread(inodeblockid)) if blockoffset == INDIRECTBLOCKOFFSET: if inodeobject.indirectblock != blockidtocheck: segment.superblock.blockinuse[i] = False if DEBUG: print "Cleaner cleaned :", blockidtocheck else: storedblockid = inodeobject.find_datablock_by_offset( blockoffset) if storedblockid != blockidtocheck: segment.superblock.blockinuse[i] = False if DEBUG: print "Cleaner cleaned :", blockidtocheck else: if inodeblockid != blockidtocheck: segment.superblock.blockinuse[i] = False if DEBUG: print "Cleaner cleaned :", blockidtocheck