<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/drivers/md/md.c, branch v3.12.5</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>md: test mddev-&gt;flags more safely in md_check_recovery.</title>
<updated>2013-12-04T19:05:54+00:00</updated>
<author>
<name>NeilBrown</name>
<email>neilb@suse.de</email>
</author>
<published>2013-11-27T23:34:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=52df633c9c9c92264e04e1ead9290e5192a8768e'/>
<id>52df633c9c9c92264e04e1ead9290e5192a8768e</id>
<content type='text'>
commit 142d44c310819e1965ca70b4d55d7679f5797e25 upstream.

commit 7a0a5355cbc71efa md: Don't test all of mddev-&gt;flags at once.
made most tests on mddev-&gt;flags safer, but missed one.

When
commit 260fa034ef7a4ff8b7306 md: avoid deadlock when dirty buffers during md_stop.
added MD_STILL_CLOSED, this caused md_check_recovery to misbehave.
It can think there is something to do but find nothing.  This can
lead to the md thread spinning during array shutdown.

https://bugzilla.kernel.org/show_bug.cgi?id=65721

Reported-and-tested-by: Richard W.M. Jones &lt;rjones@redhat.com&gt;
Fixes: 260fa034ef7a4ff8b7306
Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 142d44c310819e1965ca70b4d55d7679f5797e25 upstream.

commit 7a0a5355cbc71efa md: Don't test all of mddev-&gt;flags at once.
made most tests on mddev-&gt;flags safer, but missed one.

When
commit 260fa034ef7a4ff8b7306 md: avoid deadlock when dirty buffers during md_stop.
added MD_STILL_CLOSED, this caused md_check_recovery to misbehave.
It can think there is something to do but find nothing.  This can
lead to the md thread spinning during array shutdown.

https://bugzilla.kernel.org/show_bug.cgi?id=65721

Reported-and-tested-by: Richard W.M. Jones &lt;rjones@redhat.com&gt;
Fixes: 260fa034ef7a4ff8b7306
Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>md: fix calculation of stacking limits on level change.</title>
<updated>2013-12-04T19:05:54+00:00</updated>
<author>
<name>NeilBrown</name>
<email>neilb@suse.de</email>
</author>
<published>2013-11-14T04:16:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=2befeea454107590a5f6db1e5839cadfa599eb34'/>
<id>2befeea454107590a5f6db1e5839cadfa599eb34</id>
<content type='text'>
commit 02e5f5c0a0f726e66e3d8506ea1691e344277969 upstream.

The various -&gt;run routines of md personalities assume that the 'queue'
has been initialised by the blk_set_stacking_limits() call in
md_alloc().

However when the level is changed (by level_store()) the -&gt;run routine
for the new level is called for an array which has already had the
stacking limits modified.  This can result in incorrect final
settings.

So call blk_set_stacking_limits() before -&gt;run in level_store().

A specific consequence of this bug is that it causes
discard_granularity to be set incorrectly when reshaping a RAID4 to a
RAID0.

This is suitable for any -stable kernel since 3.3 in which
blk_set_stacking_limits() was introduced.

Reported-and-tested-by: "Baldysiak, Pawel" &lt;pawel.baldysiak@intel.com&gt;
Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 02e5f5c0a0f726e66e3d8506ea1691e344277969 upstream.

The various -&gt;run routines of md personalities assume that the 'queue'
has been initialised by the blk_set_stacking_limits() call in
md_alloc().

However when the level is changed (by level_store()) the -&gt;run routine
for the new level is called for an array which has already had the
stacking limits modified.  This can result in incorrect final
settings.

So call blk_set_stacking_limits() before -&gt;run in level_store().

A specific consequence of this bug is that it causes
discard_granularity to be set incorrectly when reshaping a RAID4 to a
RAID0.

This is suitable for any -stable kernel since 3.3 in which
blk_set_stacking_limits() was introduced.

Reported-and-tested-by: "Baldysiak, Pawel" &lt;pawel.baldysiak@intel.com&gt;
Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
Signed-off-by: Greg Kroah-Hartman &lt;gregkh@linuxfoundation.org&gt;

