diff options
author | Mikulas Patocka <mpatocka@redhat.com> | 2009-01-06 04:04:54 +0100 |
---|---|---|
committer | Alasdair G Kergon <agk@redhat.com> | 2009-01-06 04:04:54 +0100 |
commit | 90fa1527bddc7147dc0d590ee6184ca88bc50ecf (patch) | |
tree | a6b692b5a7ef777cbd8f2927783f593234b091d1 /drivers/md/dm-snap.c | |
parent | dm table: drop reference at unbind (diff) | |
download | linux-90fa1527bddc7147dc0d590ee6184ca88bc50ecf.tar.xz linux-90fa1527bddc7147dc0d590ee6184ca88bc50ecf.zip |
dm snapshot: change yield to msleep
Change yield() to msleep(1). If the thread had realtime priority,
yield() doesn't really yield, so the yielding process would loop
indefinitely and cause machine lockup.
Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Diffstat (limited to 'drivers/md/dm-snap.c')
-rw-r--r-- | drivers/md/dm-snap.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c index 6c96db26b87c..4ceedd4f22af 100644 --- a/drivers/md/dm-snap.c +++ b/drivers/md/dm-snap.c @@ -9,6 +9,7 @@ #include <linux/blkdev.h> #include <linux/ctype.h> #include <linux/device-mapper.h> +#include <linux/delay.h> #include <linux/fs.h> #include <linux/init.h> #include <linux/kdev_t.h> @@ -735,7 +736,7 @@ static void snapshot_dtr(struct dm_target *ti) unregister_snapshot(s); while (atomic_read(&s->pending_exceptions_count)) - yield(); + msleep(1); /* * Ensure instructions in mempool_destroy aren't reordered * before atomic_read. @@ -888,10 +889,10 @@ static void pending_complete(struct dm_snap_pending_exception *pe, int success) /* * Check for conflicting reads. This is extremely improbable, - * so yield() is sufficient and there is no need for a wait queue. + * so msleep(1) is sufficient and there is no need for a wait queue. */ while (__chunk_is_tracked(s, pe->e.old_chunk)) - yield(); + msleep(1); /* * Add a proper exception, and remove the |