[Gluster-devel] crypt xlator bug
Raghavendra Bhat
rabhat at redhat.com
Thu Apr 2 08:28:39 UTC 2015
On Thursday 02 April 2015 01:00 PM, Pranith Kumar Karampuri wrote:
>
> On 04/02/2015 12:27 AM, Raghavendra Talur wrote:
>>
>>
>> On Wed, Apr 1, 2015 at 10:34 PM, Justin Clift <justin at gluster.org
>> <mailto:justin at gluster.org>> wrote:
>>
>> On 1 Apr 2015, at 10:57, Emmanuel Dreyfus <manu at netbsd.org
>> <mailto:manu at netbsd.org>> wrote:
>> > Hi
>> >
>> > crypt.t was recently broken in NetBSD regression. The glusterfs
>> returns
>> > a node with file type invalid to FUSE, and that breaks the test.
>> >
>> > After running a git bisect, I found the offending commit after
>> which
>> > this behavior appeared:
>> > 8a2e2b88fc21dc7879f838d18cd0413dd88023b7
>> > mem-pool: invalidate memory on GF_FREE to aid debugging
>> >
>> > This means the bug has always been there, but this debugging aid
>> > caused it to be reliable.
>>
>> Sounds like that commit is a good win then. :)
>>
>> Harsha/Pranith/Lala, your names are on the git blame for crypt.c...
>> any ideas? :)
>>
>>
>> I found one issue that local is not allocated using GF_CALLOC and
>> with a mem-type.
>> This is a patch which *might* fix it.
>>
>> diff --git a/xlators/encryption/crypt/src/crypt-mem-types.h
>> b/xlators/encryption/crypt/src/crypt-mem-types.h
>> index 2eab921..c417b67 100644
>> --- a/xlators/encryption/crypt/src/crypt-mem-types.h
>> +++ b/xlators/encryption/crypt/src/crypt-mem-types.h
>> @@ -24,6 +24,7 @@ enum gf_crypt_mem_types_ {
>> gf_crypt_mt_key,
>> gf_crypt_mt_iovec,
>> gf_crypt_mt_char,
>> + gf_crypt_mt_local,
>> gf_crypt_mt_end,
>> };
>> diff --git a/xlators/encryption/crypt/src/crypt.c
>> b/xlators/encryption/crypt/src/crypt.c
>> index ae8cdb2..63c0977 100644
>> --- a/xlators/encryption/crypt/src/crypt.c
>> +++ b/xlators/encryption/crypt/src/crypt.c
>> @@ -48,7 +48,7 @@ static crypt_local_t
>> *crypt_alloc_local(call_frame_t *frame, xlator_t *this,
>> {
>> crypt_local_t *local = NULL;
>> - local = mem_get0(this->local_pool);
>> + local = GF_CALLOC (sizeof (*local), 1, gf_crypt_mt_local);
> local is using the memory from pool earlier(i.e. with mem_get0()).
> Which seems ok to me. Changing it this way will include memory
> allocation in fop I/O path which is why xlators generally use the
> mem-pool approach.
>
> Pranith
I think, crypt xlator should do a mem_put of local after doing
STACK_UNWIND like other xlators which also use mem_get for local (such
as AFR). I am suspecting crypt not doing mem_put might be the reason for
the bug mentioned.
Regards,
Raghavendra Bat
>> if (!local) {
>> gf_log(this->name, GF_LOG_ERROR, "out of memory");
>> return NULL;
>>
>>
>> Niels should be able to recognize if this is sufficient fix or not.
>>
>> Thanks,
>> Raghavendra Talur
>>
>> + Justin
>>
>> --
>> GlusterFS - http://www.gluster.org
>>
>> An open source, distributed file system scaling to several
>> petabytes, and handling thousands of clients.
>>
>> My personal twitter: twitter.com/realjustinclift
>> <http://twitter.com/realjustinclift>
>>
>> _______________________________________________
>> Gluster-devel mailing list
>> Gluster-devel at gluster.org <mailto:Gluster-devel at gluster.org>
>> http://www.gluster.org/mailman/listinfo/gluster-devel
>>
>>
>>
>>
>> --
>> *Raghavendra Talur *
>>
>
>
>
> _______________________________________________
> Gluster-devel mailing list
> Gluster-devel at gluster.org
> http://www.gluster.org/mailman/listinfo/gluster-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gluster.org/pipermail/gluster-devel/attachments/20150402/3e756f0e/attachment.html>
More information about the Gluster-devel
mailing list