summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2016-08-29 09:58:45 +0200
committerKarolin Seeger <kseeger@samba.org>2016-09-19 15:17:05 +0200
commit6a8400e620cd326cebd7d64de891848f1d5808a1 (patch)
tree05e61433b66e2806f564e620073877c9bedcef35
parent5bad77f198940dc2b10329bcde04fb0bbc5e1108 (diff)
downloadsamba-6a8400e620cd326cebd7d64de891848f1d5808a1.tar.gz
smbd: Reset O_NONBLOCK on open files
See the comment inline :-) Bug: https://bugzilla.samba.org/show_bug.cgi?id=12268 Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Simo <simo@samba.org> Autobuild-User(master): Volker Lendecke <vl@samba.org> Autobuild-Date(master): Thu Sep 15 20:21:41 CEST 2016 on sn-devel-144 (cherry picked from commit e69b17d603e5f09ac1e7ee05fc1f5ad67288c484) Autobuild-User(v4-3-test): Karolin Seeger <kseeger@samba.org> Autobuild-Date(v4-3-test): Mon Sep 19 15:17:06 CEST 2016 on sn-devel-104
-rw-r--r--source3/smbd/open.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index 590561ebce8..38fef7955f8 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -882,6 +882,25 @@ static NTSTATUS open_file(files_struct *fsp,
return status;
}
+ if (local_flags & O_NONBLOCK) {
+ /*
+ * GPFS can return ETIMEDOUT for pread on
+ * nonblocking file descriptors when files
+ * migrated to tape need to be recalled. I
+ * could imagine this happens elsehwere
+ * too. With blocking file descriptors this
+ * does not happen.
+ */
+ ret = set_blocking(fsp->fh->fd, true);
+ if (ret == -1) {
+ status = map_nt_error_from_unix(errno);
+ DBG_WARNING("Could not set fd to blocking: "
+ "%s\n", strerror(errno));
+ fd_close(fsp);
+ return status;
+ }
+ }
+
ret = SMB_VFS_FSTAT(fsp, &smb_fname->st);
if (ret == -1) {
/* If we have an fd, this stat should succeed. */