<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/fs/exofs/ore.c, branch v4.9.60</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>block, fs, mm, drivers: use bio set/get op accessors</title>
<updated>2016-06-07T19:41:38+00:00</updated>
<author>
<name>Mike Christie</name>
<email>mchristi@redhat.com</email>
</author>
<published>2016-06-05T19:31:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=95fe6c1a209ef89d9f94dd04a0ad72be1487d5d5'/>
<id>95fe6c1a209ef89d9f94dd04a0ad72be1487d5d5</id>
<content type='text'>
This patch converts the simple bi_rw use cases in the block,
drivers, mm and fs code to set/get the bio operation using
bio_set_op_attrs/bio_op

These should be simple one or two liner cases, so I just did them
in one patch. The next patches handle the more complicated
cases in a module per patch.

Signed-off-by: Mike Christie &lt;mchristi@redhat.com&gt;
Reviewed-by: Hannes Reinecke &lt;hare@suse.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch converts the simple bi_rw use cases in the block,
drivers, mm and fs code to set/get the bio operation using
bio_set_op_attrs/bio_op

These should be simple one or two liner cases, so I just did them
in one patch. The next patches handle the more complicated
cases in a module per patch.

Signed-off-by: Mike Christie &lt;mchristi@redhat.com&gt;
Reviewed-by: Hannes Reinecke &lt;hare@suse.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@fb.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Boaz Harrosh - Fix broken email address</title>
<updated>2014-10-19T17:22:32+00:00</updated>
<author>
<name>Boaz Harrosh</name>
<email>ooo@electrozaur.com</email>
</author>
<published>2014-10-19T16:38:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=aa281ac631008b9c18c405c8880007789f659c7d'/>
<id>aa281ac631008b9c18c405c8880007789f659c7d</id>
<content type='text'>
I no longer have access to the Panasas email.
So change to an email that can always reach me.

Signed-off-by: Boaz Harrosh &lt;ooo@electrozaur.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
I no longer have access to the Panasas email.
So change to an email that can always reach me.

Signed-off-by: Boaz Harrosh &lt;ooo@electrozaur.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ore: Support for raid 6</title>
<updated>2014-05-22T11:48:15+00:00</updated>
<author>
<name>Boaz Harrosh</name>
<email>bharrosh@panasas.com</email>
</author>
<published>2014-05-22T11:48:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=ce5d36aac26cc395fe3bc45525cdbad3644f01e5'/>
<id>ce5d36aac26cc395fe3bc45525cdbad3644f01e5</id>
<content type='text'>
This simple patch adds support for raid6 to the ORE.
Most operations and calculations where already for the general
case. Only things left:
* call async_gen_syndrome() in the case of raid6
  (NOTE that the raid6 math is the one supported by the Linux Kernel
   see: crypto/async_tx/async_pq.c)
* call _ore_add_parity_unit() twice with only last call generating
  the redundancy pages.

* Fix couple BUGS in old code
  a. In reads when parity==2 it can happen that per_dev-&gt;length=0
     but per_dev-&gt;offset was set and adjusted by _ore_add_sg_seg().
     Don't let it be overwritten.
  b. The all 'cur_comp &gt; starting_dev' thing to determine if:
       "per_dev-&gt;offset is in the current stripe number or the
       next one."
     Was a complete raid5/4 accident. When parity==2 this is not
     at all true usually. All we need to do is increment si-&gt;ob_offset
     once we pass by the first parity device.
     (This also greatly simplifies the code, amen)
  c. Calculation of si-&gt;dev rotation can overflow when parity==2.

* Then last enable raid6 in ore_verify_layout()

I want to deeply thank Daniel Gryniewicz who found first all the
bugs in the old raid code, and inspired these patches:
	Inspired-by Daniel Gryniewicz &lt;dang@linuxbox.com&gt;

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This simple patch adds support for raid6 to the ORE.
Most operations and calculations where already for the general
case. Only things left:
* call async_gen_syndrome() in the case of raid6
  (NOTE that the raid6 math is the one supported by the Linux Kernel
   see: crypto/async_tx/async_pq.c)
