<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/fs/exofs/inode.c, branch linux-3.3.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.3.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.3.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2012-01-04T03:55:05Z</updated>
<entry>
<title>exofs: propagate umode_t</title>
<updated>2012-01-04T03:55:05Z</updated>
<author>
<name>Al Viro</name>
</author>
<published>2011-07-26T07:07:49Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=bef41c267e2b903f411c0f56236027f68553b721'/>
<id>urn:sha1:bef41c267e2b903f411c0f56236027f68553b721</id>
<content type='text'>
Signed-off-by: Al Viro &lt;viro@zeniv.linux.org.uk&gt;
</content>
</entry>
<entry>
<title>filesystems: add set_nlink()</title>
<updated>2011-11-02T11:53:43Z</updated>
<author>
<name>Miklos Szeredi</name>
</author>
<published>2011-10-28T12:13:29Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=bfe8684869601dacfcb2cd69ef8cfd9045f62170'/>
<id>urn:sha1:bfe8684869601dacfcb2cd69ef8cfd9045f62170</id>
<content type='text'>
Replace remaining direct i_nlink updates with a new set_nlink()
updater function.

Signed-off-by: Miklos Szeredi &lt;mszeredi@suse.cz&gt;
Tested-by: Toshiyuki Okajima &lt;toshi.okajima@jp.fujitsu.com&gt;
Signed-off-by: Christoph Hellwig &lt;hch@lst.de&gt;
</content>
</entry>
<entry>
<title>exofs: Support for RAID5 read-4-write interface.</title>
<updated>2011-10-25T00:22:28Z</updated>
<author>
<name>Boaz Harrosh</name>
</author>
<published>2011-10-12T13:42:07Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=dd296619974c50c46c67e58f355a7e85ef3f0c01'/>
<id>urn:sha1:dd296619974c50c46c67e58f355a7e85ef3f0c01</id>
<content type='text'>
The ore need suplied a r4w_get_page/r4w_put_page API
from Filesystem so it can get cache pages to read-into when
writing parial stripes.

Also I commented out and NULLed the .writepage (singular)
vector. Because it gives terrible write pattern to raid
and is apparently not needed. Even in OOM conditions the
system copes (even better) with out it.

TODO: How to specify to write_cache_pages() to start
      or include a certain page?

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</content>
</entry>
<entry>
<title>ore/exofs: Change ore_check_io API</title>
<updated>2011-10-14T16:54:42Z</updated>
<author>
<name>Boaz Harrosh</name>
</author>
<published>2011-09-28T10:25:50Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=4b46c9f5cf69505f0bc708995b88b0cc60317ffd'/>
<id>urn:sha1:4b46c9f5cf69505f0bc708995b88b0cc60317ffd</id>
<content type='text'>
Current ore_check_io API receives a residual
pointer, to report partial IO. But it is actually
not used, because in a multiple devices IO there
is never a linearity in the IO failure.

On the other hand if every failing device is reported
through a received callback measures can be taken to
handle only failed devices. One at a time.

This will also be needed by the objects-layout-driver
for it's error reporting facility.

Exofs is not currently using the new information and
keeps the old behaviour of failing the complete IO in
case of an error. (No partial completion)

TODO: Use an ore_check_io callback to set_page_error only
the failing pages. And re-dirty write pages.

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</content>
</entry>
<entry>
<title>ore/exofs: Define new ore_verify_layout</title>
<updated>2011-10-14T16:54:41Z</updated>
<author>
<name>Boaz Harrosh</name>
</author>
<published>2011-09-28T10:18:45Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=5a51c0c7e9a913649aa65d8233470682bcbb7694'/>
<id>urn:sha1:5a51c0c7e9a913649aa65d8233470682bcbb7694</id>
<content type='text'>
All users of the ore will need to check if current code
supports the given layout. For example RAID5/6 is not
currently supported.

So move all the checks from exofs/super.c to a new
ore_verify_layout() to be used by ore users.

Note that any new layout should be passed through the
ore_verify_layout() because the ore engine will prepare
and verify some internal members of ore_layout, and
assumes it's called.

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</content>
</entry>
<entry>
<title>exofs: Support for short read/writes</title>
<updated>2011-10-14T16:54:39Z</updated>
<author>
<name>Boaz Harrosh</name>
</author>
<published>2011-08-27T04:00:32Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=154a9300cd87eee7538f356c9d339f06b0b1d257'/>
<id>urn:sha1:154a9300cd87eee7538f356c9d339f06b0b1d257</id>
<content type='text'>
If at read/write_done the actual IO was shorter then requested,
reported in returned ios-&gt;length. It is not an error. The reminder
of the pages should just be unlocked but not marked uptodate or
end_page_writeback. They will be re issued later by the VFS.

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</content>
</entry>
<entry>
<title>ore: Only IO one group at a time (API change)</title>
<updated>2011-10-14T16:52:50Z</updated>
<author>
<name>Boaz Harrosh</name>
</author>
<published>2011-09-28T08:55:51Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b916c5cd4d895a27b47a652648958f73e4f23ac6'/>
<id>urn:sha1:b916c5cd4d895a27b47a652648958f73e4f23ac6</id>
<content type='text'>
Usually a single IO is confined to one group of devices
(group_width) and at the boundary of a raid group it can
spill into a second group. Current code would allocate a
full device_table size array at each io_state so it can
comply to requests that span two groups. Needless to say
that is very wasteful, specially when device_table count
can get very large (hundreds even thousands), while a
group_width is usually 8 or 10.

