From: Jeremy Allison Date: Fri, 6 Aug 2004 17:49:00 +0000 (+0000) Subject: r1665: Patch from James Peach @ SGI to stop using sendfile if it isn't X-Git-Tag: samba-misc-tags/initial-v3-0-unstable~5936 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=1b0c70cf97aa45093fe5ef866a351b47ef1a5879;p=thirdparty%2Fsamba.git r1665: Patch from James Peach @ SGI to stop using sendfile if it isn't supported by the underlying OS. Jeremy. --- diff --git a/source/param/loadparm.c b/source/param/loadparm.c index 549e232fe07..4150f57e55d 100644 --- a/source/param/loadparm.c +++ b/source/param/loadparm.c @@ -4323,6 +4323,18 @@ BOOL lp_use_sendfile(int snum) return (_lp_use_sendfile(snum) && (get_remote_arch() != RA_WIN95) && !srv_is_signing_active()); } +/******************************************************************* + Turn off sendfile if we find the underlying OS doesn't support it. +********************************************************************/ + +void set_use_sendfile(int snum, BOOL val) +{ + if (LP_SNUM_OK(snum)) + ServicePtrs[snum]->bUseSendfile = val; + else + sDefault.bUseSendfile = val; +} + /******************************************************************* Turn off storing DOS attributes if this share doesn't support it. ********************************************************************/ diff --git a/source/smbd/reply.c b/source/smbd/reply.c index f3ab709df48..4125d71b840 100644 --- a/source/smbd/reply.c +++ b/source/smbd/reply.c @@ -1748,8 +1748,10 @@ void send_file_readbraw(connection_struct *conn, files_struct *fsp, SMB_OFF_T st * Special hack for broken Linux with no 64 bit clean sendfile. If we * return ENOSYS then pretend we just got a normal read. */ - if (errno == ENOSYS) + if (errno == ENOSYS) { + set_use_sendfile(SNUM(conn), False); goto normal_read; + } DEBUG(0,("send_file_readbraw: sendfile failed for file %s (%s). Terminating\n", fsp->fsp_name, strerror(errno) )); @@ -2111,8 +2113,10 @@ int send_file_readX(connection_struct *conn, char *inbuf,char *outbuf,int length * Special hack for broken Linux with no 64 bit clean sendfile. If we * return ENOSYS then pretend we just got a normal read. */ - if (errno == ENOSYS) + if (errno == ENOSYS) { + set_use_sendfile(SNUM(conn), False); goto normal_read; + } DEBUG(0,("send_file_readX: sendfile failed for file %s (%s). Terminating\n", fsp->fsp_name, strerror(errno) ));