Re: [PATCH] cachefiles: Explicitly cast enumerated type in put_object

From: Nick Desaulniers
Date: Mon Sep 24 2018 - 18:17:37 EST


On Mon, Sep 24, 2018 at 10:33 AM Nathan Chancellor
<natechancellor@xxxxxxxxx> wrote:
>
> Clang warns when one enumerated type is implicitly converted to another.
>
> fs/cachefiles/namei.c:247:50: warning: implicit conversion from
> enumeration type 'enum cachefiles_obj_ref_trace' to different
> enumeration type 'enum fscache_obj_ref_trace' [-Wenum-conversion]
> cache->cache.ops->put_object(&xobject->fscache,
> cachefiles_obj_put_wait_retry);

That's an interesting pattern; cachefiles_obj_ref_trace's first
enumeration's value is set to the final enumeration's value in
fscache_obj_ref_trace. This fix is ok to me; though I would ask the
maintainer consider just merging the enums into one (unless there are
more than one other enums doing the same pattern (which doesn't seem
to be the case)). Thanks for the patch.
Reviewed-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx>

>
> Silence this warning by explicitly casting to fscache_obj_ref_trace,
> which is also done in put_object.
>
> Reported-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx>
> Signed-off-by: Nathan Chancellor <natechancellor@xxxxxxxxx>
> ---
> fs/cachefiles/namei.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c
> index af2b17b21b94..15e5988a83de 100644
> --- a/fs/cachefiles/namei.c
> +++ b/fs/cachefiles/namei.c
> @@ -244,11 +244,13 @@ static int cachefiles_mark_object_active(struct cachefiles_cache *cache,
>
> ASSERT(!test_bit(CACHEFILES_OBJECT_ACTIVE, &xobject->flags));
>
> - cache->cache.ops->put_object(&xobject->fscache, cachefiles_obj_put_wait_retry);
> + cache->cache.ops->put_object(&xobject->fscache,
> + (enum fscache_obj_ref_trace)cachefiles_obj_put_wait_retry);
> goto try_again;
>
> requeue:
> - cache->cache.ops->put_object(&xobject->fscache, cachefiles_obj_put_wait_timeo);
> + cache->cache.ops->put_object(&xobject->fscache,
> + (enum fscache_obj_ref_trace)cachefiles_obj_put_wait_timeo);
> _leave(" = -ETIMEDOUT");
> return -ETIMEDOUT;
> }
> --
> 2.19.0
>


--
Thanks,
~Nick Desaulniers