It seems to me there is a memory leak in the implementation of gb_svc_create().
In the error handling path (labeled as err_put_device) the code
correctly puts svc->dev, but I am suspicious that svc->wq is leaking.
The allocated svc->wq needs a release via destroy_workqueue() in the
error handling path. Am I missing something?