Lines Matching refs:share

36 static void kill_share(struct ksmbd_share_config *share)  in kill_share()  argument
38 while (!list_empty(&share->veto_list)) { in kill_share()
41 p = list_entry(share->veto_list.next, in kill_share()
49 if (share->path) in kill_share()
50 path_put(&share->vfs_path); in kill_share()
51 kfree(share->name); in kill_share()
52 kfree(share->path); in kill_share()
53 kfree(share); in kill_share()
56 void ksmbd_share_config_del(struct ksmbd_share_config *share) in ksmbd_share_config_del() argument
59 hash_del(&share->hlist); in ksmbd_share_config_del()
63 void __ksmbd_share_config_put(struct ksmbd_share_config *share) in __ksmbd_share_config_put() argument
65 ksmbd_share_config_del(share); in __ksmbd_share_config_put()
66 kill_share(share); in __ksmbd_share_config_put()
70 __get_share_config(struct ksmbd_share_config *share) in __get_share_config() argument
72 if (!atomic_inc_not_zero(&share->refcount)) in __get_share_config()
74 return share; in __get_share_config()
79 struct ksmbd_share_config *share; in __share_lookup() local
82 hash_for_each_possible(shares_table, share, hlist, key) { in __share_lookup()
83 if (!strcmp(name, share->name)) in __share_lookup()
84 return share; in __share_lookup()
89 static int parse_veto_list(struct ksmbd_share_config *share, in parse_veto_list() argument
115 list_add(&p->list, &share->veto_list); in parse_veto_list()
128 struct ksmbd_share_config *share = NULL; in share_config_request() local
153 share = kzalloc(sizeof(struct ksmbd_share_config), GFP_KERNEL); in share_config_request()
154 if (!share) in share_config_request()
157 share->flags = resp->flags; in share_config_request()
158 atomic_set(&share->refcount, 1); in share_config_request()
159 INIT_LIST_HEAD(&share->veto_list); in share_config_request()
160 share->name = kstrdup(name, GFP_KERNEL); in share_config_request()
162 if (!test_share_config_flag(share, KSMBD_SHARE_FLAG_PIPE)) { in share_config_request()
168 share->path = kstrndup(ksmbd_share_config_path(resp), path_len, in share_config_request()
170 if (share->path) { in share_config_request()
171 share->path_sz = strlen(share->path); in share_config_request()
172 while (share->path_sz > 1 && in share_config_request()
173 share->path[share->path_sz - 1] == '/') in share_config_request()
174 share->path[--share->path_sz] = '\0'; in share_config_request()
176 share->create_mask = resp->create_mask; in share_config_request()
177 share->directory_mask = resp->directory_mask; in share_config_request()
178 share->force_create_mode = resp->force_create_mode; in share_config_request()
179 share->force_directory_mode = resp->force_directory_mode; in share_config_request()
180 share->force_uid = resp->force_uid; in share_config_request()
181 share->force_gid = resp->force_gid; in share_config_request()
182 ret = parse_veto_list(share, in share_config_request()
185 if (!ret && share->path) { in share_config_request()
186 if (__ksmbd_override_fsids(work, share)) { in share_config_request()
187 kill_share(share); in share_config_request()
188 share = NULL; in share_config_request()
192 ret = kern_path(share->path, 0, &share->vfs_path); in share_config_request()
196 share->path); in share_config_request()
198 kfree(share->path); in share_config_request()
199 share->path = NULL; in share_config_request()
202 if (ret || !share->name) { in share_config_request()
203 kill_share(share); in share_config_request()
204 share = NULL; in share_config_request()
214 hash_add(shares_table, &share->hlist, share_name_hash(name)); in share_config_request()
216 kill_share(share); in share_config_request()
217 share = lookup; in share_config_request()
223 return share; in share_config_request()
229 struct ksmbd_share_config *share; in ksmbd_share_config_get() local
232 share = __share_lookup(name); in ksmbd_share_config_get()
233 if (share) in ksmbd_share_config_get()
234 share = __get_share_config(share); in ksmbd_share_config_get()
237 if (share) in ksmbd_share_config_get()
238 return share; in ksmbd_share_config_get()
242 bool ksmbd_share_veto_filename(struct ksmbd_share_config *share, in ksmbd_share_veto_filename() argument
247 list_for_each_entry(p, &share->veto_list, list) { in ksmbd_share_veto_filename()