Files
kernel/include/linux
Dan Williams b5470dc5fc md: resolve external metadata handling deadlock in md_allow_write
md_allow_write() marks the metadata dirty while holding mddev->lock and then
waits for the write to complete.  For externally managed metadata this causes a
deadlock as userspace needs to take the lock to communicate that the metadata
update has completed.

Change md_allow_write() in the 'external' case to start the 'mark active'
operation and then return -EAGAIN.  The expected side effects while waiting for
userspace to write 'active' to 'array_state' are holding off reshape (code
currently handles -ENOMEM), cause some 'stripe_cache_size' change requests to
fail, cause some GET_BITMAP_FILE ioctl requests to fall back to GFP_NOIO, and
cause updates to 'raid_disks' to fail.  Except for 'stripe_cache_size' changes
these failures can be mitigated by coordinating with mdmon.

md_write_start() still prevents writes from occurring until the metadata
handler has had a chance to take action as it unconditionally waits for
MD_CHANGE_CLEAN to be cleared.

[neilb@suse.de: return -EAGAIN, try GFP_NOIO]
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2008-06-30 17:18:19 -07:00
..
2008-05-20 14:14:15 -07:00
2008-06-19 10:42:17 +10:00
2008-06-19 10:42:17 +10:00
2008-06-06 11:29:10 -07:00
2008-05-01 08:03:59 -07:00
2008-05-07 09:48:23 +02:00
2008-05-16 17:22:26 -04:00
2008-05-01 13:08:16 -04:00
2008-06-06 11:29:11 -07:00
2008-05-13 08:02:26 -07:00
2008-05-24 09:56:13 -07:00
2008-05-20 16:44:43 +02:00
2008-05-20 16:44:43 +02:00
2008-05-18 20:49:41 +02:00
2008-05-05 16:47:14 +10:00
2008-06-11 19:13:46 -04:00
2008-05-01 08:03:58 -07:00
2008-05-14 19:11:14 -07:00
2008-06-12 18:05:41 -07:00
2008-05-24 09:56:09 -07:00
2008-05-26 16:08:40 +02:00
2008-06-06 11:29:12 -07:00
2008-06-12 18:05:40 -07:00
2008-06-12 10:12:42 +02:00
2008-05-06 12:01:41 -04:00
2008-06-06 11:29:14 -07:00
2008-05-04 17:07:03 -07:00
2008-06-12 10:48:00 +02:00
2008-05-01 08:03:59 -07:00
2008-05-29 14:46:30 +02:00
2008-05-09 07:45:18 -07:00