On Tue, 2019-04-23 at 22:32 +0800, Muchun Song wrote: > There is a race condition between removing glue directory and adding a new > device under the glue directory. It can be reproduced in following test: >
.../... > In order to avoid this happening, we we should not call kobject_del() on > path2 when the reference count of glue_dir is greater than 1. So we add a > conditional statement to fix it. Good catch ! However I'm not completely happy about the fix you propose. I find relying on the object count for such decisions rather fragile as it could be taken temporarily for other reasons, couldn't it ? In which case we would just fail... Ideally, the looking up of the glue dir and creation of its child should be protected by the same lock instance (the gdp_mutex in that case). That might require a bit of shuffling around though. Greg, thoughts ? This whole gluedir business is annoyingly racy still. My gut feeling is that the "right fix" is to ensure the lookup of the glue dir and creation of the child object(s) are done under a single instance of gdp_mutex so we never see a stale "empty" but still poentially used glue dir around. This should also be true when creating such gluedir in the first place in fact, though that race is a lot harder to hit. Cheers, Ben.