Loading drivers/md/md.c +2 −3 Original line number Original line Diff line number Diff line Loading @@ -816,6 +816,8 @@ void md_rdev_clear(struct md_rdev *rdev) put_page(rdev->bb_page); put_page(rdev->bb_page); rdev->bb_page = NULL; rdev->bb_page = NULL; } } kfree(rdev->badblocks.page); rdev->badblocks.page = NULL; } } EXPORT_SYMBOL_GPL(md_rdev_clear); EXPORT_SYMBOL_GPL(md_rdev_clear); Loading Loading @@ -2191,9 +2193,7 @@ static void unbind_rdev_from_array(struct md_rdev * rdev) sysfs_remove_link(&rdev->kobj, "block"); sysfs_remove_link(&rdev->kobj, "block"); sysfs_put(rdev->sysfs_state); sysfs_put(rdev->sysfs_state); rdev->sysfs_state = NULL; rdev->sysfs_state = NULL; kfree(rdev->badblocks.page); rdev->badblocks.count = 0; rdev->badblocks.count = 0; rdev->badblocks.page = NULL; /* We need to delay this, otherwise we can deadlock when /* We need to delay this, otherwise we can deadlock when * writing to 'remove' to "dev/state". We also need * writing to 'remove' to "dev/state". We also need * to delay it due to rcu usage. * to delay it due to rcu usage. Loading Loading @@ -3325,7 +3325,6 @@ static struct md_rdev *md_import_device(dev_t newdev, int super_format, int supe if (rdev->bdev) if (rdev->bdev) unlock_rdev(rdev); unlock_rdev(rdev); md_rdev_clear(rdev); md_rdev_clear(rdev); kfree(rdev->badblocks.page); kfree(rdev); kfree(rdev); return ERR_PTR(err); return ERR_PTR(err); } } Loading Loading
drivers/md/md.c +2 −3 Original line number Original line Diff line number Diff line Loading @@ -816,6 +816,8 @@ void md_rdev_clear(struct md_rdev *rdev) put_page(rdev->bb_page); put_page(rdev->bb_page); rdev->bb_page = NULL; rdev->bb_page = NULL; } } kfree(rdev->badblocks.page); rdev->badblocks.page = NULL; } } EXPORT_SYMBOL_GPL(md_rdev_clear); EXPORT_SYMBOL_GPL(md_rdev_clear); Loading Loading @@ -2191,9 +2193,7 @@ static void unbind_rdev_from_array(struct md_rdev * rdev) sysfs_remove_link(&rdev->kobj, "block"); sysfs_remove_link(&rdev->kobj, "block"); sysfs_put(rdev->sysfs_state); sysfs_put(rdev->sysfs_state); rdev->sysfs_state = NULL; rdev->sysfs_state = NULL; kfree(rdev->badblocks.page); rdev->badblocks.count = 0; rdev->badblocks.count = 0; rdev->badblocks.page = NULL; /* We need to delay this, otherwise we can deadlock when /* We need to delay this, otherwise we can deadlock when * writing to 'remove' to "dev/state". We also need * writing to 'remove' to "dev/state". We also need * to delay it due to rcu usage. * to delay it due to rcu usage. Loading Loading @@ -3325,7 +3325,6 @@ static struct md_rdev *md_import_device(dev_t newdev, int super_format, int supe if (rdev->bdev) if (rdev->bdev) unlock_rdev(rdev); unlock_rdev(rdev); md_rdev_clear(rdev); md_rdev_clear(rdev); kfree(rdev->badblocks.page); kfree(rdev); kfree(rdev); return ERR_PTR(err); return ERR_PTR(err); } } Loading