Files
linux-legacy/drivers/md
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-03-28 14:45:22 -07:00
2008-04-25 13:26:55 +01:00
2008-04-25 13:26:57 +01:00
2008-02-08 02:10:16 +00:00
2008-04-25 13:26:57 +01:00
2008-04-25 13:26:55 +01:00
2008-02-08 02:10:35 +00:00
2008-04-25 13:26:57 +01:00
2008-04-25 13:26:55 +01:00
2008-04-25 13:26:44 +01:00
2008-02-08 02:11:24 +00:00
2008-04-25 13:26:53 +01:00
2008-02-08 02:10:32 +00:00
2008-04-25 13:26:55 +01:00
2008-02-06 10:41:18 -08:00