</pre>
</div>
</content>
</entry>
<entry>
<title>md: avoid deadlock when md_set_badblocks.</title>
<updated>2013-10-24T01:57:11+00:00</updated>
<author>
<name>Bian Yu</name>
<email>bianyu@kedacom.com</email>
</author>
<published>2013-10-12T05:10:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=905b0297a9533d7a6ee00a01a990456636877dd6'/>
<id>905b0297a9533d7a6ee00a01a990456636877dd6</id>
<content type='text'>
When operate harddisk and hit errors, md_set_badblocks is called after
scsi_restart_operations which already disabled the irq. but md_set_badblocks
will call write_sequnlock_irq and enable irq. so softirq can preempt the
current thread and that may cause a deadlock. I think this situation should
use write_sequnlock_irqsave/irqrestore instead.

I met the situation and the call trace is below:
[  638.919974] BUG: spinlock recursion on CPU#0, scsi_eh_13/1010
[  638.921923]  lock: 0xffff8800d4d51fc8, .magic: dead4ead, .owner: scsi_eh_13/1010, .owner_cpu: 0
[  638.923890] CPU: 0 PID: 1010 Comm: scsi_eh_13 Not tainted 3.12.0-rc5+ #37
[  638.925844] Hardware name: To be filled by O.E.M. To be filled by O.E.M./MAHOBAY, BIOS 4.6.5 03/05/2013
[  638.927816]  ffff880037ad4640 ffff880118c03d50 ffffffff8172ff85 0000000000000007
[  638.929829]  ffff8800d4d51fc8 ffff880118c03d70 ffffffff81730030 ffff8800d4d51fc8
[  638.931848]  ffffffff81a72eb0 ffff880118c03d90 ffffffff81730056 ffff8800d4d51fc8
[  638.933884] Call Trace:
[  638.935867]  &lt;IRQ&gt;  [&lt;ffffffff8172ff85&gt;] dump_stack+0x55/0x76
[  638.937878]  [&lt;ffffffff81730030&gt;] spin_dump+0x8a/0x8f
[  638.939861]  [&lt;ffffffff81730056&gt;] spin_bug+0x21/0x26
[  638.941836]  [&lt;ffffffff81336de4&gt;] do_raw_spin_lock+0xa4/0xc0
[  638.943801]  [&lt;ffffffff8173f036&gt;] _raw_spin_lock+0x66/0x80
[  638.945747]  [&lt;ffffffff814a73ed&gt;] ? scsi_device_unbusy+0x9d/0xd0
[  638.947672]  [&lt;ffffffff8173fb1b&gt;] ? _raw_spin_unlock+0x2b/0x50
[  638.949595]  [&lt;ffffffff814a73ed&gt;] scsi_device_unbusy+0x9d/0xd0
[  638.951504]  [&lt;ffffffff8149ec47&gt;] scsi_finish_command+0x37/0xe0
[  638.953388]  [&lt;ffffffff814a75e8&gt;] scsi_softirq_done+0xa8/0x140
[  638.955248]  [&lt;ffffffff8130e32b&gt;] blk_done_softirq+0x7b/0x90
[  638.957116]  [&lt;ffffffff8104fddd&gt;] __do_softirq+0xfd/0x330
[  638.958987]  [&lt;ffffffff810b964f&gt;] ? __lock_release+0x6f/0x100
[  638.960861]  [&lt;ffffffff8174a5cc&gt;] call_softirq+0x1c/0x30
[  638.962724]  [&lt;ffffffff81004c7d&gt;] do_softirq+0x8d/0xc0
[  638.964565]  [&lt;ffffffff8105024e&gt;] irq_exit+0x10e/0x150
[  638.966390]  [&lt;ffffffff8174ad4a&gt;] smp_apic_timer_interrupt+0x4a/0x60
[  638.968223]  [&lt;ffffffff817499af&gt;] apic_timer_interrupt+0x6f/0x80
[  638.970079]  &lt;EOI&gt;  [&lt;ffffffff810b964f&gt;] ? __lock_release+0x6f/0x100
[  638.971899]  [&lt;ffffffff8173fa6a&gt;] ? _raw_spin_unlock_irq+0x3a/0x50
[  638.973691]  [&lt;ffffffff8173fa60&gt;] ? _raw_spin_unlock_irq+0x30/0x50
[  638.975475]  [&lt;ffffffff81562393&gt;] md_set_badblocks+0x1f3/0x4a0
[  638.977243]  [&lt;ffffffff81566e07&gt;] rdev_set_badblocks+0x27/0x80
[  638.978988]  [&lt;ffffffffa00d97bb&gt;] raid5_end_read_request+0x36b/0x4e0 [raid456]
[  638.980723]  [&lt;ffffffff811b5a1d&gt;] bio_endio+0x1d/0x40
[  638.982463]  [&lt;ffffffff81304ff3&gt;] req_bio_endio.isra.65+0x83/0xa0
[  638.984214]  [&lt;ffffffff81306b9f&gt;] blk_update_request+0x7f/0x350
[  638.985967]  [&lt;ffffffff81306ea1&gt;] blk_update_bidi_request+0x31/0x90
[  638.987710]  [&lt;ffffffff813085e0&gt;] __blk_end_bidi_request+0x20/0x50
[  638.989439]  [&lt;ffffffff8130862f&gt;] __blk_end_request_all+0x1f/0x30
[  638.991149]  [&lt;ffffffff81308746&gt;] blk_peek_request+0x106/0x250
[  638.992861]  [&lt;ffffffff814a62a9&gt;] ? scsi_kill_request.isra.32+0xe9/0x130
[  638.994561]  [&lt;ffffffff814a633a&gt;] scsi_request_fn+0x4a/0x3d0
[  638.996251]  [&lt;ffffffff813040a7&gt;] __blk_run_queue+0x37/0x50
[  638.997900]  [&lt;ffffffff813045af&gt;] blk_run_queue+0x2f/0x50
[  638.999553]  [&lt;ffffffff814a5750&gt;] scsi_run_queue+0xe0/0x1c0
[  639.001185]  [&lt;ffffffff814a7721&gt;] scsi_run_host_queues+0x21/0x40
[  639.002798]  [&lt;ffffffff814a2e87&gt;] scsi_restart_operations+0x177/0x200
[  639.004391]  [&lt;ffffffff814a4fe9&gt;] scsi_error_handler+0xc9/0xe0
[  639.005996]  [&lt;ffffffff814a4f20&gt;] ? scsi_unjam_host+0xd0/0xd0
[  639.007600]  [&lt;ffffffff81072f6b&gt;] kthread+0xdb/0xe0
[  639.009205]  [&lt;ffffffff81072e90&gt;] ? flush_kthread_worker+0x170/0x170
[  639.010821]  [&lt;ffffffff81748cac&gt;] ret_from_fork+0x7c/0xb0
[  639.012437]  [&lt;ffffffff81072e90&gt;] ? flush_kthread_worker+0x170/0x170

