aboutsummaryrefslogtreecommitdiff
path: root/fs/msdos
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2008-06-27 21:44:04 -0700
committerDan Williams <dan.j.williams@intel.com>2008-06-30 17:18:19 -0700
commitb5470dc5fc18a8ff6517c3bb538d1479e58ecb02 (patch)
tree37b0eb3a4691bdbe58dc5c6c73b2dc8d3925b332 /fs/msdos
parent1fe797e67fb07d605b82300934d0de67068a0aca (diff)
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>
Diffstat (limited to 'fs/msdos')
0 files changed, 0 insertions, 0 deletions