Whamcloud - gitweb
LU-13511 obdclass: don't initialize obj for zero FID 92/39792/2
authorLai Siyao <lai.siyao@whamcloud.com>
Sun, 30 Aug 2020 16:59:40 +0000 (00:59 +0800)
committerOleg Drokin <green@whamcloud.com>
Fri, 2 Oct 2020 00:19:02 +0000 (00:19 +0000)
Object with zero FID is used in stripe allocation, and it's
meaningless to initialize such object via lu_object_find_at(),
return error early to avoid assertion in lu_object_put().

Signed-off-by: Lai Siyao <lai.siyao@whamcloud.com>
Change-Id: Ia1bda3d01ff7552e94f31a9c928868652937d559
Reviewed-on: https://review.whamcloud.com/39792
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Stephane Thiell <sthiell@stanford.edu>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/obdclass/lu_object.c

index dce91d5..e174dfa 100644 (file)
@@ -815,6 +815,13 @@ struct lu_object *lu_object_find_at(const struct lu_env *env,
 
        ENTRY;
 
+       /* FID is from disk or network, zero FID is meaningless, return error
+        * early to avoid assertion in lu_object_put. If a zero FID is wanted,
+        * it should be allocated via lu_object_anon().
+        */
+       if (fid_is_zero(f))
+               RETURN(ERR_PTR(-EINVAL));
+
        /*
         * This uses standard index maintenance protocol:
         *