* call _ore_add_parity_unit() twice with only last call generating
  the redundancy pages.

* Fix couple BUGS in old code
  a. In reads when parity==2 it can happen that per_dev-&gt;length=0
     but per_dev-&gt;offset was set and adjusted by _ore_add_sg_seg().
     Don't let it be overwritten.
  b. The all 'cur_comp &gt; starting_dev' thing to determine if:
       "per_dev-&gt;offset is in the current stripe number or the
       next one."
     Was a complete raid5/4 accident. When parity==2 this is not
     at all true usually. All we need to do is increment si-&gt;ob_offset
     once we pass by the first parity device.
     (This also greatly simplifies the code, amen)
  c. Calculation of si-&gt;dev rotation can overflow when parity==2.

* Then last enable raid6 in ore_verify_layout()

I want to deeply thank Daniel Gryniewicz who found first all the
bugs in the old raid code, and inspired these patches:
	Inspired-by Daniel Gryniewicz &lt;dang@linuxbox.com&gt;

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ore: Remove redundant dev_order(), more cleanups</title>
<updated>2014-05-22T11:46:15+00:00</updated>
<author>
<name>Boaz Harrosh</name>
<email>bharrosh@panasas.com</email>
</author>
<published>2014-04-09T20:14:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=455682ce547817d75e38028283dc8db00754005d'/>
<id>455682ce547817d75e38028283dc8db00754005d</id>
<content type='text'>
Two cleanups:
* si-&gt;cur_comp, si-&gt;cur_pg where always calculated after
  the call to ore_calc_stripe_info() with the help of
  _dev_order(...). But these are already calculated by
  ore_calc_stripe_info() and can be just set there.
  (This is left over from the time that si-&gt;cur_comp, si-&gt;cur_pg
   were only used by raid code, but now the main loop manages
   them anyway even though they are ultimately not used in
   none raid code)

* si-&gt;cur_comp - For the very last stripe case, was set inside
  _ore_add_parity_unit(). This is not clear and will be wrong
  for coming raid6 so move this to only caller. Now si-&gt;cur_comp
  is only manipulated within _prepare_for_striping(), always next
  to the manipulation of cur_dev.
  Which is much easier to understand and follow.

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Two cleanups:
* si-&gt;cur_comp, si-&gt;cur_pg where always calculated after
  the call to ore_calc_stripe_info() with the help of
  _dev_order(...). But these are already calculated by
  ore_calc_stripe_info() and can be just set there.
  (This is left over from the time that si-&gt;cur_comp, si-&gt;cur_pg
   were only used by raid code, but now the main loop manages
   them anyway even though they are ultimately not used in
   none raid code)

