aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBart Van Assche <bart.vanassche@sandisk.com>2017-04-27 13:11:21 -0400
committerMike Snitzer <snitzer@redhat.com>2017-04-27 17:08:42 -0400
commit1ea0654e46eb62acc379000be2f16350101ebf85 (patch)
tree52dceb575d77441dbbd2a5a2ec9f56f54304a2bc
parent73cbca6a637eb88738ea5a5cd6a611bbbca8ac19 (diff)
dm: verify suspend_locking assumptions at runtime
Ensure that the assumptions about the caller holding suspend_lock are checked at runtime if lockdep is enabled. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
-rw-r--r--drivers/md/dm-table.c4
-rw-r--r--drivers/md/dm.c6
2 files changed, 8 insertions, 2 deletions
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
index c68757f94e16..515136f29115 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -1680,6 +1680,8 @@ static void suspend_targets(struct dm_table *t, enum suspend_mode mode)
1680 int i = t->num_targets; 1680 int i = t->num_targets;
1681 struct dm_target *ti = t->targets; 1681 struct dm_target *ti = t->targets;
1682 1682
1683 lockdep_assert_held(&t->md->suspend_lock);
1684
1683 while (i--) { 1685 while (i--) {
1684 switch (mode) { 1686 switch (mode) {
1685 case PRESUSPEND: 1687 case PRESUSPEND:
@@ -1727,6 +1729,8 @@ int dm_table_resume_targets(struct dm_table *t)
1727{ 1729{
1728 int i, r = 0; 1730 int i, r = 0;
1729 1731
1732 lockdep_assert_held(&t->md->suspend_lock);
1733
1730 for (i = 0; i < t->num_targets; i++) { 1734 for (i = 0; i < t->num_targets; i++) {
1731 struct dm_target *ti = t->targets + i; 1735 struct dm_target *ti = t->targets + i;
1732 1736
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index e602ae0d5d75..9940c9a42665 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -1698,6 +1698,8 @@ static void event_callback(void *context)
1698 */ 1698 */
1699static void __set_size(struct mapped_device *md, sector_t size) 1699static void __set_size(struct mapped_device *md, sector_t size)
1700{ 1700{
1701 lockdep_assert_held(&md->suspend_lock);
1702
1701 set_capacity(md->disk, size); 1703 set_capacity(md->disk, size);
1702 1704
1703 i_size_write(md->bdev->bd_inode, (loff_t)size << SECTOR_SHIFT); 1705 i_size_write(md->bdev->bd_inode, (loff_t)size << SECTOR_SHIFT);
@@ -2147,8 +2149,6 @@ static void unlock_fs(struct mapped_device *md)
2147 * If __dm_suspend returns 0, the device is completely quiescent 2149 * If __dm_suspend returns 0, the device is completely quiescent
2148 * now. There is no request-processing activity. All new requests 2150 * now. There is no request-processing activity. All new requests
2149 * are being added to md->deferred list. 2151 * are being added to md->deferred list.
2150 *
2151 * Caller must hold md->suspend_lock
2152 */ 2152 */
2153static int __dm_suspend(struct mapped_device *md, struct dm_table *map, 2153static int __dm_suspend(struct mapped_device *md, struct dm_table *map,
2154 unsigned suspend_flags, long task_state, 2154 unsigned suspend_flags, long task_state,
@@ -2364,6 +2364,8 @@ static void __dm_internal_suspend(struct mapped_device *md, unsigned suspend_fla
2364{ 2364{
2365 struct dm_table *map = NULL; 2365 struct dm_table *map = NULL;
2366 2366
2367 lockdep_assert_held(&md->suspend_lock);
2368
2367 if (md->internal_suspend_count++) 2369 if (md->internal_suspend_count++)
2368 return; /* nested internal suspend */ 2370 return; /* nested internal suspend */
2369 2371