aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog18
-rw-r--r--nscd/aicache.c30
-rw-r--r--nscd/connections.c54
-rw-r--r--nscd/grpcache.c37
-rw-r--r--nscd/hstcache.c37
-rw-r--r--nscd/initgrcache.c37
-rw-r--r--nscd/netgroupcache.c59
-rw-r--r--nscd/nscd-client.h2
-rw-r--r--nscd/pwdcache.c37
-rw-r--r--nscd/servicescache.c34
-rw-r--r--sysdeps/unix/sysv/linux/Makefile2
-rw-r--r--sysdeps/unix/sysv/linux/kernel-features.h3
12 files changed, 40 insertions, 310 deletions
diff --git a/ChangeLog b/ChangeLog
index 3d4f2373ff..adec735a6b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2018-05-16 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+
+ [BZ #23178]
+ * nscd/nscd-client.h (sendfileall): Remove prototype.
+ * nscd/connections.c [HAVE_SENDFILE] (sendfileall): Remove function.
+ (handle_request): Use writeall instead of sendfileall.
+ * nscd/aicache.c (addhstaiX): Likewise.
+ * nscd/grpcache.c (cache_addgr): Likewise.
+ * nscd/hstcache.c (cache_addhst): Likewise.
+ * nscd/initgrcache.c (addinitgroupsX): Likewise.
+ * nscd/netgroupcache.c (addgetnetgrentX, addinnetgrX): Likewise.
+ * nscd/pwdcache.c (cache_addpw): Likewise.
+ * nscd/servicescache.c (cache_addserv): Likewise.
+ * sysdeps/unix/sysv/linux/Makefile [$(subdir) == nscd]
+ (sysdep-CFLAGS): Remove -DHAVE_SENDFILE.
+ * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_SENDFILE):
+ Remove define.
+
2018-05-16 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/x86_64/multiarch/strncat-c.c (STRNCAT_PRIMARY): Removed.
diff --git a/nscd/aicache.c b/nscd/aicache.c
index 6f7b038021..2095edf911 100644
--- a/nscd/aicache.c
+++ b/nscd/aicache.c
@@ -31,9 +31,6 @@
#include "dbg_log.h"
#include "nscd.h"
-#ifdef HAVE_SENDFILE
-# include <kernel-features.h>
-#endif
typedef enum nss_status (*nss_gethostbyname4_r)
@@ -447,32 +444,7 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req,
would unnecessarily let the receiver wait. */
assert (fd != -1);
-#ifdef HAVE_SENDFILE
- if (__builtin_expect (db->mmap_used, 1) && !alloca_used)
- {
- assert (db->wr_fd != -1);
- assert ((char *) &dataset->resp > (char *) db->data);
- assert ((char *) dataset - (char *) db->head + total
- <= (sizeof (struct database_pers_head)
- + db->head->module * sizeof (ref_t)
- + db->head->data_size));
-# ifndef __ASSUME_SENDFILE
- ssize_t written;
- written =
-# endif
- sendfileall (fd, db->wr_fd, (char *) &dataset->resp
- - (char *) db->head, dataset->head.recsize);
-# ifndef __ASSUME_SENDFILE
- if (written == -1 && errno == ENOSYS)
- goto use_write;
-# endif
- }
- else
-# ifndef __ASSUME_SENDFILE
- use_write:
-# endif
-#endif
- writeall (fd, &dataset->resp, dataset->head.recsize);
+ writeall (fd, &dataset->resp, dataset->head.recsize);
}
goto out;
diff --git a/nscd/connections.c b/nscd/connections.c
index 5f91985859..1b3bae4eeb 100644
--- a/nscd/connections.c
+++ b/nscd/connections.c
@@ -46,9 +46,6 @@
#include <sys/mman.h>
#include <sys/param.h>
#include <sys/poll.h>
-#ifdef HAVE_SENDFILE
-# include <sys/sendfile.h>
-#endif
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/un.h>
@@ -285,26 +282,6 @@ writeall (int fd, const void *buf, size_t len)
}
-#ifdef HAVE_SENDFILE
-ssize_t
-sendfileall (int tofd, int fromfd, off_t off, size_t len)
-{
- ssize_t n = len;
- ssize_t ret;
-
- do
- {
- ret = TEMP_FAILURE_RETRY (sendfile (tofd, fromfd, &off, n));
- if (ret <= 0)
- break;
- n -= ret;
- }
- while (n > 0);
- return ret < 0 ? ret : len - n;
-}
-#endif
-
-
enum usekey
{
use_not = 0,
@@ -1163,35 +1140,8 @@ request from '%s' [%ld] not handled due to missing permission"),
if (cached != NULL)
{
/* Hurray it's in the cache. */
- ssize_t nwritten;
-
-#ifdef HAVE_SENDFILE
- if (__glibc_likely (db->mmap_used))
- {
- assert (db->wr_fd != -1);
- assert ((char *) cached->data > (char *) db->data);
- assert ((char *) cached->data - (char *) db->head
- + cached->recsize
- <= (sizeof (struct database_pers_head)
- + db->head->module * sizeof (ref_t)
- + db->head->data_size));
- nwritten = sendfileall (fd, db->wr_fd,
- (char *) cached->data
- - (char *) db->head, cached->recsize);
-# ifndef __ASSUME_SENDFILE
- if (nwritten == -1 && errno == ENOSYS)
- goto use_write;
-# endif
- }
- else
-# ifndef __ASSUME_SENDFILE
- use_write:
-# endif
-#endif
- nwritten = writeall (fd, cached->data, cached->recsize);
-
- if (nwritten != cached->recsize
- && __builtin_expect (debug_level, 0) > 0)
+ if (writeall (fd, cached->data, cached->recsize) != cached->recsize
+ && __glibc_unlikely (debug_level > 0))
{
/* We have problems sending the result. */
char buf[256];
diff --git a/nscd/grpcache.c b/nscd/grpcache.c
index 0ed8e656b2..c01aeb1f1d 100644
--- a/nscd/grpcache.c
+++ b/nscd/grpcache.c
@@ -35,9 +35,6 @@
#include "nscd.h"
#include "dbg_log.h"
-#ifdef HAVE_SENDFILE
-# include <kernel-features.h>
-#endif
/* This is the standard reply in case the service is disabled. */
static const gr_response_header disabled =
@@ -318,37 +315,9 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req,
unnecessarily let the receiver wait. */
assert (fd != -1);
-#ifdef HAVE_SENDFILE
- if (__builtin_expect (db->mmap_used, 1) && ! dataset_temporary)
- {
- assert (db->wr_fd != -1);
- assert ((char *) &dataset->resp > (char *) db->data);
- assert ((char *) dataset - (char *) db->head
- + total
- <= (sizeof (struct database_pers_head)
- + db->head->module * sizeof (ref_t)
- + db->head->data_size));
- ssize_t written = sendfileall (fd, db->wr_fd,
- (char *) &dataset->resp
- - (char *) db->head,
- dataset->head.recsize);
- if (written != dataset->head.recsize)
- {
-# ifndef __ASSUME_SENDFILE
- if (written == -1 && errno == ENOSYS)
- goto use_write;
-# endif
- all_written = false;
- }
- }
- else
-# ifndef __ASSUME_SENDFILE
- use_write:
-# endif
-#endif
- if (writeall (fd, &dataset->resp, dataset->head.recsize)
- != dataset->head.recsize)
- all_written = false;
+ if (writeall (fd, &dataset->resp, dataset->head.recsize)
+ != dataset->head.recsize)
+ all_written = false;
}
/* Add the record to the database. But only if it has not been
diff --git a/nscd/hstcache.c b/nscd/hstcache.c
index 344a2b3052..6ef0c653ea 100644
--- a/nscd/hstcache.c
+++ b/nscd/hstcache.c
@@ -37,9 +37,6 @@
#include "nscd.h"
#include "dbg_log.h"
-#ifdef HAVE_SENDFILE
-# include <kernel-features.h>
-#endif
/* This is the standard reply in case the service is disabled. */
@@ -352,37 +349,9 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req,
unnecessarily keep the receiver waiting. */
assert (fd != -1);
-#ifdef HAVE_SENDFILE
- if (__builtin_expect (db->mmap_used, 1) && !alloca_used)
- {
- assert (db->wr_fd != -1);
- assert ((char *) &dataset->resp > (char *) db->data);
- assert ((char *) dataset - (char *) db->head
- + total
- <= (sizeof (struct database_pers_head)
- + db->head->module * sizeof (ref_t)
- + db->head->data_size));
- ssize_t written = sendfileall (fd, db->wr_fd,
- (char *) &dataset->resp
- - (char *) db->head,
- dataset->head.recsize);
- if (written != dataset->head.recsize)
- {
-# ifndef __ASSUME_SENDFILE
- if (written == -1 && errno == ENOSYS)
- goto use_write;
-# endif
- all_written = false;
- }
- }
- else
-# ifndef __ASSUME_SENDFILE
- use_write:
-# endif
-#endif
- if (writeall (fd, &dataset->resp, dataset->head.recsize)
- != dataset->head.recsize)
- all_written = false;
+ if (writeall (fd, &dataset->resp, dataset->head.recsize)
+ != dataset->head.recsize)
+ all_written = false;
}
/* Add the record to the database. But only if it has not been
diff --git a/nscd/initgrcache.c b/nscd/initgrcache.c
index e21068fbf0..2c74951f57 100644
--- a/nscd/initgrcache.c
+++ b/nscd/initgrcache.c
@@ -29,9 +29,6 @@
#include "dbg_log.h"
#include "nscd.h"
-#ifdef HAVE_SENDFILE
-# include <kernel-features.h>
-#endif
#include "../nss/nsswitch.h"
@@ -353,37 +350,9 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req,
unnecessarily let the receiver wait. */
assert (fd != -1);
-#ifdef HAVE_SENDFILE
- if (__builtin_expect (db->mmap_used, 1) && !alloca_used)
- {
- assert (db->wr_fd != -1);
- assert ((char *) &dataset->resp > (char *) db->data);
- assert ((char *) dataset - (char *) db->head
- + total
- <= (sizeof (struct database_pers_head)
- + db->head->module * sizeof (ref_t)
- + db->head->data_size));
- ssize_t written = sendfileall (fd, db->wr_fd,
- (char *) &dataset->resp
- - (char *) db->head,
- dataset->head.recsize);
- if (written != dataset->head.recsize)
- {
-# ifndef __ASSUME_SENDFILE
- if (written == -1 && errno == ENOSYS)
- goto use_write;
-# endif
- all_written = false;
- }
- }
- else
-# ifndef __ASSUME_SENDFILE
- use_write:
-# endif
-#endif
- if (writeall (fd, &dataset->resp, dataset->head.recsize)
- != dataset->head.recsize)
- all_written = false;
+ if (writeall (fd, &dataset->resp, dataset->head.recsize)
+ != dataset->head.recsize)
+ all_written = false;
}
diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c
index 2f187b208c..2b35389cc8 100644
--- a/nscd/netgroupcache.c
+++ b/nscd/netgroupcache.c
@@ -413,33 +413,7 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
since while inserting this thread might block and so would
unnecessarily let the receiver wait. */
writeout:
-#ifdef HAVE_SENDFILE
- if (__builtin_expect (db->mmap_used, 1) && cacheable)
- {
- assert (db->wr_fd != -1);
- assert ((char *) &dataset->resp > (char *) db->data);
- assert ((char *) dataset - (char *) db->head + total
- <= (sizeof (struct database_pers_head)
- + db->head->module * sizeof (ref_t)
- + db->head->data_size));
-# ifndef __ASSUME_SENDFILE
- ssize_t written =
-# endif
- sendfileall (fd, db->wr_fd, (char *) &dataset->resp
- - (char *) db->head, dataset->head.recsize);
-# ifndef __ASSUME_SENDFILE
- if (written == -1 && errno == ENOSYS)
- goto use_write;
-# endif
- }
- else
-#endif
- {
-#if defined HAVE_SENDFILE && !defined __ASSUME_SENDFILE
- use_write:
-#endif
- writeall (fd, &dataset->resp, dataset->head.recsize);
- }
+ writeall (fd, &dataset->resp, dataset->head.recsize);
}
if (cacheable)
@@ -594,36 +568,9 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req,
/* We write the dataset before inserting it to the database
since while inserting this thread might block and so would
unnecessarily let the receiver wait. */
- assert (fd != -1);
+ assert (fd != -1);
-#ifdef HAVE_SENDFILE
- if (__builtin_expect (db->mmap_used, 1) && cacheable)
- {
- assert (db->wr_fd != -1);
- assert ((char *) &dataset->resp > (char *) db->data);
- assert ((char *) dataset - (char *) db->head + sizeof (*dataset)
- <= (sizeof (struct database_pers_head)
- + db->head->module * sizeof (ref_t)
- + db->head->data_size));
-# ifndef __ASSUME_SENDFILE
- ssize_t written =
-# endif
- sendfileall (fd, db->wr_fd,
- (char *) &dataset->resp - (char *) db->head,
- sizeof (innetgroup_response_header));
-# ifndef __ASSUME_SENDFILE
- if (written == -1 && errno == ENOSYS)
- goto use_write;
-# endif
- }
- else
-#endif
- {
-#if defined HAVE_SENDFILE && !defined __ASSUME_SENDFILE
- use_write:
-#endif
- writeall (fd, &dataset->resp, sizeof (innetgroup_response_header));
- }
+ writeall (fd, &dataset->resp, sizeof (innetgroup_response_header));
}
if (cacheable)
diff --git a/nscd/nscd-client.h b/nscd/nscd-client.h
index 831eb5acbf..624effabb4 100644
--- a/nscd/nscd-client.h
+++ b/nscd/nscd-client.h
@@ -446,8 +446,6 @@ extern ssize_t __readvall (int fd, const struct iovec *iov, int iovcnt)
attribute_hidden;
extern ssize_t writeall (int fd, const void *buf, size_t len)
attribute_hidden;
-extern ssize_t sendfileall (int tofd, int fromfd, off_t off, size_t len)
- attribute_hidden;
/* Get netlink timestamp counter from mapped area or zero. */
extern uint32_t __nscd_get_nl_timestamp (void)
diff --git a/nscd/pwdcache.c b/nscd/pwdcache.c
index 4c3ab66021..997d7c08fc 100644
--- a/nscd/pwdcache.c
+++ b/nscd/pwdcache.c
@@ -35,9 +35,6 @@
#include "nscd.h"
#include "dbg_log.h"
-#ifdef HAVE_SENDFILE
-# include <kernel-features.h>
-#endif
/* This is the standard reply in case the service is disabled. */
static const pw_response_header disabled =
@@ -296,37 +293,9 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req,
unnecessarily let the receiver wait. */
assert (fd != -1);
-#ifdef HAVE_SENDFILE
- if (__builtin_expect (db->mmap_used, 1) && !alloca_used)
- {
- assert (db->wr_fd != -1);
- assert ((char *) &dataset->resp > (char *) db->data);
- assert ((char *) dataset - (char *) db->head
- + total
- <= (sizeof (struct database_pers_head)
- + db->head->module * sizeof (ref_t)
- + db->head->data_size));
- ssize_t written = sendfileall (fd, db->wr_fd,
- (char *) &dataset->resp
- - (char *) db->head,
- dataset->head.recsize);
- if (written != dataset->head.recsize)
- {
-# ifndef __ASSUME_SENDFILE
- if (written == -1 && errno == ENOSYS)
- goto use_write;
-# endif
- all_written = false;
- }
- }
- else
-# ifndef __ASSUME_SENDFILE
- use_write:
-# endif
-#endif
- if (writeall (fd, &dataset->resp, dataset->head.recsize)
- != dataset->head.recsize)
- all_written = false;
+ if (writeall (fd, &dataset->resp, dataset->head.recsize)
+ != dataset->head.recsize)
+ all_written = false;
}
diff --git a/nscd/servicescache.c b/nscd/servicescache.c
index 49d9d0dece..187207f7ea 100644
--- a/nscd/servicescache.c
+++ b/nscd/servicescache.c
@@ -278,37 +278,9 @@ cache_addserv (struct database_dyn *db, int fd, request_header *req,
unnecessarily keep the receiver waiting. */
assert (fd != -1);
-#ifdef HAVE_SENDFILE
- if (__builtin_expect (db->mmap_used, 1) && !alloca_used)
- {
- assert (db->wr_fd != -1);
- assert ((char *) &dataset->resp > (char *) db->data);
- assert ((char *) dataset - (char *) db->head
- + total
- <= (sizeof (struct database_pers_head)
- + db->head->module * sizeof (ref_t)
- + db->head->data_size));
- ssize_t written = sendfileall (fd, db->wr_fd,
- (char *) &dataset->resp
- - (char *) db->head,
- dataset->head.recsize);
- if (written != dataset->head.recsize)
- {
-# ifndef __ASSUME_SENDFILE
- if (written == -1 && errno == ENOSYS)
- goto use_write;
-# endif
- all_written = false;
- }
- }
- else
-# ifndef __ASSUME_SENDFILE
- use_write:
-# endif
-#endif
- if (writeall (fd, &dataset->resp, dataset->head.recsize)
- != dataset->head.recsize)
- all_written = false;
+ if (writeall (fd, &dataset->resp, dataset->head.recsize)
+ != dataset->head.recsize)
+ all_written = false;
}
/* Add the record to the database. But only if it has not been
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 8f19e0efc3..cd6244f7ea 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -190,7 +190,7 @@ CFLAGS-mq_receive.c += -fexceptions
endif
ifeq ($(subdir),nscd)
-sysdep-CFLAGS += -DHAVE_EPOLL -DHAVE_SENDFILE -DHAVE_INOTIFY -DHAVE_NETLINK
+sysdep-CFLAGS += -DHAVE_EPOLL -DHAVE_INOTIFY -DHAVE_NETLINK
CFLAGS-gai.c += -DNEED_NETLINK
endif
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index f65a262994..2ef2916a52 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -37,9 +37,6 @@
introduced. If somebody cares these values can afterwards be
corrected. */
-/* The sendfile syscall was introduced in 2.2.0. */
-#define __ASSUME_SENDFILE 1
-
/* Some architectures use the socketcall multiplexer for some or all
socket-related operations instead of separate syscalls.
__ASSUME_SOCKETCALL is defined for such architectures. */