[Gluster-devel] crypt xlator bug

Pranith Kumar Karampuri pkarampu at redhat.com
Thu Apr 2 07:30:55 UTC 2015


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
>         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 *
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.gluster.org/pipermail/gluster-devel/attachments/20150402/02830a0a/attachment-0001.html>


More information about the Gluster-devel mailing list