aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gb/gprs_ns2_fr.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/gb/gprs_ns2_fr.c b/src/gb/gprs_ns2_fr.c
index 2662df68..93b7759b 100644
--- a/src/gb/gprs_ns2_fr.c
+++ b/src/gb/gprs_ns2_fr.c
@@ -311,10 +311,14 @@ static int fr_netif_write_one(struct gprs_ns2_vc_bind *bind, struct msgb *msg)
switch (errno) {
case EAGAIN:
case ENOBUFS:
+ /* not a real error, but more a normal event on AF_PACKET */
+ /* don't free the message and let the caller re-enqueue */
return -errno;
default:
+ /* an actual error, like -ENETDOWN, -EMSGSIZE */
LOGBIND(bind, LOGL_ERROR, "error during write to AF_PACKET: %s\n", strerror(errno));
- return -errno;
+ msgb_free(msg);
+ return 0;
}
} else {
/* short write */