• Boaz Harrosh's avatar
    exofs: Move all operations to an io_engine · 06886a5a
    Boaz Harrosh authored
    In anticipation for multi-device operations, we separate osd operations
    into an abstract I/O API. Currently only one device is used but later
    when adding more devices, we will drive all devices in parallel according
    to a "data_map" that describes how data is arranged on multiple devices.
    The file system level operates, like before, as if there is one object
    (inode-number) and an i_size. The io engine will split this to the same
    object-number but on multiple device.
    
    At first we introduce Mirror (raid 1) layout. But at the final outcome
    we intend to fully implement the pNFS-Objects data-map, including
    raid 0,4,5,6 over mirrored devices, over multiple device-groups. And
    more. See: http://tools.ietf.org/html/draft-ietf-nfsv4-pnfs-obj-12
    
    * Define an io_state based API for accessing osd storage devices
      in an abstract way.
      Usage:
    	First a caller allocates an io state with:
    		exofs_get_io_state(struct exofs_sb_info *sbi,
    				   struct exofs_io_state** ios);
    
    	Then calles one of:
    		exofs_sbi_create(struct exofs_io_state *ios);
    		exofs_sbi_remove(struct exofs_io_state *ios);
    		exofs_sbi_write(struct exofs_io_state *ios);
    		exofs_sbi_read(struct exofs_io_state *ios);
    		exofs_oi_truncate(struct exofs_i_info *oi, u64 new_len);
    
    	And when done
    		exofs_put_io_state(struct exofs_io_state *ios);
    
    * Convert all source files to use this new API
    * Convert from bio_alloc to bio_kmalloc
    * In io engine we make use of the now fixed osd_req_decode_sense
    
    There are no functional changes or on disk additions after this patch.
    Signed-off-by: default avatarBoaz Harrosh <bharrosh@panasas.com>
    06886a5a
inode.c 30.8 KB