* Change ore API to trim on IO that spans two raid groups.
  The user passes offset+length to ore_get_rw_state, the
  ore might trim on that length if spanning a group boundary.
  The user must check ios-&gt;length or ios-&gt;nrpages to see
  how much IO will be preformed. It is the responsibility
  of the user to re-issue the reminder of the IO.

* Modify exofs To copy spilled pages on to the next IO.
  This means one last kick is needed after all coalescing
  of pages is done.

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</content>
</entry>
<entry>
<title>exofs: Rename struct ore_components comps =&gt; oc</title>
<updated>2011-10-03T15:07:50Z</updated>
<author>
<name>Boaz Harrosh</name>
</author>
<published>2011-09-28T08:39:59Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=5bf696dad4beecb6174e701c97e1f2574e6a2c96'/>
<id>urn:sha1:5bf696dad4beecb6174e701c97e1f2574e6a2c96</id>
<content type='text'>
ore_components already has a comps member so this leads
to things like comps-&gt;comps which is annoying. the name oc
was already used in new code. So rename all old usage of
ore_components comps =&gt; ore_components oc.

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</content>
</entry>
<entry>
<title>exofs: Rename raid engine from exofs/ios.c =&gt; ore</title>
<updated>2011-08-07T02:36:18Z</updated>
<author>
<name>Boaz Harrosh</name>
</author>
<published>2011-08-07T02:26:31Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=8ff660ab85f524bdc7652eb5d38aaef1d66aa9c7'/>
<id>urn:sha1:8ff660ab85f524bdc7652eb5d38aaef1d66aa9c7</id>
<content type='text'>
ORE stands for "Objects Raid Engine"

This patch is a mechanical rename of everything that was in ios.c
and its API declaration to an ore.c and an osd_ore.h header. The ore
engine will later be used by the pnfs objects layout driver.

* File ios.c =&gt; ore.c

* Declaration of types and API are moved from exofs.h to a new
  osd_ore.h

* All used types are prefixed by ore_ from their exofs_ name.

* Shift includes from exofs.h to osd_ore.h so osd_ore.h is
  independent, include it from exofs.h.

Other than a pure rename there are no other changes. Next patch
will move the ore into it's own module and will export the API
to be used by exofs and later the layout driver

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</content>
</entry>
<entry>
<title>exofs: ios: Move to a per inode components &amp; device-table</title>
<updated>2011-08-07T02:35:32Z</updated>
<author>
<name>Boaz Harrosh</name>
</author>
<published>2011-08-05T22:06:04Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=9e9db45649eb5d3ee5622fdad741914ecf1016a0'/>
<id>urn:sha1:9e9db45649eb5d3ee5622fdad741914ecf1016a0</id>
<content type='text'>
Exofs raid engine was saving on memory space by having a single layout-info,
single pid, and a single device-table, global to the filesystem. Then passing
a credential and object_id info at the io_state level, private for each
inode. It would also devise this contraption of rotating the device table
view for each inode-&gt;ino to spread out the device usage.

This is not compatible with the pnfs-objects standard, demanding that
each inode can have it's own layout-info, device-table, and each object
component it's own pid, oid and creds.

So: Bring exofs raid engine to be usable for generic pnfs-objects use by:

* Define an exofs_comp structure that holds obj_id and credential info.

* Break up exofs_layout struct to an exofs_components structure that holds a
  possible array of exofs_comp and the array of devices + the size of the
  arrays.

* Add a "comps" parameter to get_io_state() that specifies the ids creds
  and device array to use for each IO.

  This enables to keep the layout global, but the device-table view, creds
  and IDs at the inode level. It only adds two 64bit to each inode, since
  some of these members already existed in another form.

* ios raid engine now access layout-info and comps-info through the passed
  pointers. Everything is pre-prepared by caller for generic access of
  these structures and arrays.

At the exofs Level:

* Super block holds an exofs_components struct that holds the device
  array, previously in layout. The devices there are in device-table
  order. The device-array is twice bigger and repeats the device-table
  twice so now each inode's device array can point to a random device
  and have a round-robin view of the table, making it compatible to
  previous exofs versions.

* Each inode has an exofs_components struct that is initialized at
  load time, with it's own view of the device table IDs and creds.
  When doing IO this gets passed to the io_state together with the
  layout.

While preforming this change. Bugs where found where credentials with the
wrong IDs where used to access the different SB objects (super.c). As well
as some dead code. It was never noticed because the target we use does not
check the credentials.

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</content>
</entry>
</feed>
