static int perf_header__getbuffer64(struct perf_header *self,
                                    int fd, void *buf, size_t size)
 {
-       if (do_read(fd, buf, size) <= 0)
+       if (readn(fd, buf, size) <= 0)
                return -1;
 
        if (self->needs_swap)
 {
        lseek(fd, 0, SEEK_SET);
 
-       if (do_read(fd, self, sizeof(*self)) <= 0 ||
+       if (readn(fd, self, sizeof(*self)) <= 0 ||
            memcmp(&self->magic, __perf_magic, sizeof(self->magic)))
                return -1;
 
                                       struct perf_header *ph, int fd,
                                       bool repipe)
 {
-       if (do_read(fd, self, sizeof(*self)) <= 0 ||
+       if (readn(fd, self, sizeof(*self)) <= 0 ||
            memcmp(&self->magic, __perf_magic, sizeof(self->magic)))
                return -1;
 
 
        return thread;
 }
 
-int do_read(int fd, void *buf, size_t size)
-{
-       void *buf_start = buf;
-
-       while (size) {
-               int ret = read(fd, buf, size);
-
-               if (ret <= 0)
-                       return ret;
-
-               size -= ret;
-               buf += ret;
-       }
-
-       return buf - buf_start;
-}
-
 #define session_done() (*(volatile int *)(&session_done))
 volatile int session_done;
 
 
        head = 0;
 more:
-       err = do_read(self->fd, &event, sizeof(struct perf_event_header));
+       err = readn(self->fd, &event, sizeof(struct perf_event_header));
        if (err <= 0) {
                if (err == 0)
                        goto done;
        p += sizeof(struct perf_event_header);
 
        if (size - sizeof(struct perf_event_header)) {
-               err = do_read(self->fd, p,
-                             size - sizeof(struct perf_event_header));
+               err = readn(self->fd, p, size - sizeof(struct perf_event_header));
                if (err <= 0) {
                        if (err == 0) {
                                pr_err("unexpected end of event stream\n");
 
 
 int perf_session__create_kernel_maps(struct perf_session *self);
 
-int do_read(int fd, void *buf, size_t size);
 void perf_session__update_sample_type(struct perf_session *self);
 void perf_session__set_sample_id_all(struct perf_session *session, bool value);
 void perf_session__set_sample_type(struct perf_session *session, u64 type);
 
 
        return value;
 }
+
+int readn(int fd, void *buf, size_t n)
+{
+       void *buf_start = buf;
+
+       while (n) {
+               int ret = read(fd, buf, n);
+
+               if (ret <= 0)
+                       return ret;
+
+               n -= ret;
+               buf += ret;
+       }
+
+       return buf - buf_start;
+}
 
 bool strglobmatch(const char *str, const char *pat);
 bool strlazymatch(const char *str, const char *pat);
 unsigned long convert_unit(unsigned long value, char *unit);
+int readn(int fd, void *buf, size_t size);
 
 #define _STR(x) #x
 #define STR(x) _STR(x)