This bug was introduce in commit  2e8ac30312973dd20e68073653
(the first time rdev_set_badblock was call from interrupt context),
so this patch is appropriate for 3.5 and subsequent kernels.

Cc: &lt;stable@vger.kernel.org&gt; (3.5+)
Signed-off-by: Bian Yu &lt;bianyu@kedacom.com&gt;
Reviewed-by: Jianpeng Ma &lt;majianpeng@gmail.com&gt;
Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When operate harddisk and hit errors, md_set_badblocks is called after
scsi_restart_operations which already disabled the irq. but md_set_badblocks
will call write_sequnlock_irq and enable irq. so softirq can preempt the
current thread and that may cause a deadlock. I think this situation should
use write_sequnlock_irqsave/irqrestore instead.

I met the situation and the call trace is below:
[  638.919974] BUG: spinlock recursion on CPU#0, scsi_eh_13/1010
[  638.921923]  lock: 0xffff8800d4d51fc8, .magic: dead4ead, .owner: scsi_eh_13/1010, .owner_cpu: 0
[  638.923890] CPU: 0 PID: 1010 Comm: scsi_eh_13 Not tainted 3.12.0-rc5+ #37
[  638.925844] Hardware name: To be filled by O.E.M. To be filled by O.E.M./MAHOBAY, BIOS 4.6.5 03/05/2013
[  638.927816]  ffff880037ad4640 ffff880118c03d50 ffffffff8172ff85 0000000000000007
[  638.929829]  ffff8800d4d51fc8 ffff880118c03d70 ffffffff81730030 ffff8800d4d51fc8
[  638.931848]  ffffffff81a72eb0 ffff880118c03d90 ffffffff81730056 ffff8800d4d51fc8
[  638.933884] Call Trace:
[  638.935867]  &lt;IRQ&gt;  [&lt;ffffffff8172ff85&gt;] dump_stack+0x55/0x76
[  638.937878]  [&lt;ffffffff81730030&gt;] spin_dump+0x8a/0x8f
[  638.939861]  [&lt;ffffffff81730056&gt;] spin_bug+0x21/0x26
[  638.941836]  [&lt;ffffffff81336de4&gt;] do_raw_spin_lock+0xa4/0xc0
[  638.943801]  [&lt;ffffffff8173f036&gt;] _raw_spin_lock+0x66/0x80
[  638.945747]  [&lt;ffffffff814a73ed&gt;] ? scsi_device_unbusy+0x9d/0xd0
[  638.947672]  [&lt;ffffffff8173fb1b&gt;] ? _raw_spin_unlock+0x2b/0x50
[  638.949595]  [&lt;ffffffff814a73ed&gt;] scsi_device_unbusy+0x9d/0xd0
[  638.951504]  [&lt;ffffffff8149ec47&gt;] scsi_finish_command+0x37/0xe0
[  638.953388]  [&lt;ffffffff814a75e8&gt;] scsi_softirq_done+0xa8/0x140
[  638.955248]  [&lt;ffffffff8130e32b&gt;] blk_done_softirq+0x7b/0x90
[  638.957116]  [&lt;ffffffff8104fddd&gt;] __do_softirq+0xfd/0x330
[  638.958987]  [&lt;ffffffff810b964f&gt;] ? __lock_release+0x6f/0x100
[  638.960861]  [&lt;ffffffff8174a5cc&gt;] call_softirq+0x1c/0x30
[  638.962724]  [&lt;ffffffff81004c7d&gt;] do_softirq+0x8d/0xc0
[  638.964565]  [&lt;ffffffff8105024e&gt;] irq_exit+0x10e/0x150
[  638.966390]  [&lt;ffffffff8174ad4a&gt;] smp_apic_timer_interrupt+0x4a/0x60
[  638.968223]  [&lt;ffffffff817499af&gt;] apic_timer_interrupt+0x6f/0x80
[  638.970079]  &lt;EOI&gt;  [&lt;ffffffff810b964f&gt;] ? __lock_release+0x6f/0x100
[  638.971899]  [&lt;ffffffff8173fa6a&gt;] ? _raw_spin_unlock_irq+0x3a/0x50
[  638.973691]  [&lt;ffffffff8173fa60&gt;] ? _raw_spin_unlock_irq+0x30/0x50
[  638.975475]  [&lt;ffffffff81562393&gt;] md_set_badblocks+0x1f3/0x4a0
[  638.977243]  [&lt;ffffffff81566e07&gt;] rdev_set_badblocks+0x27/0x80
[  638.978988]  [&lt;ffffffffa00d97bb&gt;] raid5_end_read_request+0x36b/0x4e0 [raid456]
[  638.980723]  [&lt;ffffffff811b5a1d&gt;] bio_endio+0x1d/0x40
[  638.982463]  [&lt;ffffffff81304ff3&gt;] req_bio_endio.isra.65+0x83/0xa0
[  638.984214]  [&lt;ffffffff81306b9f&gt;] blk_update_request+0x7f/0x350
[  638.985967]  [&lt;ffffffff81306ea1&gt;] blk_update_bidi_request+0x31/0x90
[  638.987710]  [&lt;ffffffff813085e0&gt;] __blk_end_bidi_request+0x20/0x50
[  638.989439]  [&lt;ffffffff8130862f&gt;] __blk_end_request_all+0x1f/0x30
[  638.991149]  [&lt;ffffffff81308746&gt;] blk_peek_request+0x106/0x250
[  638.992861]  [&lt;ffffffff814a62a9&gt;] ? scsi_kill_request.isra.32+0xe9/0x130
[  638.994561]  [&lt;ffffffff814a633a&gt;] scsi_request_fn+0x4a/0x3d0
[  638.996251]  [&lt;ffffffff813040a7&gt;] __blk_run_queue+0x37/0x50
[  638.997900]  [&lt;ffffffff813045af&gt;] blk_run_queue+0x2f/0x50
[  638.999553]  [&lt;ffffffff814a5750&gt;] scsi_run_queue+0xe0/0x1c0
[  639.001185]  [&lt;ffffffff814a7721&gt;] scsi_run_host_queues+0x21/0x40
[  639.002798]  [&lt;ffffffff814a2e87&gt;] scsi_restart_operations+0x177/0x200
[  639.004391]  [&lt;ffffffff814a4fe9&gt;] scsi_error_handler+0xc9/0xe0
[  639.005996]  [&lt;ffffffff814a4f20&gt;] ? scsi_unjam_host+0xd0/0xd0
[  639.007600]  [&lt;ffffffff81072f6b&gt;] kthread+0xdb/0xe0
[  639.009205]  [&lt;ffffffff81072e90&gt;] ? flush_kthread_worker+0x170/0x170
[  639.010821]  [&lt;ffffffff81748cac&gt;] ret_from_fork+0x7c/0xb0
[  639.012437]  [&lt;ffffffff81072e90&gt;] ? flush_kthread_worker+0x170/0x170

This bug was introduce in commit  2e8ac30312973dd20e68073653
(the first time rdev_set_badblock was call from interrupt context),
so this patch is appropriate for 3.5 and subsequent kernels.

Cc: &lt;stable@vger.kernel.org&gt; (3.5+)
Signed-off-by: Bian Yu &lt;bianyu@kedacom.com&gt;
Reviewed-by: Jianpeng Ma &lt;majianpeng@gmail.com&gt;
Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>md: avoid deadlock when dirty buffers during md_stop.</title>
<updated>2013-08-27T06:45:00+00:00</updated>
<author>
<name>NeilBrown</name>
<email>neilb@suse.de</email>
</author>
<published>2013-08-27T06:44:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=260fa034ef7a4ff8b73068b48ac497edd5217491'/>
<id>260fa034ef7a4ff8b73068b48ac497edd5217491</id>
<content type='text'>
When the last process closes /dev/mdX sync_blockdev will be called so
that all buffers get flushed.
So if it is then opened for the STOP_ARRAY ioctl to be sent there will
be nothing to flush.

However if we open /dev/mdX in order to send the STOP_ARRAY ioctl just
moments before some other process which was writing closes their file
descriptor, then there won't be a 'last close' and the buffers might
not get flushed.

So do_md_stop() calls sync_blockdev().  However at this point it is
holding -&gt;reconfig_mutex.  So if the array is currently 'clean' then
the writes from sync_blockdev() will not complete until the array
can be marked dirty and that won't happen until some other thread
can get -&gt;reconfig_mutex.  So we deadlock.

We need to move the sync_blockdev() call to before we take
-&gt;reconfig_mutex.
However then some other thread could open /dev/mdX and write to it
after we call sync_blockdev() and before we actually stop the array.
This can leave dirty data in the page cache which is awkward.

So introduce new flag MD_STILL_CLOSED.  Set it before calling
sync_blockdev(), clear it if anyone does open the file, and abort the
STOP_ARRAY attempt if it gets set before we lock against further
opens.

It is still possible to get problems if you open /dev/mdX, write to
it, then issue the STOP_ARRAY ioctl.  Just don't do that.

Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When the last process closes /dev/mdX sync_blockdev will be called so
that all buffers get flushed.
So if it is then opened for the STOP_ARRAY ioctl to be sent there will
be nothing to flush.

However if we open /dev/mdX in order to send the STOP_ARRAY ioctl just
moments before some other process which was writing closes their file
descriptor, then there won't be a 'last close' and the buffers might
not get flushed.

So do_md_stop() calls sync_blockdev().  However at this point it is
holding -&gt;reconfig_mutex.  So if the array is currently 'clean' then
the writes from sync_blockdev() will not complete until the array
can be marked dirty and that won't happen until some other thread
can get -&gt;reconfig_mutex.  So we deadlock.

We need to move the sync_blockdev() call to before we take
-&gt;reconfig_mutex.
However then some other thread could open /dev/mdX and write to it
after we call sync_blockdev() and before we actually stop the array.
This can leave dirty data in the page cache which is awkward.

