[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [dm-devel] log issues



Many thanks for this much needed one.
Applied.

On Tue, Jul 26, 2005 at 03:57:41PM -0500, Benjamin Marzinski wrote:
> There are two log issues that I uncovered. #1 If the log is emptied when the
> tail points to the very end of the log area, and the next message needs
> to roll over to the start, it doesn't pull the head around too, so the head
> is pointing at an empty message, causing you to print a priority 0 message
> of nothing. #2 It is possible for the log to be totally full, and on the
> next enqueue, have the log tail point to the log head, which causes the entire
> existing log to be lost.
> 
> This patch fixes both.
> 
> -Ben Marzinski
> 

> diff -urpN mp-devel/multipathd/log.c mp-devel-patched/multipathd/log.c
> --- mp-devel/multipathd/log.c	2005-07-12 11:02:17.000000000 -0500
> +++ mp-devel-patched/multipathd/log.c	2005-07-26 15:44:21.588859336 -0500
> @@ -108,18 +108,18 @@ int log_enqueue (int prio, const char * 
>  		la->tail += ALIGN(fwd, sizeof(void *));
>  	}
>  	vsnprintf(buff, MAX_MSG_SIZE, fmt, ap);
> -	len = ALIGN(strlen(buff) * sizeof(char) + 1, sizeof(void *));
> -
> +	len = ALIGN(sizeof(struct logmsg) + strlen(buff) * sizeof(char) + 1,
> +		    sizeof(void *));
>  	/* not enough space on tail : rewind */
> -	if (la->head <= la->tail &&
> -	    (len + sizeof(struct logmsg)) > (la->end - la->tail)) {
> +	if (la->head <= la->tail && len > (la->end - la->tail)) {
>  		logdbg(stderr, "enqueue: rewind tail to %p\n", la->tail);
>  		la->tail = la->start;
> +		if (la->empty)
> +			la->head = la->start;
>  	}
>  
>  	/* not enough space on head : drop msg */
> -	if (la->head > la->tail &&
> -	    (len + sizeof(struct logmsg)) > (la->head - la->tail)) {
> +	if (la->head > la->tail && len >= (la->head - la->tail)) {
>  		logdbg(stderr, "enqueue: log area overrun, drop msg\n");
>  
>  		if (!la->empty)
> @@ -153,7 +153,7 @@ int log_dequeue (void * buff)
>  
>  	if (la->empty)
>  		return 1;
> -	
> +
>  	int len = strlen((char *)&src->str) * sizeof(char) +
>  		  sizeof(struct logmsg) + 1;
>  

> --
> dm-devel mailing list
> dm-devel redhat com
> https://www.redhat.com/mailman/listinfo/dm-devel


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]