Skip to content

Commit

Permalink
dm: verify suspend_locking assumptions at runtime
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Bart Van Assche authored and Mike Snitzer committed Apr 27, 2017
1 parent 73cbca6 commit 1ea0654
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
4 changes: 4 additions & 0 deletions drivers/md/dm-table.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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;

Expand Down
6 changes: 4 additions & 2 deletions drivers/md/dm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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 */

Expand Down

0 comments on commit 1ea0654

Please sign in to comment.