So introduce new flag MD_STILL_CLOSED.  Set it before calling
sync_blockdev(), clear it if anyone does open the file, and abort the
STOP_ARRAY attempt if it gets set before we lock against further
opens.

It is still possible to get problems if you open /dev/mdX, write to
it, then issue the STOP_ARRAY ioctl.  Just don't do that.

Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>md: Don't test all of mddev-&gt;flags at once.</title>
<updated>2013-08-27T06:28:23+00:00</updated>
<author>
<name>NeilBrown</name>
<email>neilb@suse.de</email>
</author>
<published>2013-08-27T06:28:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=7a0a5355cbc71efa430c3730ffbd67ae04abfe31'/>
<id>7a0a5355cbc71efa430c3730ffbd67ae04abfe31</id>
<content type='text'>
mddev-&gt;flags is mostly used to record if an update of the
metadata is needed.  Sometimes the whole field is tested
instead of just the important bits.  This makes it difficult
to introduce more state bits.

So replace all bare tests of mddev-&gt;flags with tests for the bits
that actually need testing.

Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
mddev-&gt;flags is mostly used to record if an update of the
metadata is needed.  Sometimes the whole field is tested
instead of just the important bits.  This makes it difficult
to introduce more state bits.

So replace all bare tests of mddev-&gt;flags with tests for the bits
that actually need testing.

Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>md: Fix apparent cut-and-paste error in super_90_validate</title>
<updated>2013-08-27T06:06:17+00:00</updated>
<author>
<name>Dave Jones</name>
<email>davej@redhat.com</email>
</author>
<published>2013-08-20T02:26:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=c9ad020fec895bf1e5fcc322d0ab9e67efd3e3a0'/>
<id>c9ad020fec895bf1e5fcc322d0ab9e67efd3e3a0</id>
<content type='text'>
Setting a variable to itself probably wasn't the intention here.

Signed-off-by: Dave Jones &lt;davej@fedoraproject.org&gt;
Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Setting a variable to itself probably wasn't the intention here.

Signed-off-by: Dave Jones &lt;davej@fedoraproject.org&gt;
Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>md: fix safe_mode buglet.</title>
<updated>2013-08-27T06:05:43+00:00</updated>
<author>
<name>NeilBrown</name>
<email>neilb@suse.de</email>
</author>
<published>2013-08-07T23:20:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=275c51c4e34ed776d40a99dd97c1deee50303b07'/>
<id>275c51c4e34ed776d40a99dd97c1deee50303b07</id>
<content type='text'>
Whe we set the safe_mode_timeout to a smaller value we trigger a timeout
immediately - otherwise the small value might not be honoured.
However if the previous timeout was 0 meaning "no timeout", we didn't.
This would mean that no timeout happens until the next write completes,
which could be a long time.

Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Whe we set the safe_mode_timeout to a smaller value we trigger a timeout
immediately - otherwise the small value might not be honoured.
However if the previous timeout was 0 meaning "no timeout", we didn't.
This would mean that no timeout happens until the next write completes,
which could be a long time.

Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>md: don't call md_allow_write in get_bitmap_file.</title>
<updated>2013-08-27T06:05:32+00:00</updated>
<author>
<name>NeilBrown</name>
<email>neilb@suse.de</email>
</author>
<published>2013-07-16T06:44:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=60559da4d8c3259ea41a14ca4cfcd83022bff6bd'/>
<id>60559da4d8c3259ea41a14ca4cfcd83022bff6bd</id>
<content type='text'>
There is no really need as GFP_NOIO is very likely sufficient,
and failure is not catastrophic.