* si-&gt;cur_comp - For the very last stripe case, was set inside
  _ore_add_parity_unit(). This is not clear and will be wrong
  for coming raid6 so move this to only caller. Now si-&gt;cur_comp
  is only manipulated within _prepare_for_striping(), always next
  to the manipulation of cur_dev.
  Which is much easier to understand and follow.

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ore: (trivial) reformat some code</title>
<updated>2014-05-22T11:45:21+00:00</updated>
<author>
<name>Boaz Harrosh</name>
<email>bharrosh@panasas.com</email>
</author>
<published>2014-04-03T14:53:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=101a642781cf6b37848c5468d6c1a20a76c35ea9'/>
<id>101a642781cf6b37848c5468d6c1a20a76c35ea9</id>
<content type='text'>
rearrange some source lines. Nothing changed.

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
rearrange some source lines. Nothing changed.

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ore: Don't crash on NULL bio in _clear_bio</title>
<updated>2014-01-23T16:36:22+00:00</updated>
<author>
<name>Boaz Harrosh</name>
<email>bharrosh@panasas.com</email>
</author>
<published>2014-01-13T17:10:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=2deb76db092a91088494c00862bafc4fe7980adb'/>
<id>2deb76db092a91088494c00862bafc4fe7980adb</id>
<content type='text'>
In the case of target returning OSD_ERR_PRI_CLEAR_PAGES when we
only sent for attributes don't crash on NULL bio.
This is an osd-target bug but don't crash regardless

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In the case of target returning OSD_ERR_PRI_CLEAR_PAGES when we
only sent for attributes don't crash on NULL bio.
This is an osd-target bug but don't crash regardless

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ore: Fix wrong math in allocation of per device BIO</title>
<updated>2014-01-23T08:55:03+00:00</updated>
<author>
<name>Boaz Harrosh</name>
<email>bharrosh@panasas.com</email>
</author>
<published>2013-11-21T15:58:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=aad560b7f63b495f48a7232fd086c5913a676e6f'/>
<id>aad560b7f63b495f48a7232fd086c5913a676e6f</id>
<content type='text'>
At IO preparation we calculate the max pages at each device and
allocate a BIO per device of that size. The calculation was wrong
on some unaligned corner cases offset/length combination and would
make prepare return with -ENOMEM. This would be bad for pnfs-objects
that would in that case IO through MDS. And fatal for exofs were it
would fail writes with EIO.

Fix it by doing the proper math, that will work in all cases. (I
ran a test with all possible offset/length combinations this time
round).

Also when reading we do not need to allocate for the parity units
since we jump over them.

Also lower the max_io_length to take into account the parity pages
so not to allocate BIOs bigger than PAGE_SIZE

CC: Stable Kernel &lt;stable@vger.kernel.org&gt;
Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
At IO preparation we calculate the max pages at each device and
allocate a BIO per device of that size. The calculation was wrong
on some unaligned corner cases offset/length combination and would
make prepare return with -ENOMEM. This would be bad for pnfs-objects
that would in that case IO through MDS. And fatal for exofs were it
would fail writes with EIO.

Fix it by doing the proper math, that will work in all cases. (I
ran a test with all possible offset/length combinations this time
round).

Also when reading we do not need to allocate for the parity units
since we jump over them.

Also lower the max_io_length to take into account the parity pages
so not to allocate BIOs bigger than PAGE_SIZE

CC: Stable Kernel &lt;stable@vger.kernel.org&gt;
Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>block: Add bio_for_each_segment_all()</title>
<updated>2013-03-23T21:26:28+00:00</updated>
<author>
<name>Kent Overstreet</name>
<email>koverstreet@google.com</email>
</author>
<published>2013-02-06T20:23:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=d74c6d514fe314b8bdab58b487b25992291577ec'/>
<id>d74c6d514fe314b8bdab58b487b25992291577ec</id>
<content type='text'>
__bio_for_each_segment() iterates bvecs from the specified index
instead of bio-&gt;bv_idx.  Currently, the only usage is to walk all the
bvecs after the bio has been advanced by specifying 0 index.

For immutable bvecs, we need to split these apart;
bio_for_each_segment() is going to have a different implementation.
This will also help document the intent of code that's using it -
bio_for_each_segment_all() is only legal to use for code that owns the
bio.

Signed-off-by: Kent Overstreet &lt;koverstreet@google.com&gt;
CC: Jens Axboe &lt;axboe@kernel.dk&gt;
CC: Neil Brown &lt;neilb@suse.de&gt;
CC: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
__bio_for_each_segment() iterates bvecs from the specified index
instead of bio-&gt;bv_idx.  Currently, the only usage is to walk all the
bvecs after the bio has been advanced by specifying 0 index.

For immutable bvecs, we need to split these apart;
bio_for_each_segment() is going to have a different implementation.
This will also help document the intent of code that's using it -
bio_for_each_segment_all() is only legal to use for code that owns the
bio.

