On Mon, Sep 12, 2016 at 09:09:48PM +0200, Christophe JAILLET wrote:
Hi,Hi Christophe,
I'm puzzled by commit f9a67b1182e5 ("md/bitmap: clear bitmap if
bitmap_create failed").
Thank you very much to help check this!
Part of the commit is:
@@ -1865,8 +1866,10 @@ int bitmap_copy_from_slot(struct mddev *mddev, int
slot,
struct bitmap_counts *counts;
struct bitmap *bitmap = bitmap_create(mddev, slot);
- if (IS_ERR(bitmap))
+ if (IS_ERR(bitmap)) {
+ bitmap_free(bitmap);
return PTR_ERR(bitmap);
+ }
but if 'bitmap' is an error, I think that bad things will happen in
'bitmap_free()' when, at the beginning of the function, we will execute:
if (bitmap->sysfs_can_clear) <-----------------
sysfs_put(bitmap->sysfs_can_clear);
Add Guoqing.
Yeah, you are right, this bitmap_free isn't required. This must be something
slip in in the v2 patch. I'll delete that line.
However, the commit log message is really explicit and adding this call tothis log is a little confusing, I thought it really means the bitmap_free called
'bitmap_free' has really been done one purpose. ("If bitmap_create returns
an error, we need to call either bitmap_destroy or bitmap_free to do clean
up, ...")
in bitmap_create. The V1 patch calls bitmap_destroy in bitmap_create.