Pavel Shilovsky <piastryyy@xxxxxxxxx> writes: > Thanks for reporting the issue. > > The problem is with the recent fix which changes the error code from > -EINTR to -ERESTARTSYS: > > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/fs/cifs/transport.c?id=6988a619f5b79e4efadea6e19dcfe75fbcd350b5 > > and this problem happens here: > > https://git.samba.org/sfrench/?p=sfrench/cifs-2.6.git;a=blob;f=fs/cifs/smb2pdu.c;h=067eb44c7baa863c1e7ccd2c2f599be0b067f320;hb=236237ab6de1cde004b0ab3e348fc530334270d5#l3251 > > So, interrupted close commands don't get restarted by the client and > the client leaks open handles on the server. The offending patch was > tagged stable, so the fix seems quite urgent. The fix itself should be > simple: replace -EINTR with -ERESTARTSYS in the IF condition or even > amend it with "||". Yes, makes sense. Maybe we should do something like below diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c index 067eb44c7baa..794fc3b68b4f 100644 --- a/fs/cifs/smb2pdu.c +++ b/fs/cifs/smb2pdu.c @@ -3248,7 +3248,7 @@ __SMB2_close(const unsigned int xid, struct cifs_tcon *tcon, free_rsp_buf(resp_buftype, rsp); /* retry close in a worker thread if this one is interrupted */ - if (rc == -EINTR) { + if (is_interrupt_error(rc)) { int tmp_rc; tmp_rc = smb2_handle_cancelled_close(tcon, persistent_fid,