Lines Matching full:share

34 static void kill_share(struct ksmbd_share_config *share)  in kill_share()  argument
36 while (!list_empty(&share->veto_list)) { in kill_share()
39 p = list_entry(share->veto_list.next, in kill_share()
47 if (share->path) in kill_share()
48 path_put(&share->vfs_path); in kill_share()
49 kfree(share->name); in kill_share()
50 kfree(share->path); in kill_share()
51 kfree(share); in kill_share()
54 void __ksmbd_share_config_put(struct ksmbd_share_config *share) in __ksmbd_share_config_put() argument
57 hash_del(&share->hlist); in __ksmbd_share_config_put()
60 kill_share(share); in __ksmbd_share_config_put()
64 __get_share_config(struct ksmbd_share_config *share) in __get_share_config() argument
66 if (!atomic_inc_not_zero(&share->refcount)) in __get_share_config()
68 return share; in __get_share_config()
73 struct ksmbd_share_config *share; in __share_lookup() local
76 hash_for_each_possible(shares_table, share, hlist, key) { in __share_lookup()
77 if (!strcmp(name, share->name)) in __share_lookup()
78 return share; in __share_lookup()
83 static int parse_veto_list(struct ksmbd_share_config *share, in parse_veto_list() argument
109 list_add(&p->list, &share->veto_list); in parse_veto_list()
121 struct ksmbd_share_config *share = NULL; in share_config_request() local
132 share = kzalloc(sizeof(struct ksmbd_share_config), GFP_KERNEL); in share_config_request()
133 if (!share) in share_config_request()
136 share->flags = resp->flags; in share_config_request()
137 atomic_set(&share->refcount, 1); in share_config_request()
138 INIT_LIST_HEAD(&share->veto_list); in share_config_request()
139 share->name = kstrdup(name, GFP_KERNEL); in share_config_request()
141 if (!test_share_config_flag(share, KSMBD_SHARE_FLAG_PIPE)) { in share_config_request()
142 share->path = kstrdup(ksmbd_share_config_path(resp), in share_config_request()
144 if (share->path) in share_config_request()
145 share->path_sz = strlen(share->path); in share_config_request()
146 share->create_mask = resp->create_mask; in share_config_request()
147 share->directory_mask = resp->directory_mask; in share_config_request()
148 share->force_create_mode = resp->force_create_mode; in share_config_request()
149 share->force_directory_mode = resp->force_directory_mode; in share_config_request()
150 share->force_uid = resp->force_uid; in share_config_request()
151 share->force_gid = resp->force_gid; in share_config_request()
152 ret = parse_veto_list(share, in share_config_request()
155 if (!ret && share->path) { in share_config_request()
156 ret = kern_path(share->path, 0, &share->vfs_path); in share_config_request()
159 share->path); in share_config_request()
161 kfree(share->path); in share_config_request()
162 share->path = NULL; in share_config_request()
165 if (ret || !share->name) { in share_config_request()
166 kill_share(share); in share_config_request()
167 share = NULL; in share_config_request()
177 hash_add(shares_table, &share->hlist, share_name_hash(name)); in share_config_request()
179 kill_share(share); in share_config_request()
180 share = lookup; in share_config_request()
186 return share; in share_config_request()
199 struct ksmbd_share_config *share; in ksmbd_share_config_get() local
204 share = __share_lookup(name); in ksmbd_share_config_get()
205 if (share) in ksmbd_share_config_get()
206 share = __get_share_config(share); in ksmbd_share_config_get()
209 if (share) in ksmbd_share_config_get()
210 return share; in ksmbd_share_config_get()
214 bool ksmbd_share_veto_filename(struct ksmbd_share_config *share, in ksmbd_share_veto_filename() argument
219 list_for_each_entry(p, &share->veto_list, list) { in ksmbd_share_veto_filename()
228 struct ksmbd_share_config *share; in ksmbd_share_configs_cleanup() local
233 hash_for_each_safe(shares_table, i, tmp, share, hlist) { in ksmbd_share_configs_cleanup()
234 hash_del(&share->hlist); in ksmbd_share_configs_cleanup()
235 kill_share(share); in ksmbd_share_configs_cleanup()