]> sourceware.org Git - systemtap.git/commitdiff
2005-07-18 Martin Hunt <hunt@redhat.com>
authorhunt <hunt>
Tue, 19 Jul 2005 06:52:14 +0000 (06:52 +0000)
committerhunt <hunt>
Tue, 19 Jul 2005 06:52:14 +0000 (06:52 +0000)
* transport.h (_stp_transport_write): Call _stp_relay_write().

* transport.c (_stp_cleanup_and_exit): Print transport
failure count.
(_stp_relay_write): Like relay_write() except returns
-1 on error.

runtime/transport/ChangeLog
runtime/transport/transport.c
runtime/transport/transport.h

index 09ea19e22384d18ce152d9c9e4b282bc6316db63..e00806014f6f9ba95cc15d0943d8d9ff734ae7b5 100644 (file)
@@ -1,3 +1,12 @@
+2005-07-18  Martin Hunt  <hunt@redhat.com>
+
+       * transport.h (_stp_transport_write): Call _stp_relay_write().
+
+       * transport.c (_stp_cleanup_and_exit): Print transport
+       failure count.
+       (_stp_relay_write): Like relay_write() except returns
+       -1 on error.
+
 2005-07-14  Tom Zanussi  <zanussi@us.ibm.com>
 
        * netlink.c (_stp_netlink_open): Add missing delayed_pkts
index 18177ab247290915db5fa310cc15e5f73524f309..d5699303729df0286e03430335b06fe50c899264 100644 (file)
@@ -114,11 +114,15 @@ static void _stp_cleanup_and_exit (char *name)
        int trylimit = 50;
 
        if (_stp_exit_called == 0) {
+               
+               int failures = atomic_read(&_stp_transport_failures);
                _stp_exit_called = 1;
                probe_exit();
+               if (failures)
+                       _stp_warn ("There were %d transport failures.\n", failures);
                _stp_transport_flush();
        }
-
+       
        while (_stp_ctrl_send(STP_EXIT, name, strlen(name)+1, _stp_tport->pid) < 0 && trylimit--)
                msleep (5);
 }
@@ -126,6 +130,9 @@ static void _stp_cleanup_and_exit (char *name)
 /*
  * Call probe_exit() if necessary and send a message to stpd to unload the module.
  */
+
+
+
 static void stp_exit_helper (void *data)
 {
        _stp_cleanup_and_exit(__this_module.name);
@@ -180,7 +187,7 @@ void _stp_transport_close()
 {
        if (!_stp_tport)
                return;
-
+               
        _stp_ctrl_unregister(_stp_tport->pid);
        if (!_stp_streaming())
                _stp_relayfs_close(_stp_tport->chan, _stp_tport->dir);
@@ -245,5 +252,31 @@ int _stp_transport_send (int pid, void *data, int len)
        return err;
 }
 
+/* like relay_write except returns an error code */
+
+static int _stp_relay_write (struct rchan *chan,
+                            const void *data,
+                            unsigned length)
+{
+       unsigned long flags;
+       struct rchan_buf *buf;
+
+       if (unlikely(length == 0))
+               return 0;
+
+       local_irq_save(flags);
+       buf = chan->buf[smp_processor_id()];
+       if (unlikely(buf->offset + length > chan->subbuf_size))
+               length = relay_switch_subbuf(buf, length);
+       memcpy(buf->data + buf->offset, data, length);
+       buf->offset += length;
+       local_irq_restore(flags);
+       
+       if (unlikely(length == 0))
+               return -1;
+
+       return length;
+}
+
 /** @} */
 #endif /* _TRANSPORT_C_ */
index 463d7671b5c0bd5de4692908c9c56bbc3c67e196..3a4c683914d215bf51f0d8def5c19beec6bfe5b9 100644 (file)
@@ -9,6 +9,8 @@
 #include "netlink.h"
 #include "relayfs.h"
 
+void _stp_warn (const char *fmt, ...);
+
 static unsigned n_subbufs = 4;
 static unsigned subbuf_size = 65536;
 
@@ -74,7 +76,7 @@ struct transport_info
 #ifdef STP_NETLINK_ONLY
 #define _stp_transport_write(t, data, len)  _stp_transport_send (t->pid, data, len)
 #else
-#define _stp_transport_write(t, data, len)  relay_write(t->chan, data, len)
+#define _stp_transport_write(t, data, len)  _stp_relay_write(t->chan, data, len)
 #endif
 
 extern void _stp_transport_cleanup(void);
This page took 0.033159 seconds and 5 git commands to generate.