summary refs log tree commit diff
path: root/devices/src/virtio/block.rs
diff options
context:
space:
mode:
authorDaniel Verkamp <dverkamp@chromium.org>2018-09-18 14:59:13 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-09-19 15:40:06 -0700
commit713dd60491f35bdab6417663f80c3fddc0e6f205 (patch)
treea472c00ee24246bee2377a0d2052564bbfb7c957 /devices/src/virtio/block.rs
parent616a093d9197cbca23d3fa585520c674e19d917a (diff)
downloadcrosvm-713dd60491f35bdab6417663f80c3fddc0e6f205.tar
crosvm-713dd60491f35bdab6417663f80c3fddc0e6f205.tar.gz
crosvm-713dd60491f35bdab6417663f80c3fddc0e6f205.tar.bz2
crosvm-713dd60491f35bdab6417663f80c3fddc0e6f205.tar.lz
crosvm-713dd60491f35bdab6417663f80c3fddc0e6f205.tar.xz
crosvm-713dd60491f35bdab6417663f80c3fddc0e6f205.tar.zst
crosvm-713dd60491f35bdab6417663f80c3fddc0e6f205.zip
devices: block: clear flush timer once it fires
Otherwise, the flush timer case of the PollContext continues to fire
repeatedly, since the timerfd remains readable.

BUG=None
TEST=Verify that crosvm virtio_blk thread no longer pins the CPU after
     writes are done

Change-Id: I693346c078e07b97e30083f34d00be75fa93841d
Signed-off-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1232295
Reviewed-by: Zach Reizner <zachr@chromium.org>
Reviewed-by: Dylan Reid <dgreid@chromium.org>
Diffstat (limited to 'devices/src/virtio/block.rs')
-rw-r--r--devices/src/virtio/block.rs4
1 files changed, 4 insertions, 0 deletions
diff --git a/devices/src/virtio/block.rs b/devices/src/virtio/block.rs
index e0784cc..43e81e0 100644
--- a/devices/src/virtio/block.rs
+++ b/devices/src/virtio/block.rs
@@ -535,6 +535,10 @@ impl<T: DiskFile> Worker<T> {
                             error!("Failed to flush the disk: {:?}", e);
                             break 'poll;
                         }
+                        if let Err(e) = flush_timer.wait() {
+                            error!("Failed to clear flush timer: {:?}", e);
+                            break 'poll;
+                        }
                     }
                     Token::QueueAvailable => {
                         if let Err(e) = queue_evt.read() {