Hi, everybody:
I developed a feature named "I/O hang",my intention is to solve the
problem like that:
If the backend storage media of VM disk is far-end storage like IPSAN or
FCSAN, storage net link will always disconnection and
make I/O requests return EIO to Guest, and the status of filesystem in
Guest will be read-only, even the link recovered
after a while, the status of filesystem in Guest will not recover.
So I developed a feature named "I/O hang" to solve this problem, the
solution like that:
when some I/O requests return EIO in backend, "I/O hang" will catch the
requests in qemu block layer and
insert the requests to a rehandle queue but not return EIO to Guest, the
I/O requests in Guest will hang but it does not lead
Guest filesystem to be read-only, then "I/O hang" will loop to rehandle
the requests for a period time(ex. 5 second) until the requests
not return EIO(when backend storage link recovered).
In addition to the function as above, "I/O hang" also can sent event to
libvirt after backend storage status changed.
configure methods:
1. "I/O hang" ability can be configured for each disk as a disk attribute.
2. "I/O hang" timeout value also can be configured for each disk, when
storage link not recover in timeout value,
"I/O hang" will disable rehandle I/O requests and return EIO to Guest.
Are you interested in the feature? I intend to push this feature to
qemu org, what's your opinion?