diff --git a/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/DcapProxyIoFactory.java b/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/DcapProxyIoFactory.java index 2d5355142d2..658817e3e53 100644 --- a/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/DcapProxyIoFactory.java +++ b/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/DcapProxyIoFactory.java @@ -194,6 +194,13 @@ public void notifyDisposed(NFS4State state) { } } + void shutdownAdapter(stateid4 stateid) { + ProxyIoAdapter adapter = _proxyIO.getIfPresent(stateid); + if (adapter != null) { + _proxyIO.invalidate(stateid); + tryToClose(adapter); + } + } @Override public void getInfo(PrintWriter pw) { pw.println(" Known proxy adapters (proxy-io):"); diff --git a/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/ProxyIoREAD.java b/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/ProxyIoREAD.java index 913d9ec0765..25d258fd655 100644 --- a/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/ProxyIoREAD.java +++ b/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/ProxyIoREAD.java @@ -102,6 +102,7 @@ public void process(CompoundContext context, nfs_resop4 result) { _log.debug(he.getMessage()); }catch(IOException ioe) { _log.error("DSREAD: ", ioe); + proxyIoFactory.shutdownAdapter(_args.opread.stateid); res.status = nfsstat.NFSERR_IO; }catch(Exception e) { _log.error("DSREAD: ", e); diff --git a/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/ProxyIoWRITE.java b/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/ProxyIoWRITE.java index cf6622d39a0..e09c5d31d1b 100644 --- a/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/ProxyIoWRITE.java +++ b/modules/dcache-nfs/src/main/java/org/dcache/chimera/nfsv41/door/proxy/ProxyIoWRITE.java @@ -111,6 +111,7 @@ public void process(CompoundContext context, nfs_resop4 result) { _log.debug(he.getMessage()); }catch(IOException ioe) { _log.error("DSWRITE: {}", ioe.getMessage()); + proxyIoFactory.shutdownAdapter(_args.opwrite.stateid); res.status = nfsstat.NFSERR_IO; }catch(Exception e) { _log.error("DSWRITE: ", e);