9p: implement proper trans module refcounting and unregistration
9p trans modules aren't refcounted nor were they unregistered properly. Fix it. * Add 9p_trans_module->owner and reference the module on each trans instance creation and put it on destruction. * Protect v9fs_trans_list with a spinlock. This isn't strictly necessary as the list is manipulated only during module loading / unloading but it's a good idea to make the API safe. * Unregister trans modules when the corresponding module is being unloaded. * While at it, kill unnecessary EXPORT_SYMBOL on p9_trans_fd_init(). Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
This commit is contained in:
committed by
Eric Van Hensbergen
parent
72d31053f6
commit
72029fe85d
@ -596,4 +596,5 @@ int p9_idpool_check(int id, struct p9_idpool *p);
|
||||
int p9_error_init(void);
|
||||
int p9_errstr2errno(char *, int);
|
||||
int p9_trans_fd_init(void);
|
||||
void p9_trans_fd_exit(void);
|
||||
#endif /* NET_9P_H */
|
||||
|
@ -26,6 +26,8 @@
|
||||
#ifndef NET_9P_TRANSPORT_H
|
||||
#define NET_9P_TRANSPORT_H
|
||||
|
||||
#include <linux/module.h>
|
||||
|
||||
/**
|
||||
* enum p9_trans_status - different states of underlying transports
|
||||
* @Connected: transport is connected and healthy
|
||||
@ -91,9 +93,12 @@ struct p9_trans_module {
|
||||
int maxsize; /* max message size of transport */
|
||||
int def; /* this transport should be default */
|
||||
struct p9_trans * (*create)(const char *, char *, int, unsigned char);
|
||||
struct module *owner;
|
||||
};
|
||||
|
||||
void v9fs_register_trans(struct p9_trans_module *m);
|
||||
struct p9_trans_module *v9fs_match_trans(const substring_t *name);
|
||||
struct p9_trans_module *v9fs_default_trans(void);
|
||||
void v9fs_unregister_trans(struct p9_trans_module *m);
|
||||
struct p9_trans_module *v9fs_get_trans_by_name(const substring_t *name);
|
||||
struct p9_trans_module *v9fs_get_default_trans(void);
|
||||
void v9fs_put_trans(struct p9_trans_module *m);
|
||||
#endif /* NET_9P_TRANSPORT_H */
|
||||
|
Reference in New Issue
Block a user