Files
linux/drivers/md
Mikulas Patocka c280422c27 dm snapshot: suspend merging snapshot when doing exception handover
[ Upstream commit 09ee96b214 ]

The "dm snapshot: suspend origin when doing exception handover" commit
fixed a exception store handover bug associated with pending exceptions
to the "snapshot-origin" target.

However, a similar problem exists in snapshot merging.  When snapshot
merging is in progress, we use the target "snapshot-merge" instead of
"snapshot-origin".  Consequently, during exception store handover, we
must find the snapshot-merge target and suspend its associated
mapped_device.

To avoid lockdep warnings, the target must be suspended and resumed
without holding _origins_lock.

Introduce a dm_hold() function that grabs a reference on a
mapped_device, but unlike dm_get(), it doesn't crash if the device has
the DMF_FREEING flag set, it returns an error in this case.

In snapshot_resume() we grab the reference to the origin device using
dm_hold() while holding _origins_lock (_origins_lock guarantees that the
device won't disappear).  Then we release _origins_lock, suspend the
device and grab _origins_lock again.

NOTE to stable@ people:
When backporting to kernels 3.18 and older, use dm_internal_suspend and
dm_internal_resume instead of dm_internal_suspend_fast and
dm_internal_resume_fast.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Cc: stable@vger.kernel.org
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
2015-04-16 20:13:10 -04:00
..
2014-01-14 23:23:03 -05:00
2013-11-23 22:33:47 -08:00
2013-08-23 09:02:13 -04:00
2013-11-23 22:33:47 -08:00
2013-09-05 20:46:06 -04:00
2014-01-14 23:23:04 -05:00
2013-11-23 22:33:47 -08:00
2014-03-27 16:56:23 -04:00
2014-03-27 16:56:23 -04:00
2014-10-14 13:08:29 +11:00