• Boaz Harrosh's avatar
    exofs: Define on-disk per-inode optional layout attribute · d9c740d2
    Boaz Harrosh authored
    * Layouts describe the way a file is spread on multiple devices.
      The layout information is stored in the objects attribute introduced
      in this patch.
    
    * There can be multiple generating function for the layout.
      Currently defined:
        - No attribute present - use below moving-window on global
          device table, all devices.
          (This is the only one currently used in exofs)
        - an obj_id generated moving window - the obj_id is a randomizing
          factor in the otherwise global map layout.
        - An explicit layout stored, including a data_map and a device
          index list.
        - More might be defined in future ...
    
    * There are two attributes defined of the same structure:
      A-data-files-layout - This layout is used by data-files. If present
                            at a directory, all files of that directory will
                            be created with this layout.
      A-meta-data-layout - This layout is used by a directory and other
                           meta-data information. Also inherited at creation
                           of subdirectories.
    
    * At creation time inodes are created with the layout specified above.
      A usermode utility may change the creation layout on a give directory
      or file. Which in the case of directories, will also apply to newly
      created files/subdirectories, children of that directory.
      In the simple unaltered case of a newly created exofs, no layout
      attributes are present, and all layouts adhere to the layout specified
      at the device-table.
    
    * In case of a future file system loaded in an old exofs-driver.
      At iget(), the generating_function is inspected and if not supported
      will return an IO error to the application and the inode will not
      be loaded. So not to damage any data.
      Note: After this patch we do not yet support any type of layout
            only the RAID0 patch that enables striping at the super-block
            level will add support for RAID0 layouts above. This way we
            are past and future compatible and fully bisectable.
    
    * Access to the device table is done by an accessor since
      it will change according to above information.
    Signed-off-by: default avatarBoaz Harrosh <bharrosh@panasas.com>
    d9c740d2
common.h 8.16 KB