> 在 2018年3月2日,下午2:34,tang.jun...@zte.com.cn 写道:
> 
> From: Tang Junhui <tang.jun...@zte.com.cn>
> 
> Hello Chengguang
> 
>> When unloading bcache module there is lack of removing
>> operation for closure debug file, so it will cause
>> creating error when trying to reload module.
>> 
> 
> Yes, This issue is true. 
> Actually, the original code try to remove closure debug file
> by bch_debug_exit(), which remove all the debug file in
> bcache directory, and closure debug file is expected to be
> one debug file in bcache debug directory.
> 
> But currently code, closure_debug_init() is called to create
> closure debug file before the bcache debug crated in 
> bch_debug_init(), so closure debug file created outside
> the bcache directory, then when bch_debug_exit() being called,
> bcache diretory removed, but closure debug file didn't removed.
> 
> So the best way to resolve this issue is not remove the 
> closure debug file again, but to take the closure debug file
> under the bcache directory in debug sysfs.

Yes, that looks better, I’ll modify as your suggestion in v2. Thanks for your 
review.

> 
>> This fix introduces closure_debug_exit to handle removing
>> operation properly.
>> 
>> Signed-off-by: Chengguang Xu <cgxu...@icloud.com>
>> ---
>> drivers/md/bcache/closure.c | 5 +++++
>> drivers/md/bcache/closure.h | 2 ++
>> drivers/md/bcache/super.c   | 2 ++
>> 3 files changed, 9 insertions(+)
>> 
>> diff --git a/drivers/md/bcache/closure.c b/drivers/md/bcache/closure.c
>> index 7f12920..8fcd737 100644
>> --- a/drivers/md/bcache/closure.c
>> +++ b/drivers/md/bcache/closure.c
>> @@ -204,6 +204,11 @@ void __init closure_debug_init(void)
>>    debug = debugfs_create_file("closures", 0400, NULL, NULL, &debug_ops);
>> }
>> 
>> +void closure_debug_exit(void)
>> +{
>> +    debugfs_remove(debug);
>> +}
>> +
>> #endif
>> 
>> MODULE_AUTHOR("Kent Overstreet <koverstr...@google.com>");
>> diff --git a/drivers/md/bcache/closure.h b/drivers/md/bcache/closure.h
>> index 3b9dfc9..1aa0f7e 100644
>> --- a/drivers/md/bcache/closure.h
>> +++ b/drivers/md/bcache/closure.h
>> @@ -186,12 +186,14 @@ static inline void closure_sync(struct closure *cl)
>> #ifdef CONFIG_BCACHE_CLOSURES_DEBUG
>> 
>> void closure_debug_init(void);
>> +void closure_debug_exit(void);
>> void closure_debug_create(struct closure *cl);
>> void closure_debug_destroy(struct closure *cl);
>> 
>> #else
>> 
>> static inline void closure_debug_init(void) {}
>> +static inline void closure_debug_exit(void) {}
>> static inline void closure_debug_create(struct closure *cl) {}
>> static inline void closure_debug_destroy(struct closure *cl) {}
>> 
>> diff --git a/drivers/md/bcache/super.c b/drivers/md/bcache/super.c
>> index 1a9fdab..38e2e21 100644
>> --- a/drivers/md/bcache/super.c
>> +++ b/drivers/md/bcache/super.c
>> @@ -2118,6 +2118,7 @@ static void bcache_exit(void)
>>        destroy_workqueue(bcache_wq);
>>    if (bcache_major)
>>        unregister_blkdev(bcache_major, "bcache");
>> +    closure_debug_exit();
>>    unregister_reboot_notifier(&reboot);
>>    mutex_destroy(&bch_register_lock);
>> }
>> @@ -2137,6 +2138,7 @@ static int __init bcache_init(void)
>> 
>>    bcache_major = register_blkdev(0, "bcache");
>>    if (bcache_major < 0) {
>> +        closure_debug_exit();
>>        unregister_reboot_notifier(&reboot);
>>        mutex_destroy(&bch_register_lock);
>>        return bcache_major;
>> -- 
>> 1.8.3.1
> 
> Thanks
> Tang Junhui

Reply via email to