Signed-off-by: Kent Overstreet &lt;koverstreet@google.com&gt;
CC: Jens Axboe &lt;axboe@kernel.dk&gt;
CC: Neil Brown &lt;neilb@suse.de&gt;
CC: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>block: Add bio_clone_bioset(), bio_clone_kmalloc()</title>
<updated>2012-09-09T08:35:39+00:00</updated>
<author>
<name>Kent Overstreet</name>
<email>koverstreet@google.com</email>
</author>
<published>2012-09-06T22:35:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=bf800ef1816b4283a885e55ad38068aec9711e4d'/>
<id>bf800ef1816b4283a885e55ad38068aec9711e4d</id>
<content type='text'>
Previously, there was bio_clone() but it only allocated from the fs bio
set; as a result various users were open coding it and using
__bio_clone().

This changes bio_clone() to become bio_clone_bioset(), and then we add
bio_clone() and bio_clone_kmalloc() as wrappers around it, making use of
the functionality the last patch adedd.

This will also help in a later patch changing how bio cloning works.

Signed-off-by: Kent Overstreet &lt;koverstreet@google.com&gt;
CC: Jens Axboe &lt;axboe@kernel.dk&gt;
CC: NeilBrown &lt;neilb@suse.de&gt;
CC: Alasdair Kergon &lt;agk@redhat.com&gt;
CC: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
CC: Jeff Garzik &lt;jeff@garzik.org&gt;
Acked-by: Jeff Garzik &lt;jgarzik@redhat.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously, there was bio_clone() but it only allocated from the fs bio
set; as a result various users were open coding it and using
__bio_clone().

This changes bio_clone() to become bio_clone_bioset(), and then we add
bio_clone() and bio_clone_kmalloc() as wrappers around it, making use of
the functionality the last patch adedd.

This will also help in a later patch changing how bio cloning works.

Signed-off-by: Kent Overstreet &lt;koverstreet@google.com&gt;
CC: Jens Axboe &lt;axboe@kernel.dk&gt;
CC: NeilBrown &lt;neilb@suse.de&gt;
CC: Alasdair Kergon &lt;agk@redhat.com&gt;
CC: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
CC: Jeff Garzik &lt;jeff@garzik.org&gt;
Acked-by: Jeff Garzik &lt;jgarzik@redhat.com&gt;
Signed-off-by: Jens Axboe &lt;axboe@kernel.dk&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>ore: Fix out-of-bounds access in _ios_obj()</title>
<updated>2012-08-02T13:41:56+00:00</updated>
<author>
<name>Boaz Harrosh</name>
<email>bharrosh@panasas.com</email>
</author>
<published>2012-08-01T14:48:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=9e62bb4458ad2cf28bd701aa5fab380b846db326'/>
<id>9e62bb4458ad2cf28bd701aa5fab380b846db326</id>
<content type='text'>
_ios_obj() is accessed by group_index not device_table index.

The oc-&gt;comps array is only a group_full of devices at a time
it is not like ore_comp_dev() which is indexed by a global
device_table index.

This did not BUG until now because exofs only uses a single
COMP for all devices. But with other FSs like PanFS this is
not true.

This bug was only in the write_path, all other users were
using it correctly

[This is a bug since 3.2 Kernel]
CC: Stable Tree &lt;stable@kernel.org&gt;

Signed-off-by: Boaz Harrosh &lt;bharrosh@panasas.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
_ios_obj() is accessed by group_index not device_table index.

The oc-&gt;comps array is only a group_full of devices at a time
it is not like ore_comp_dev() which is indexed by a global
device_table index.

This did not BUG until now because exofs only uses a single
COMP for all devices. But with other FSs like PanFS this is
not true.

This bug was only in the write_path, all other users were
using it correctly

[This is a bug since 3.2 Kernel]
CC: Stable Tree &lt;stable@kernel.org&gt;

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