dm: verify suspend_locking assumptions at runtime
authorBart Van Assche <bart.vanassche@sandisk.com>
Thu, 27 Apr 2017 17:11:21 +0000 (10:11 -0700)
committerMike Snitzer <snitzer@redhat.com>
Thu, 27 Apr 2017 21:08:42 +0000 (17:08 -0400)
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>
drivers/md/dm-table.c
drivers/md/dm.c

index c68757f94e164a1406191201d8f0576e12f60a62..515136f291159c46d4575c81c1b8302c9c3bd115 100644 (file)
@@ -1680,6 +1680,8 @@ static void suspend_targets(struct dm_table *t, enum suspend_mode mode)
        int i = t->num_targets;
        struct dm_target *ti = t->targets;
 
+       lockdep_assert_held(&t->md->suspend_lock);
+
        while (i--) {
                switch (mode) {
                case PRESUSPEND:
@@ -1727,6 +1729,8 @@ int dm_table_resume_targets(struct dm_table *t)
 {
        int i, r = 0;
 
+       lockdep_assert_held(&t->md->suspend_lock);
+
        for (i = 0; i < t->num_targets; i++) {
                struct dm_target *ti = t->targets + i;
 
index e602ae0d5d755ddc4c3cc2d67f9d5df240630def..9940c9a42665a9c057af6b5c09bd84dd32b343b3 100644 (file)
@@ -1698,6 +1698,8 @@ static void event_callback(void *context)
  */
 static void __set_size(struct mapped_device *md, sector_t size)
 {
+       lockdep_assert_held(&md->suspend_lock);
+
        set_capacity(md->disk, size);
 
        i_size_write(md->bdev->bd_inode, (loff_t)size << SECTOR_SHIFT);
@@ -2147,8 +2149,6 @@ static void unlock_fs(struct mapped_device *md)
  * If __dm_suspend returns 0, the device is completely quiescent
  * now. There is no request-processing activity. All new requests
  * are being added to md->deferred list.
- *
- * Caller must hold md->suspend_lock
  */
 static int __dm_suspend(struct mapped_device *md, struct dm_table *map,
                        unsigned suspend_flags, long task_state,
@@ -2364,6 +2364,8 @@ static void __dm_internal_suspend(struct mapped_device *md, unsigned suspend_fla
 {
        struct dm_table *map = NULL;
 
+       lockdep_assert_held(&md->suspend_lock);
+
        if (md->internal_suspend_count++)
                return; /* nested internal suspend */