Re: [PATCH] fix hang when BLKTRACESETUP fails and "-o -" is used

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

 



On 6/6/24 6:32 AM, Jeff Moyer wrote:
> Hi, Eric,
> 
> This looks like a repost?  I mentioned that we should also set done = 1
> for a failed setup_tracer_devpaths() call, and I was hoping you'd
> include that in a new version (or at least comment on whether you
> thought it was a good idea).  Sorry if that wasn't clear!

The first one was a question, this one was a patch :)

I'm sorry, I have not had time to look into or test for failed
setup_tracer_devpaths() calls, and hoped to just fix the bug
I had encountered.
 
> The change here looks good to me.

Thanks,
-Eric

> -Jeff
> 
> Eric Sandeen <sandeen@xxxxxxxxxx> writes:
> 
>> # blktrace -o - /dev/sda /dev/sdb /dev/sdc
>>
>> has to be SIGKILLed if BLKTRACESETUP fails for any or all of the devices
>> listed. (I simulated this by just catching one of the devices in
>> setup_buts(), skipping the ioctl, and doing ret++).
>>
>> This seems to be because with "-o -" on the command line, use_tracer_devpaths()
>> sees piped_output set, so we call process_trace_bufs which ends up waiting on
>> (!done) and "done" is never set. i.e.
>>
>> atexit(exit_tracing)
>> 	wait_tracers
>> 		if (use_tracer_devpaths()) // true because "-o -"
>> 			process_trace_bufs
>> 				while (wait_empty_entries())
>> 					wait_empty_entries
>> 						while (!done ... )
>> 							<loop forever>
>>
>> I think this can be avoided by just setting "done = 1" before returning
>> when setup_buts() fails in run_tracers().
>>
>> Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
>> ---
>>
>> diff --git a/blktrace.c b/blktrace.c
>> index 3444fbb..038b2cb 100644
>> --- a/blktrace.c
>> +++ b/blktrace.c
>> @@ -2684,8 +2684,10 @@ static int run_tracers(void)
>>  	if (net_mode == Net_client)
>>  		printf("blktrace: connecting to %s\n", hostname);
>>  
>> -	if (setup_buts())
>> +	if (setup_buts()) {
>> +		done = 1;
>>  		return 1;
>> +	}
>>  
>>  	if (use_tracer_devpaths()) {
>>  		if (setup_tracer_devpaths())
> 
> 





[Index of Archives]     [Netdev]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux