diff --git a/system/uapp/make-zxcrypt/main.cpp b/system/uapp/make-zxcrypt/main.cpp
new file mode 100644
index 0000000..18496d0
--- /dev/null
+++ b/system/uapp/make-zxcrypt/main.cpp
@@ -0,0 +1,67 @@
+// Copyright 2018 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <stdint.h>
+#include <stdio.h>
+#include <fcntl.h>
+
+#include <fbl/unique_fd.h>
+#include <fs-management/fvm.h>
+#include <zircon/device/block.h>
+#include <zircon/status.h>
+#include <zircon/types.h>
+#include <zxcrypt/volume.h>
+
+constexpr uint8_t kDeadbeefGUID[GUID_LEN] = {
+    0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef,
+    0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef};
+
+// Quick and dirty hack to add a zxcrypt volume to debug devccord hang.
+int main(int argc, char** argv) {
+    if (argc != 2) {
+        fprintf(stderr, "error: wrong number of arguments\n");
+        fprintf(stderr, "usage: %s /path/to/some/fvm\n", argv[0]);
+        return -1;
+    }
+
+    fbl::unique_fd fd(open(argv[1], O_RDONLY));
+    if (!fd) {
+        fprintf(stderr, "error: failed to open '%s'\n", argv[1]);
+        return -1;
+    }
+
+    // Returns an open fd to the new partition on success, -1 on error.
+    alloc_req_t request;
+    request.slice_count = 1;
+    memcpy(request.type, kDeadbeefGUID, sizeof(request.type));
+    memcpy(request.guid, kDeadbeefGUID, sizeof(request.type));
+    snprintf(request.name, NAME_LEN, "deadbeef");
+    request.flags = 0;
+    if (fvm_allocate_partition(fd.get(), &request) < 0) {
+        fprintf(stderr, "warning: failed to allocate FVM partition\n");
+    }
+
+    char path[PATH_MAX];
+    fd.reset(open_partition(kDeadbeefGUID, kDeadbeefGUID, ZX_SEC(3), path));
+    if (!fd) {
+        fprintf(stderr, "error: failed to FVM partition\n");
+        return -1;
+    }
+
+    zx_status_t rc;
+    crypto::Secret key;
+    uint8_t* buf;
+    if ((rc = key.Allocate(zxcrypt::kZx1130KeyLen, &buf)) != ZX_OK) {
+        fprintf(stderr, "error: failed to allocate key: %s\n", zx_status_get_string(rc));
+        return -1;
+    }
+    memset(buf, 0, zxcrypt::kZx1130KeyLen);
+
+    if ((rc = zxcrypt::Volume::Create(fbl::move(fd), key)) != ZX_OK) {
+        fprintf(stderr, "error: failed to create zxcrypt volume: %s\n", zx_status_get_string(rc));
+        return -1;
+    }
+
+    return 0;
+}
diff --git a/system/uapp/make-zxcrypt/rules.mk b/system/uapp/make-zxcrypt/rules.mk
new file mode 100644
index 0000000..c9956ce
--- /dev/null
+++ b/system/uapp/make-zxcrypt/rules.mk
@@ -0,0 +1,37 @@
+# Copyright 2017 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+LOCAL_DIR := $(GET_LOCAL_DIR)
+
+MODULE := $(LOCAL_DIR)
+
+MODULE_TYPE := userapp
+
+MODULE_NAME := make-zxcrypt
+
+MODULE_GROUP := core
+
+MODULE_SRCS := \
+    $(LOCAL_DIR)/main.cpp \
+
+MODULE_LIBS := \
+    system/ulib/c \
+    system/ulib/zircon \
+    system/ulib/fdio \
+    system/ulib/crypto \
+    system/ulib/fs-management \
+    system/ulib/zxcrypt \
+
+MODULE_STATIC_LIBS := \
+    third_party/ulib/cryptolib \
+    third_party/ulib/uboringssl \
+    system/ulib/ddk \
+    system/ulib/fvm \
+    system/ulib/fs \
+    system/ulib/sync \
+    system/ulib/zx \
+    system/ulib/zxcpp \
+    system/ulib/fbl \
+
+include make/module.mk
diff --git a/system/ulib/fdio/unistd.c b/system/ulib/fdio/unistd.c
index b5f9f45..ddc092d 100644
--- a/system/ulib/fdio/unistd.c
+++ b/system/ulib/fdio/unistd.c
@@ -24,6 +24,7 @@
 
 #include <zircon/assert.h>
 #include <zircon/compiler.h>
+#include <zircon/device/device.h>
 #include <zircon/device/vfs.h>
 #include <zircon/process.h>
 #include <zircon/processargs.h>
@@ -743,6 +744,14 @@
         return ZX_ERR_BAD_HANDLE;
     }
     ssize_t r = io->ops->ioctl(io, op, in_buf, in_len, out_buf, out_len);
+
+    if (r == ZX_ERR_TIMED_OUT) {
+        char path[PATH_MAX];
+        if (io->ops->ioctl(io, IOCTL_DEVICE_GET_TOPO_PATH, NULL, 0, path, PATH_MAX) >= 0) {
+            printf("FDIO ERROR: ioctl to %s timed out\n", path);
+        }
+    }
+
     fdio_release(io);
     return r;
 }
