Lines Matching refs:session

122 	struct luo_session *session = kzalloc(sizeof(*session), GFP_KERNEL);  in luo_session_alloc()  local
124 if (!session) in luo_session_alloc()
127 strscpy(session->name, name, sizeof(session->name)); in luo_session_alloc()
128 INIT_LIST_HEAD(&session->file_set.files_list); in luo_session_alloc()
129 luo_file_set_init(&session->file_set); in luo_session_alloc()
130 INIT_LIST_HEAD(&session->list); in luo_session_alloc()
131 mutex_init(&session->mutex); in luo_session_alloc()
133 return session; in luo_session_alloc()
136 static void luo_session_free(struct luo_session *session) in luo_session_free() argument
138 luo_file_set_destroy(&session->file_set); in luo_session_free()
139 mutex_destroy(&session->mutex); in luo_session_free()
140 kfree(session); in luo_session_free()
144 struct luo_session *session) in luo_session_insert() argument
166 if (!strncmp(it->name, session->name, sizeof(it->name))) in luo_session_insert()
169 list_add_tail(&session->list, &sh->list); in luo_session_insert()
176 struct luo_session *session) in luo_session_remove() argument
179 list_del(&session->list); in luo_session_remove()
183 static int luo_session_finish_one(struct luo_session *session) in luo_session_finish_one() argument
185 guard(mutex)(&session->mutex); in luo_session_finish_one()
186 return luo_file_finish(&session->file_set); in luo_session_finish_one()
189 static void luo_session_unfreeze_one(struct luo_session *session, in luo_session_unfreeze_one() argument
192 guard(mutex)(&session->mutex); in luo_session_unfreeze_one()
193 luo_file_unfreeze(&session->file_set, &ser->file_set_ser); in luo_session_unfreeze_one()
196 static int luo_session_freeze_one(struct luo_session *session, in luo_session_freeze_one() argument
199 guard(mutex)(&session->mutex); in luo_session_freeze_one()
200 return luo_file_freeze(&session->file_set, &ser->file_set_ser); in luo_session_freeze_one()
205 struct luo_session *session = filep->private_data; in luo_session_release() local
209 if (session->retrieved) { in luo_session_release()
210 int err = luo_session_finish_one(session); in luo_session_release()
214 session->name); in luo_session_release()
219 scoped_guard(mutex, &session->mutex) in luo_session_release()
220 luo_file_unpreserve_files(&session->file_set); in luo_session_release()
224 luo_session_remove(sh, session); in luo_session_release()
225 luo_session_free(session); in luo_session_release()
230 static int luo_session_preserve_fd(struct luo_session *session, in luo_session_preserve_fd() argument
236 guard(mutex)(&session->mutex); in luo_session_preserve_fd()
237 err = luo_preserve_file(&session->file_set, argp->token, argp->fd); in luo_session_preserve_fd()
248 static int luo_session_retrieve_fd(struct luo_session *session, in luo_session_retrieve_fd() argument
259 guard(mutex)(&session->mutex); in luo_session_retrieve_fd()
260 err = luo_retrieve_file(&session->file_set, argp->token, &file); in luo_session_retrieve_fd()
280 static int luo_session_finish(struct luo_session *session, in luo_session_finish() argument
284 int err = luo_session_finish_one(session); in luo_session_finish()
302 int (*execute)(struct luo_session *session, struct luo_ucmd *ucmd);
327 struct luo_session *session = filep->private_data; in luo_session_ioctl() local
357 return op->execute(session, &ucmd); in luo_session_ioctl()
367 static int luo_session_getfile(struct luo_session *session, struct file **filep) in luo_session_getfile() argument
372 lockdep_assert_held(&session->mutex); in luo_session_getfile()
373 snprintf(name_buf, sizeof(name_buf), "[luo_session] %s", session->name); in luo_session_getfile()
374 file = anon_inode_getfile(name_buf, &luo_session_fops, session, O_RDWR); in luo_session_getfile()
385 struct luo_session *session; in luo_session_create() local
388 session = luo_session_alloc(name); in luo_session_create()
389 if (IS_ERR(session)) in luo_session_create()
390 return PTR_ERR(session); in luo_session_create()
392 err = luo_session_insert(&luo_session_global.outgoing, session); in luo_session_create()
396 scoped_guard(mutex, &session->mutex) in luo_session_create()
397 err = luo_session_getfile(session, filep); in luo_session_create()
404 luo_session_remove(&luo_session_global.outgoing, session); in luo_session_create()
406 luo_session_free(session); in luo_session_create()
414 struct luo_session *session = NULL; in luo_session_retrieve() local
421 session = it; in luo_session_retrieve()
427 if (!session) in luo_session_retrieve()
430 guard(mutex)(&session->mutex); in luo_session_retrieve()
431 if (session->retrieved) in luo_session_retrieve()
434 err = luo_session_getfile(session, filep); in luo_session_retrieve()
436 session->retrieved = true; in luo_session_retrieve()
543 struct luo_session *session; in luo_session_deserialize() local
545 session = luo_session_alloc(sh->ser[i].name); in luo_session_deserialize()
546 if (IS_ERR(session)) { in luo_session_deserialize()
548 sh->ser[i].name, session); in luo_session_deserialize()
549 return PTR_ERR(session); in luo_session_deserialize()
552 err = luo_session_insert(sh, session); in luo_session_deserialize()
555 session->name, ERR_PTR(err)); in luo_session_deserialize()
556 luo_session_free(session); in luo_session_deserialize()
560 scoped_guard(mutex, &session->mutex) { in luo_session_deserialize()
561 luo_file_deserialize(&session->file_set, in luo_session_deserialize()
576 struct luo_session *session; in luo_session_serialize() local
581 list_for_each_entry(session, &sh->list, list) { in luo_session_serialize()
582 err = luo_session_freeze_one(session, &sh->ser[i]); in luo_session_serialize()
586 strscpy(sh->ser[i].name, session->name, in luo_session_serialize()
595 list_for_each_entry_continue_reverse(session, &sh->list, list) { in luo_session_serialize()
597 luo_session_unfreeze_one(session, &sh->ser[i]); in luo_session_serialize()