Use a dedicated taskq for vdev_file

Originally, vdev_file used system_taskq. This would cause a deadlock,
especially on system with few CPUs. The reason is that the prefetcher
threads, which are on system_taskq, will sometimes be blocked waiting
for I/O to finish. If the prefetcher threads consume all the tasks in
system_taskq, the I/O cannot be served and thus results in a deadlock.

We fix this by creating a dedicated vdev_file_taskq for vdev_file I/O.

Signed-off-by: Chunwei Chen <tuxoko@gmail.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2270
This commit is contained in:
Chunwei Chen
2014-05-13 10:36:35 +08:00
committed by Brian Behlendorf
parent 2c33b91275
commit bc25c9325b
3 changed files with 24 additions and 1 deletions
+3
View File
@@ -39,6 +39,9 @@ typedef struct vdev_file {
vnode_t *vf_vnode;
} vdev_file_t;
extern void vdev_file_init(void);
extern void vdev_file_fini(void);
#ifdef __cplusplus
}
#endif