aboutsummaryrefslogtreecommitdiffstats
path: root/net/tipc/log.c
diff options
context:
space:
mode:
authorErik Hugne <erik.hugne@ericsson.com>2012-06-29 00:50:23 -0400
committerPaul Gortmaker <paul.gortmaker@windriver.com>2012-07-13 19:33:28 -0400
commitdc1aed37d17b4fe4f28a74d804c065b877bc7bed (patch)
tree83907b44c25a9a10c84106d17eecfceff00864ce /net/tipc/log.c
parente2dbd601346aeb64b1b387168b217fd5c301644e (diff)
tipc: phase out most of the struct print_buf usage
The tipc_printf is renamed to tipc_snprintf, as the new name describes more what the function actually does. It is also changed to take a buffer and length parameter and return number of characters written to the buffer. All callers of this function that used to pass a print_buf are updated. Final removal of the struct print_buf itself will be done synchronously with the pending removal of the deprecated logging code that also was using it. Functions that build up a response message with a list of ports, nametable contents etc. are changed to return the number of characters written to the output buffer. This information was previously hidden in a field of the print_buf struct, and the number of chars written was fetched with a call to tipc_printbuf_validate. This function is removed since it is no longer referenced nor needed. A generic max size ULTRA_STRING_MAX_LEN is defined, named in keeping with the existing TIPC_TLV_ULTRA_STRING, and the various definitions in port, link and nametable code that largely duplicated this information are removed. This means that amount of link statistics that can be returned is now increased from 2k to 32k. The buffer overflow check is now done just before the reply message is passed over netlink or TIPC to a remote node and the message indicating a truncated buffer is changed to a less dramatic one (less CAPS), placed at the end of the message. Signed-off-by: Erik Hugne <erik.hugne@ericsson.com> Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Diffstat (limited to 'net/tipc/log.c')
-rw-r--r--net/tipc/log.c47
1 files changed, 5 insertions, 42 deletions
diff --git a/net/tipc/log.c b/net/tipc/log.c
index d01e37a61b93..fa7ce927fda5 100644
--- a/net/tipc/log.c
+++ b/net/tipc/log.c
@@ -125,40 +125,6 @@ static int tipc_printbuf_empty(struct print_buf *pb)
125} 125}
126 126
127/** 127/**
128 * tipc_printbuf_validate - check for print buffer overflow
129 * @pb: pointer to print buffer structure
130 *
131 * Verifies that a print buffer has captured all data written to it.
132 * If data has been lost, linearize buffer and prepend an error message
133 *
134 * Returns length of print buffer data string (including trailing NUL)
135 */
136int tipc_printbuf_validate(struct print_buf *pb)
137{
138 char *err = "\n\n*** PRINT BUFFER OVERFLOW ***\n\n";
139 char *cp_buf;
140 struct print_buf cb;
141
142 if (!pb->buf)
143 return 0;
144
145 if (pb->buf[pb->size - 1] == 0) {
146 cp_buf = kmalloc(pb->size, GFP_ATOMIC);
147 if (cp_buf) {
148 tipc_printbuf_init(&cb, cp_buf, pb->size);
149 tipc_printbuf_move(&cb, pb);
150 tipc_printbuf_move(pb, &cb);
151 kfree(cp_buf);
152 memcpy(pb->buf, err, strlen(err));
153 } else {
154 tipc_printbuf_reset(pb);
155 tipc_printf(pb, err);
156 }
157 }
158 return pb->crs - pb->buf + 1;
159}
160
161/**
162 * tipc_printbuf_move - move print buffer contents to another print buffer 128 * tipc_printbuf_move - move print buffer contents to another print buffer
163 * @pb_to: pointer to destination print buffer structure 129 * @pb_to: pointer to destination print buffer structure
164 * @pb_from: pointer to source print buffer structure 130 * @pb_from: pointer to source print buffer structure
@@ -204,23 +170,20 @@ static void tipc_printbuf_move(struct print_buf *pb_to,
204} 170}
205 171
206/** 172/**
207 * tipc_printf - append formatted output to print buffer 173 * tipc_snprintf - append formatted output to print buffer
208 * @pb: pointer to print buffer 174 * @buf: pointer to print buffer
175 * @len: buffer length
209 * @fmt: formatted info to be printed 176 * @fmt: formatted info to be printed
210 */ 177 */
211void tipc_printf(struct print_buf *pb, const char *fmt, ...) 178int tipc_snprintf(char *buf, int len, const char *fmt, ...)
212{ 179{
213 int i; 180 int i;
214 va_list args; 181 va_list args;
215 char *buf;
216 int len;
217 182
218 buf = pb->crs;
219 len = pb->buf + pb->size - pb->crs;
220 va_start(args, fmt); 183 va_start(args, fmt);
221 i = vscnprintf(buf, len, fmt, args); 184 i = vscnprintf(buf, len, fmt, args);
222 va_end(args); 185 va_end(args);
223 pb->crs += i; 186 return i;
224} 187}
225 188
226/** 189/**