forked from TrueCloudLab/restic
sftp: Fix ENOSPC check
We now check for space that is not reserved for the root user on the remote, and the check is no longer in a defer block because it wouldn't fire. Some change in the surrounding code may have led the deferred function to capture the wrong err variable. Fixes #3336.
This commit is contained in:
parent
57d8eedb88
commit
62520bb7b4
1 changed files with 2 additions and 3 deletions
|
@ -354,14 +354,13 @@ func (r *SFTP) Save(ctx context.Context, h restic.Handle, rd restic.RewindReader
|
|||
debug.Log("sftp: failed to remove broken file %v: %v",
|
||||
f.Name(), rmErr)
|
||||
}
|
||||
|
||||
err = r.checkNoSpace(dirname, rd.Length(), err)
|
||||
}()
|
||||
|
||||
// save data, make sure to use the optimized sftp upload method
|
||||
wbytes, err := f.ReadFrom(rd)
|
||||
if err != nil {
|
||||
_ = f.Close()
|
||||
err = r.checkNoSpace(dirname, rd.Length(), err)
|
||||
return errors.Wrap(err, "Write")
|
||||
}
|
||||
|
||||
|
@ -403,7 +402,7 @@ func (r *SFTP) checkNoSpace(dir string, size int64, origErr error) error {
|
|||
debug.Log("sftp: StatVFS returned %v", err)
|
||||
return origErr
|
||||
}
|
||||
if fsinfo.Favail == 0 || fsinfo.FreeSpace() < uint64(size) {
|
||||
if fsinfo.Favail == 0 || fsinfo.Frsize*fsinfo.Bavail < uint64(size) {
|
||||
err := errors.New("sftp: no space left on device")
|
||||
return backoff.Permanent(err)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue