tipc: Provide feedback when log buffer resizing fails

This patch provides feedback to the user when TIPC is unable
to set its log buffer to the requested size.

Signed-off-by: Allan Stephens <allan.stephens@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Allan Stephens 2008-05-05 01:20:42 -07:00 committed by David S. Miller
parent 025adbe8e5
commit fb98ec71c7
2 changed files with 12 additions and 5 deletions

View File

@ -2,7 +2,7 @@
* net/tipc/dbg.c: TIPC print buffer routines for debugging * net/tipc/dbg.c: TIPC print buffer routines for debugging
* *
* Copyright (c) 1996-2006, Ericsson AB * Copyright (c) 1996-2006, Ericsson AB
* Copyright (c) 2005-2006, Wind River Systems * Copyright (c) 2005-2007, Wind River Systems
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -354,8 +354,10 @@ void tipc_dump(struct print_buf *pb, const char *fmt, ...)
* @log_size: print buffer size to use * @log_size: print buffer size to use
*/ */
void tipc_log_resize(int log_size) int tipc_log_resize(int log_size)
{ {
int res = 0;
spin_lock_bh(&print_lock); spin_lock_bh(&print_lock);
if (TIPC_LOG->buf) { if (TIPC_LOG->buf) {
kfree(TIPC_LOG->buf); kfree(TIPC_LOG->buf);
@ -366,8 +368,11 @@ void tipc_log_resize(int log_size)
log_size = TIPC_PB_MIN_SIZE; log_size = TIPC_PB_MIN_SIZE;
tipc_printbuf_init(TIPC_LOG, kmalloc(log_size, GFP_ATOMIC), tipc_printbuf_init(TIPC_LOG, kmalloc(log_size, GFP_ATOMIC),
log_size); log_size);
res = !TIPC_LOG->buf;
} }
spin_unlock_bh(&print_lock); spin_unlock_bh(&print_lock);
return res;
} }
/** /**
@ -385,7 +390,9 @@ struct sk_buff *tipc_log_resize_cmd(const void *req_tlv_area, int req_tlv_space)
if (value != delimit(value, 0, 32768)) if (value != delimit(value, 0, 32768))
return tipc_cfg_reply_error_string(TIPC_CFG_INVALID_VALUE return tipc_cfg_reply_error_string(TIPC_CFG_INVALID_VALUE
" (log size must be 0-32768)"); " (log size must be 0-32768)");
tipc_log_resize(value); if (tipc_log_resize(value))
return tipc_cfg_reply_error_string(
"unable to create specified log (log size is now 0)");
return tipc_cfg_reply_none(); return tipc_cfg_reply_none();
} }

View File

@ -2,7 +2,7 @@
* net/tipc/dbg.h: Include file for TIPC print buffer routines * net/tipc/dbg.h: Include file for TIPC print buffer routines
* *
* Copyright (c) 1997-2006, Ericsson AB * Copyright (c) 1997-2006, Ericsson AB
* Copyright (c) 2005-2006, Wind River Systems * Copyright (c) 2005-2007, Wind River Systems
* All rights reserved. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
@ -61,7 +61,7 @@ int tipc_printbuf_empty(struct print_buf *pb);
int tipc_printbuf_validate(struct print_buf *pb); int tipc_printbuf_validate(struct print_buf *pb);
void tipc_printbuf_move(struct print_buf *pb_to, struct print_buf *pb_from); void tipc_printbuf_move(struct print_buf *pb_to, struct print_buf *pb_from);
void tipc_log_resize(int log_size); int tipc_log_resize(int log_size);
struct sk_buff *tipc_log_resize_cmd(const void *req_tlv_area, struct sk_buff *tipc_log_resize_cmd(const void *req_tlv_area,
int req_tlv_space); int req_tlv_space);