From b27b54457888975f62c827a65c026ecba9f5adda Mon Sep 17 00:00:00 2001 From: Bastian Friedrich Date: Wed, 9 Oct 2013 17:43:36 +0200 Subject: [PATCH] Missing handling of "close" errors When backing up on a CIFS target (others?), a full (remote) file system is not detected until close() returns (returning -1 and setting errno). However, the return value is not verified, and the incorrect write operation is not detected. The final job result is "ok", but the volume files are small or empty. Fixes #233: Missing handling of "close" errors Signed-off-by: Marco van Wieringen --- src/stored/dev.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/stored/dev.c b/src/stored/dev.c index 4fe1ca26aff..e9d10a14f38 100644 --- a/src/stored/dev.c +++ b/src/stored/dev.c @@ -1713,6 +1713,7 @@ void DEVICE::clear_volhdr() */ void DEVICE::close(DCR *dcr) { + int status; Dmsg1(100, "close_dev %s\n", print_name()); if (!norewindonclose) { @@ -1720,8 +1721,7 @@ void DEVICE::close(DCR *dcr) } if (!is_open()) { - Dmsg2(100, "device %s already closed vol=%s\n", print_name(), - VolHdr.VolumeName); + Dmsg2(100, "device %s already closed vol=%s\n", print_name(), VolHdr.VolumeName); return; /* already closed */ } @@ -1732,7 +1732,13 @@ void DEVICE::close(DCR *dcr) unlock_door(); /* Fall through wanted */ default: - d_close(m_fd); + status = d_close(m_fd); + if (status < 0) { + berrno be; + + Mmsg2(errmsg, _("Unable to close device %s. ERR=%s\n"), print_name(), be.bstrerror()); + Jmsg(dcr->jcr, M_FATAL, 0, errmsg); + } break; }