[PATCH 09/11] tools/usb/p9_fwd: catch write or read errors on disconnect

Michael Grzeschik <[email protected]>
Newsgroups dev.linux.lists.v9fs,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
When unplugging the gadget or the gadget is not available
since the controller is reset, running transfers will return
with errno ENODEV. We catch this issues and report the problem
gracefully.

Signed-off-by: Michael Grzeschik <[email protected]>
---
 tools/usb/p9_fwd.py | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/tools/usb/p9_fwd.py b/tools/usb/p9_fwd.py
index 6a0104935ee995ec4159e27e1cfb7d93db422a33..c2c2afbf45df68376907ea2ae8c022614e4508f7 100755
--- a/tools/usb/p9_fwd.py
+++ b/tools/usb/p9_fwd.py
@@ -123,6 +123,9 @@ class Forwarder:
                     logging.debug("c2s: reading failed with %s, retrying", repr(e))
                     time.sleep(0.5)
                     continue
+                elif e.errno == errno.ENODEV:
+                    logging.debug("c2s: reading failed with %s", repr(e))
+                    raise ValueError("disconnected")
                 logging.error("c2s: reading failed with %s, aborting", repr(e))
                 raise
         size = struct.unpack("<I", data[:4])[0]
@@ -145,9 +148,14 @@ class Forwarder:
         logging.log(logging.TRACE, "s2c: writing")
         self._log_hexdump(data)
         while data:
-            written = self.ep_out.write(data)
-            assert written > 0
-            data = data[written:]
+            try:
+                written = self.ep_out.write(data)
+                assert written > 0
+                data = data[written:]
+            except usb.core.USBError as e:
+                if e.errno == errno.EIO or e.errno == errno.ENODEV:
+                   raise ValueError("disconnected")
+                raise
         if size % self.ep_out.wMaxPacketSize == 0:
             logging.log(logging.TRACE, "sending zero length packet")
             self.ep_out.write(b"")

-- 
2.47.3
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.