Calling md_allow_write here will convert a read-auto array to
read/write which could be confusing when you are just performing
a read operation.

Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
There is no really need as GFP_NOIO is very likely sufficient,
and failure is not catastrophic.

Calling md_allow_write here will convert a read-auto array to
read/write which could be confusing when you are just performing
a read operation.

Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>md: Remove recent change which allows devices to skip recovery.</title>
<updated>2013-07-18T04:18:03+00:00</updated>
<author>
<name>NeilBrown</name>
<email>neilb@suse.de</email>
</author>
<published>2013-07-17T04:55:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=5024c298311f3b97c85cb034f9edaa333fdb9338'/>
<id>5024c298311f3b97c85cb034f9edaa333fdb9338</id>
<content type='text'>
commit 7ceb17e87bde79d285a8b988cfed9eaeebe60b86
    md: Allow devices to be re-added to a read-only array.

allowed a bit more than just that.  It also allows devices to be added
to a read-write array and to end up skipping recovery.

This patch removes the offending piece of code pending a rewrite for a
subsequent release.

More specifically:
 If the array has a bitmap, then the device will still need a bitmap
 based resync ('saved_raid_disk' is set under different conditions
 is a bitmap is present).
 If the array doesn't have a bitmap, then this is correct as long as
 nothing has been written to the array since the metadata was checked
 by -&gt;validate_super.  However there is no locking to ensure that there
 was no write.

Bug was introduced in 3.10 and causes data corruption so
patch is suitable for 3.10-stable.

Cc: stable@vger.kernel.org (3.10)
Reported-by: Joe Lawrence &lt;joe.lawrence@stratus.com&gt;
Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
commit 7ceb17e87bde79d285a8b988cfed9eaeebe60b86
    md: Allow devices to be re-added to a read-only array.

allowed a bit more than just that.  It also allows devices to be added
to a read-write array and to end up skipping recovery.

This patch removes the offending piece of code pending a rewrite for a
subsequent release.

More specifically:
 If the array has a bitmap, then the device will still need a bitmap
 based resync ('saved_raid_disk' is set under different conditions
 is a bitmap is present).
 If the array doesn't have a bitmap, then this is correct as long as
 nothing has been written to the array since the metadata was checked
 by -&gt;validate_super.  However there is no locking to ensure that there
 was no write.

Bug was introduced in 3.10 and causes data corruption so
patch is suitable for 3.10-stable.

Cc: stable@vger.kernel.org (3.10)
Reported-by: Joe Lawrence &lt;joe.lawrence@stratus.com&gt;
Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>MD: Remember the last sync operation that was performed</title>
<updated>2013-06-26T02:38:24+00:00</updated>
<author>
<name>Jonathan Brassow</name>
<email>jbrassow@redhat.com</email>
</author>
<published>2013-06-25T06:23:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=c4a39551451666229b4ea5e8aae8ca0131d00665'/>
<id>c4a39551451666229b4ea5e8aae8ca0131d00665</id>
<content type='text'>
MD:  Remember the last sync operation that was performed

This patch adds a field to the mddev structure to track the last
sync operation that was performed.  This is especially useful when
it comes to what is recorded in mismatch_cnt in sysfs.  If the
last operation was "data-check", then it reports the number of
descrepancies found by the user-initiated check.  If it was a
"repair" operation, then it is reporting the number of
descrepancies repaired.  etc.

Signed-off-by: Jonathan Brassow &lt;jbrassow@redhat.com&gt;
Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
MD:  Remember the last sync operation that was performed

This patch adds a field to the mddev structure to track the last
sync operation that was performed.  This is especially useful when
it comes to what is recorded in mismatch_cnt in sysfs.  If the
last operation was "data-check", then it reports the number of
descrepancies found by the user-initiated check.  If it was a
"repair" operation, then it is reporting the number of
descrepancies repaired.  etc.

Signed-off-by: Jonathan Brassow &lt;jbrassow@redhat.com&gt;
Signed-off-by: NeilBrown &lt;neilb@suse.de&gt;
</pre>
</div>
</content>
</entry>
</feed>
