Whamcloud - gitweb
LU-13511 obdclass: don't initialize obj for zero FID 04/40304/2
authorLai Siyao <lai.siyao@whamcloud.com>
Mon, 19 Oct 2020 19:09:45 +0000 (12:09 -0700)
committerOleg Drokin <green@whamcloud.com>
Thu, 29 Oct 2020 07:49:47 +0000 (07:49 +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().

Lustre-commit: 22ea9767956c89aa08ef6d80ad04aaccde647755
Lustre-change: https://review.whamcloud.com/39792

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

index 05498b8..3fdb95a 100644 (file)
@@ -729,6 +729,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:
         *