]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commit
exofs: Move all operations to an io_engine
authorBoaz Harrosh <bharrosh@panasas.com>
Sun, 8 Nov 2009 12:54:08 +0000 (14:54 +0200)
committerBoaz Harrosh <bharrosh@panasas.com>
Thu, 10 Dec 2009 07:59:22 +0000 (09:59 +0200)
commit06886a5a3dc5a5abe0a4d257c26317bde7047be8
tree858ac56e120c0473d764fc64a2660e6d79729c8c
parent8ce9bdd1fbe962933736d7977e972972cd5d754c
exofs: Move all operations to an io_engine

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: Boaz Harrosh <bharrosh@panasas.com>
fs/exofs/common.h
fs/exofs/exofs.h
fs/exofs/inode.c
fs/exofs/ios.c
fs/exofs/super.c