Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 84569
b: refs/heads/master
c: 73d410c
h: refs/heads/master
i:
  84567: 3e958c6
v: v3
  • Loading branch information
Milan Broz authored and Alasdair G Kergon committed Feb 8, 2008
1 parent b236a9b commit fc06461
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 6d6f10df890df8be69edd4db32dc8ce09f311bb8
refs/heads/master: 73d410c0137f63c6597e9763c81e5f4d015e9940
21 changes: 11 additions & 10 deletions trunk/drivers/md/dm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1270,6 +1270,8 @@ static void __flush_deferred_io(struct mapped_device *md)
if (__split_bio(md, c))
bio_io_error(c);
}

clear_bit(DMF_BLOCK_IO, &md->flags);
}

static void __merge_pushback_list(struct mapped_device *md)
Expand Down Expand Up @@ -1355,14 +1357,16 @@ int dm_suspend(struct mapped_device *md, unsigned suspend_flags)
{
struct dm_table *map = NULL;
DECLARE_WAITQUEUE(wait, current);
int r = -EINVAL;
int pending, r = 0;
int do_lockfs = suspend_flags & DM_SUSPEND_LOCKFS_FLAG ? 1 : 0;
int noflush = suspend_flags & DM_SUSPEND_NOFLUSH_FLAG ? 1 : 0;

mutex_lock(&md->suspend_lock);

if (dm_suspended(md))
if (dm_suspended(md)) {
r = -EINVAL;
goto out_unlock;
}

map = dm_get_table(md);

Expand Down Expand Up @@ -1417,7 +1421,8 @@ int dm_suspend(struct mapped_device *md, unsigned suspend_flags)
set_current_state(TASK_INTERRUPTIBLE);

smp_mb();
if (!atomic_read(&md->pending) || signal_pending(current))
pending = atomic_read(&md->pending);
if (!pending || signal_pending(current))
break;

io_schedule();
Expand All @@ -1431,12 +1436,12 @@ int dm_suspend(struct mapped_device *md, unsigned suspend_flags)
__merge_pushback_list(md);

/* were we interrupted ? */
r = -EINTR;
if (atomic_read(&md->pending)) {
clear_bit(DMF_BLOCK_IO, &md->flags);
if (pending) {
__flush_deferred_io(md);
up_write(&md->io_lock);

unlock_fs(md);
r = -EINTR;
goto out; /* pushback list is already flushed, so skip flush */
}
up_write(&md->io_lock);
Expand All @@ -1445,8 +1450,6 @@ int dm_suspend(struct mapped_device *md, unsigned suspend_flags)

set_bit(DMF_SUSPENDED, &md->flags);

r = 0;

flush_and_out:
if (r && noflush) {
/*
Expand Down Expand Up @@ -1490,8 +1493,6 @@ int dm_resume(struct mapped_device *md)
goto out;

down_write(&md->io_lock);
clear_bit(DMF_BLOCK_IO, &md->flags);

__flush_deferred_io(md);
up_write(&md->io_lock);

Expand Down

0 comments on commit fc06461

Please sign in to comment.