The transport layer's functional interface foresees having error codes
percolate back up to the caller.  However, up until now, the sk module
simply returned -1 for any error.  This patch lets the code return the
specific error instead.

Signed-off-by: Richard Cochran <richardcoch...@gmail.com>
---
 sk.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/sk.c b/sk.c
index e211175..c9ef4d2 100644
--- a/sk.c
+++ b/sk.c
@@ -354,7 +354,7 @@ int sk_receive(int fd, void *buf, int buflen,
                                     "timed out while polling for tx 
timestamp");
                        pr_err("increasing tx_timestamp_timeout may correct "
                               "this issue, but it is likely caused by a driver 
bug");
-                       return res;
+                       return -errno;
                } else if (!(pfd.revents & sk_revents)) {
                        pr_err("poll for tx timestamp woke up on non ERR 
event");
                        return -1;
@@ -362,24 +362,24 @@ int sk_receive(int fd, void *buf, int buflen,
        }
 
        cnt = recvmsg(fd, &msg, flags);
-       if (cnt < 0)
+       if (cnt < 0) {
                pr_err("recvmsg%sfailed: %m",
                       flags == MSG_ERRQUEUE ? " tx timestamp " : " ");
-
+       }
        for (cm = CMSG_FIRSTHDR(&msg); cm != NULL; cm = CMSG_NXTHDR(&msg, cm)) {
                level = cm->cmsg_level;
                type  = cm->cmsg_type;
                if (SOL_SOCKET == level && SO_TIMESTAMPING == type) {
                        if (cm->cmsg_len < sizeof(*ts) * 3) {
                                pr_warning("short SO_TIMESTAMPING message");
-                               return -1;
+                               return -EMSGSIZE;
                        }
                        ts = (struct timespec *) CMSG_DATA(cm);
                }
                if (SOL_SOCKET == level && SO_TIMESTAMPNS == type) {
                        if (cm->cmsg_len < sizeof(*sw)) {
                                pr_warning("short SO_TIMESTAMPNS message");
-                               return -1;
+                               return -EMSGSIZE;
                        }
                        sw = (struct timespec *) CMSG_DATA(cm);
                        hwts->sw = timespec_to_tmv(*sw);
@@ -391,7 +391,7 @@ int sk_receive(int fd, void *buf, int buflen,
 
        if (!ts) {
                memset(&hwts->ts, 0, sizeof(hwts->ts));
-               return cnt;
+               return cnt < 1 ? -errno : cnt;
        }
 
        switch (hwts->type) {
@@ -407,7 +407,7 @@ int sk_receive(int fd, void *buf, int buflen,
                hwts->ts = timespec_to_tmv(ts[1]);
                break;
        }
-       return cnt;
+       return cnt < 1 ? -errno : cnt;
 }
 
 int sk_set_priority(int fd, int family, uint8_t dscp)
-- 
2.20.1



_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to