All pastes #31219 Raw Edit

neuron

public text v1 · immutable
#31219 ·published 2005-11-25 19:42 UTC
rendered paste body
move compressible_filetype out of find.c and apply those filters to open aswell when deciding on choosing compressor in fuse_open.
 - modify compressible_filetype, it can't check size and such on new files in fuse_open.
 - remember to check rsync's temporary filenames for example, to apply filters to those .bz2 files aswell.
remove find.c
remove lists.c (and or replace 99% of it, keep the ignorelist part, but we dont need lock on it, set it up on init and let it be read only after that)

direct_open should not clean from database compressor is unset even if accesses = 0
  if accesses = 0
      if (!compressor && not in ignore list) {
          entry->accessess++; // means it wont be cleaned, and compressor thread expects accesses = 1 for itself.
          lock_compressor_db;
          list_add_tail(this entry,to_be_compressed database); 
          unlock_compressor_db;
          signal(compressor thread);
      } else // clean from database only if we have a compressor OR the file should be ignored.
          clean from database
}

compressor_thread:
    sleep(1); // sleep 1 second, incase a decompressed file is reopened very quickly.
    lock_compressor_db;
    for_every_entry_in_list
        lock_entry;
        assert(accessess > 0);
        if (accesses == 1) {
            // We're the only one with access, great.
            choose compressor and compress file
            set entry-> data to the right compressor and size and such :)
            // does NOT remove us from the direct_database, if we do that we need lock_database BEFORE lock_entry (or we risk hardlock), and the next open loop will flush it anyway.
        }
        
        remove_from_compressor_db(entry);
        unlock_entry; // remove_from_compressor_db doesn't screw with the entry, it just removes it from our local list.
   unlock_compressor_db;