* Potential leaks & errors on current trunk
@ 2015-02-17 15:00 Erwan Velu
2015-02-18 18:36 ` Jens Axboe
0 siblings, 1 reply; 6+ messages in thread
From: Erwan Velu @ 2015-02-17 15:00 UTC (permalink / raw)
To: fio
I've been playing with clang 3.3 on
495288a1e627c3d1b29897786b786eb6008841a3 and found the following items
interesting.
Before making any PR, I'd like your insights on them.
http://git.kernel.dk/?p=fio.git;a=blob;f=filesetup.c;h=0fb5589b7c33ce1aa154c21ecf42cf52a682c4d8;hb=HEAD#l424
On that part of the code, it's not clear for me if we want to return ret
or always 0.
So we have to remove ret=0 _or_ change to return ret;
As some code is considering that __file_invalidate_cache can be
different from 0, I think it's the latter case.
http://git.kernel.dk/?p=fio.git;a=blob;f=client.c;h=760ec85087b73bba197c95b033154f08c245bc7f;hb=HEAD#l1572
We have an issue on this dprint as it use eta that I've been freed in
fio_client_dec_jobs_eta().
So using dprint could lead to a very weird message print here.
Shall we keep that dprint which could be buggy ? If we still want it,
that would mean put extra variable to save the required info for
printing it.
http://git.kernel.dk/?p=fio.git;a=blob;f=iolog.c;h=99f8bc18d8694cca0c141c51d116aced1b4130f2;hb=HEAD#l863
In that function, if we do return 1 we do leak ic.buf, we shall free it
before the return
http://git.kernel.dk/?p=fio.git;a=blob;f=lib/axmap.c;h=164300f254014b10ed6e04e3e06b7263aa917aac;hb=HEAD#l127
Here, we surely miss the free of the axmap. We did free its internal
structure but not axmap itself.
Erwan Velu,
--
eNovance from Redhat
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Potential leaks & errors on current trunk
2015-02-17 15:00 Potential leaks & errors on current trunk Erwan Velu
@ 2015-02-18 18:36 ` Jens Axboe
2015-02-18 19:54 ` Andrey Kuzmin
2015-02-19 12:17 ` Erwan Velu
0 siblings, 2 replies; 6+ messages in thread
From: Jens Axboe @ 2015-02-18 18:36 UTC (permalink / raw)
To: Erwan Velu, fio
On 02/17/2015 07:00 AM, Erwan Velu wrote:
> I've been playing with clang 3.3 on
> 495288a1e627c3d1b29897786b786eb6008841a3 and found the following items
> interesting.
>
> Before making any PR, I'd like your insights on them.
>
> http://git.kernel.dk/?p=fio.git;a=blob;f=filesetup.c;h=0fb5589b7c33ce1aa154c21ecf42cf52a682c4d8;hb=HEAD#l424
>
> On that part of the code, it's not clear for me if we want to return ret
> or always 0.
> So we have to remove ret=0 _or_ change to return ret;
> As some code is considering that __file_invalidate_cache can be
> different from 0, I think it's the latter case.
We always want to return 0 here, as it's not a fatal error.
> http://git.kernel.dk/?p=fio.git;a=blob;f=client.c;h=760ec85087b73bba197c95b033154f08c245bc7f;hb=HEAD#l1572
>
> We have an issue on this dprint as it use eta that I've been freed in
> fio_client_dec_jobs_eta().
> So using dprint could lead to a very weird message print here.
> Shall we keep that dprint which could be buggy ? If we still want it,
> that would mean put extra variable to save the required info for
> printing it.
It's printing the pointer value, not the contents. So that's always
valid. It's just for debug tracking if you want to see eta's go through.
> http://git.kernel.dk/?p=fio.git;a=blob;f=iolog.c;h=99f8bc18d8694cca0c141c51d116aced1b4130f2;hb=HEAD#l863
>
> In that function, if we do return 1 we do leak ic.buf, we shall free it
> before the return
Yep, there's a potential leak or two there, should be fixed up.
> http://git.kernel.dk/?p=fio.git;a=blob;f=lib/axmap.c;h=164300f254014b10ed6e04e3e06b7263aa917aac;hb=HEAD#l127
>
> Here, we surely miss the free of the axmap. We did free its internal
> structure but not axmap itself.
Yes, that should free 'axmap' too of course.
--
Jens Axboe
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Potential leaks & errors on current trunk
2015-02-18 18:36 ` Jens Axboe
@ 2015-02-18 19:54 ` Andrey Kuzmin
2015-02-18 20:28 ` Jens Axboe
2015-02-19 12:17 ` Erwan Velu
1 sibling, 1 reply; 6+ messages in thread
From: Andrey Kuzmin @ 2015-02-18 19:54 UTC (permalink / raw)
To: Jens Axboe; +Cc: Erwan Velu, fio@vger.kernel.org
On a related issue, valgrind reports a couple of leaks of strdup'ed
memory. May be a bogus, as the code inspection shows respective free()
calls in place, but just in case.
Regards,
Andrey
==3639== HEAP SUMMARY:
==3639== in use at exit: 241 bytes in 7 blocks
==3639== total heap usage: 452 allocs, 445 frees, 2,238,768 bytes allocated
==3639==
==3639== 5 bytes in 1 blocks are definitely lost in loss record 4 of 7
==3639== at 0x4C2AB80: malloc (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==3639== by 0x5E163C9: strdup (strdup.c:42)
==3639== by 0x43055D: __handle_option (parse.c:662)
==3639== by 0x431087: handle_option (parse.c:885)
==3639== by 0x431EB3: fill_default_options (parse.c:1200)
==3639== by 0x41363F: fio_init_options (init.c:1679)
==3639== by 0x41369C: parse_options (init.c:2370)
==3639== by 0x40B8CC: main (fio.c:40)
==3639==
==3639== 8 bytes in 1 blocks are definitely lost in loss record 6 of 7
==3639== at 0x4C2AB80: malloc (in
/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==3639== by 0x5E163C9: strdup (strdup.c:42)
==3639== by 0x4355FD: fio_options_mem_dupe (options.c:4050)
==3639== by 0x40EB08: get_new_job (init.c:413)
==3639== by 0x4130DB: parse_cmd_line (init.c:2128)
==3639== by 0x4136E5: parse_options (init.c:2375)
==3639== by 0x40B8CC: main (fio.c:40)
==3639==
==3639== LEAK SUMMARY:
==3639== definitely lost: 13 bytes in 2 blocks
==3639== indirectly lost: 0 bytes in 0 blocks
==3639== possibly lost: 0 bytes in 0 blocks
==3639== still reachable: 228 bytes in 5 blocks
==3639== suppressed: 0 bytes in 0 blocks
==3639== Reachable blocks (those to which a pointer was found) are not shown.
==3639== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==3639==
==3639== For counts of detected and suppressed errors, rerun with: -v
==3639== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
Regards,
Andrey
On Wed, Feb 18, 2015 at 9:36 PM, Jens Axboe <axboe@kernel.dk> wrote:
> On 02/17/2015 07:00 AM, Erwan Velu wrote:
>>
>> I've been playing with clang 3.3 on
>> 495288a1e627c3d1b29897786b786eb6008841a3 and found the following items
>> interesting.
>>
>> Before making any PR, I'd like your insights on them.
>>
>>
>> http://git.kernel.dk/?p=fio.git;a=blob;f=filesetup.c;h=0fb5589b7c33ce1aa154c21ecf42cf52a682c4d8;hb=HEAD#l424
>>
>> On that part of the code, it's not clear for me if we want to return ret
>> or always 0.
>> So we have to remove ret=0 _or_ change to return ret;
>> As some code is considering that __file_invalidate_cache can be
>> different from 0, I think it's the latter case.
>
>
> We always want to return 0 here, as it's not a fatal error.
>
>>
>> http://git.kernel.dk/?p=fio.git;a=blob;f=client.c;h=760ec85087b73bba197c95b033154f08c245bc7f;hb=HEAD#l1572
>>
>> We have an issue on this dprint as it use eta that I've been freed in
>> fio_client_dec_jobs_eta().
>> So using dprint could lead to a very weird message print here.
>> Shall we keep that dprint which could be buggy ? If we still want it,
>> that would mean put extra variable to save the required info for
>> printing it.
>
>
> It's printing the pointer value, not the contents. So that's always valid.
> It's just for debug tracking if you want to see eta's go through.
>
>>
>> http://git.kernel.dk/?p=fio.git;a=blob;f=iolog.c;h=99f8bc18d8694cca0c141c51d116aced1b4130f2;hb=HEAD#l863
>>
>> In that function, if we do return 1 we do leak ic.buf, we shall free it
>> before the return
>
>
> Yep, there's a potential leak or two there, should be fixed up.
>
>>
>> http://git.kernel.dk/?p=fio.git;a=blob;f=lib/axmap.c;h=164300f254014b10ed6e04e3e06b7263aa917aac;hb=HEAD#l127
>>
>> Here, we surely miss the free of the axmap. We did free its internal
>> structure but not axmap itself.
>
>
> Yes, that should free 'axmap' too of course.
>
> --
> Jens Axboe
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe fio" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Potential leaks & errors on current trunk
2015-02-18 19:54 ` Andrey Kuzmin
@ 2015-02-18 20:28 ` Jens Axboe
0 siblings, 0 replies; 6+ messages in thread
From: Jens Axboe @ 2015-02-18 20:28 UTC (permalink / raw)
To: Andrey Kuzmin; +Cc: Erwan Velu, fio@vger.kernel.org
On 02/18/2015 11:54 AM, Andrey Kuzmin wrote:
> On a related issue, valgrind reports a couple of leaks of strdup'ed
> memory. May be a bogus, as the code inspection shows respective free()
> calls in place, but just in case.
>
> Regards,
> Andrey
>
> ==3639== HEAP SUMMARY:
> ==3639== in use at exit: 241 bytes in 7 blocks
> ==3639== total heap usage: 452 allocs, 445 frees, 2,238,768 bytes allocated
> ==3639==
> ==3639== 5 bytes in 1 blocks are definitely lost in loss record 4 of 7
> ==3639== at 0x4C2AB80: malloc (in
> /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==3639== by 0x5E163C9: strdup (strdup.c:42)
> ==3639== by 0x43055D: __handle_option (parse.c:662)
> ==3639== by 0x431087: handle_option (parse.c:885)
> ==3639== by 0x431EB3: fill_default_options (parse.c:1200)
> ==3639== by 0x41363F: fio_init_options (init.c:1679)
> ==3639== by 0x41369C: parse_options (init.c:2370)
> ==3639== by 0x40B8CC: main (fio.c:40)
> ==3639==
> ==3639== 8 bytes in 1 blocks are definitely lost in loss record 6 of 7
> ==3639== at 0x4C2AB80: malloc (in
> /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==3639== by 0x5E163C9: strdup (strdup.c:42)
> ==3639== by 0x4355FD: fio_options_mem_dupe (options.c:4050)
> ==3639== by 0x40EB08: get_new_job (init.c:413)
> ==3639== by 0x4130DB: parse_cmd_line (init.c:2128)
> ==3639== by 0x4136E5: parse_options (init.c:2375)
> ==3639== by 0x40B8CC: main (fio.c:40)
> ==3639==
> ==3639== LEAK SUMMARY:
> ==3639== definitely lost: 13 bytes in 2 blocks
> ==3639== indirectly lost: 0 bytes in 0 blocks
> ==3639== possibly lost: 0 bytes in 0 blocks
> ==3639== still reachable: 228 bytes in 5 blocks
> ==3639== suppressed: 0 bytes in 0 blocks
> ==3639== Reachable blocks (those to which a pointer was found) are not shown.
> ==3639== To see them, rerun with: --leak-check=full --show-leak-kinds=all
> ==3639==
> ==3639== For counts of detected and suppressed errors, rerun with: -v
> ==3639== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
I'm sure there are a few leaks. Usually it doesn't matter as fio exits,
but the ones that are valid leaks that hit the client/server backend,
those generally do want to get fixed up. It's a shame to have the fio
backend server leak memory, since it could potentially sit around for a
long time.
--
Jens Axboe
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Potential leaks & errors on current trunk
2015-02-18 18:36 ` Jens Axboe
2015-02-18 19:54 ` Andrey Kuzmin
@ 2015-02-19 12:17 ` Erwan Velu
2015-02-19 16:48 ` Jens Axboe
1 sibling, 1 reply; 6+ messages in thread
From: Erwan Velu @ 2015-02-19 12:17 UTC (permalink / raw)
To: Jens Axboe, fio
Le 18/02/2015 19:36, Jens Axboe a écrit :
>
>> http://git.kernel.dk/?p=fio.git;a=blob;f=iolog.c;h=99f8bc18d8694cca0c141c51d116aced1b4130f2;hb=HEAD#l863
>>
>>
>> In that function, if we do return 1 we do leak ic.buf, we shall free it
>> before the return
>
> Yep, there's a potential leak or two there, should be fixed up.
>
>> http://git.kernel.dk/?p=fio.git;a=blob;f=lib/axmap.c;h=164300f254014b10ed6e04e3e06b7263aa917aac;hb=HEAD#l127
>>
>>
>> Here, we surely miss the free of the axmap. We did free its internal
>> structure but not axmap itself.
>
> Yes, that should free 'axmap' too of course.
>
Hey Jens,
I don't know your workflow : do you accept pull request directly on github ?
At least, please find the two commits for that issues in my repo :
https://github.com/enovance/fio/tree/erwan/memory-leak
Cheers,
--
Erwan Velu
eNovance from Redhat
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: Potential leaks & errors on current trunk
2015-02-19 12:17 ` Erwan Velu
@ 2015-02-19 16:48 ` Jens Axboe
0 siblings, 0 replies; 6+ messages in thread
From: Jens Axboe @ 2015-02-19 16:48 UTC (permalink / raw)
To: Erwan Velu, fio
On 02/19/2015 04:17 AM, Erwan Velu wrote:
>
> Le 18/02/2015 19:36, Jens Axboe a écrit :
>>
>>> http://git.kernel.dk/?p=fio.git;a=blob;f=iolog.c;h=99f8bc18d8694cca0c141c51d116aced1b4130f2;hb=HEAD#l863
>>>
>>>
>>> In that function, if we do return 1 we do leak ic.buf, we shall free it
>>> before the return
>>
>> Yep, there's a potential leak or two there, should be fixed up.
>>
>>> http://git.kernel.dk/?p=fio.git;a=blob;f=lib/axmap.c;h=164300f254014b10ed6e04e3e06b7263aa917aac;hb=HEAD#l127
>>>
>>>
>>> Here, we surely miss the free of the axmap. We did free its internal
>>> structure but not axmap itself.
>>
>> Yes, that should free 'axmap' too of course.
>>
>
> Hey Jens,
>
> I don't know your workflow : do you accept pull request directly on
> github ?
I do, I'm pretty flexible that way.
> At least, please find the two commits for that issues in my repo :
> https://github.com/enovance/fio/tree/erwan/memory-leak
Thanks, applied. But I had to fix up your whitespace, you are using
spaces instead of tabs.
--
Jens Axboe
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-02-19 16:48 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-17 15:00 Potential leaks & errors on current trunk Erwan Velu
2015-02-18 18:36 ` Jens Axboe
2015-02-18 19:54 ` Andrey Kuzmin
2015-02-18 20:28 ` Jens Axboe
2015-02-19 12:17 ` Erwan Velu
2015-02-19 16:48 ` Jens Axboe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox