Lines Matching full:fiq
62 * - check the fiq pending list
78 struct fuse_iqueue *fiq = &fc->iq; in fuse_check_timeout() local
86 spin_lock(&fiq->lock); in fuse_check_timeout()
87 expired = fuse_request_expired(fc, &fiq->pending); in fuse_check_timeout()
88 spin_unlock(&fiq->lock); in fuse_check_timeout()
303 static u64 fuse_get_unique_locked(struct fuse_iqueue *fiq) in fuse_get_unique_locked() argument
305 fiq->reqctr += FUSE_REQ_ID_STEP; in fuse_get_unique_locked()
306 return fiq->reqctr; in fuse_get_unique_locked()
309 u64 fuse_get_unique(struct fuse_iqueue *fiq) in fuse_get_unique() argument
313 spin_lock(&fiq->lock); in fuse_get_unique()
314 ret = fuse_get_unique_locked(fiq); in fuse_get_unique()
315 spin_unlock(&fiq->lock); in fuse_get_unique()
328 * A new request is available, wake fiq->waitq
330 static void fuse_dev_wake_and_unlock(struct fuse_iqueue *fiq) in fuse_dev_wake_and_unlock() argument
331 __releases(fiq->lock) in fuse_dev_wake_and_unlock()
333 wake_up(&fiq->waitq); in fuse_dev_wake_and_unlock()
334 kill_fasync(&fiq->fasync, SIGIO, POLL_IN); in fuse_dev_wake_and_unlock()
335 spin_unlock(&fiq->lock); in fuse_dev_wake_and_unlock()
338 void fuse_dev_queue_forget(struct fuse_iqueue *fiq, in fuse_dev_queue_forget() argument
341 spin_lock(&fiq->lock); in fuse_dev_queue_forget()
342 if (fiq->connected) { in fuse_dev_queue_forget()
343 fiq->forget_list_tail->next = forget; in fuse_dev_queue_forget()
344 fiq->forget_list_tail = forget; in fuse_dev_queue_forget()
345 fuse_dev_wake_and_unlock(fiq); in fuse_dev_queue_forget()
348 spin_unlock(&fiq->lock); in fuse_dev_queue_forget()
352 void fuse_dev_queue_interrupt(struct fuse_iqueue *fiq, struct fuse_req *req) in fuse_dev_queue_interrupt() argument
354 spin_lock(&fiq->lock); in fuse_dev_queue_interrupt()
356 list_add_tail(&req->intr_entry, &fiq->interrupts); in fuse_dev_queue_interrupt()
364 spin_unlock(&fiq->lock); in fuse_dev_queue_interrupt()
366 fuse_dev_wake_and_unlock(fiq); in fuse_dev_queue_interrupt()
369 spin_unlock(&fiq->lock); in fuse_dev_queue_interrupt()
373 static inline void fuse_request_assign_unique_locked(struct fuse_iqueue *fiq, in fuse_request_assign_unique_locked() argument
377 req->in.h.unique = fuse_get_unique_locked(fiq); in fuse_request_assign_unique_locked()
383 inline void fuse_request_assign_unique(struct fuse_iqueue *fiq, in fuse_request_assign_unique() argument
387 req->in.h.unique = fuse_get_unique(fiq); in fuse_request_assign_unique()
394 static void fuse_dev_queue_req(struct fuse_iqueue *fiq, struct fuse_req *req) in fuse_dev_queue_req() argument
396 spin_lock(&fiq->lock); in fuse_dev_queue_req()
397 if (fiq->connected) { in fuse_dev_queue_req()
398 fuse_request_assign_unique_locked(fiq, req); in fuse_dev_queue_req()
399 list_add_tail(&req->list, &fiq->pending); in fuse_dev_queue_req()
400 fuse_dev_wake_and_unlock(fiq); in fuse_dev_queue_req()
402 spin_unlock(&fiq->lock); in fuse_dev_queue_req()
416 static void fuse_send_one(struct fuse_iqueue *fiq, struct fuse_req *req) in fuse_send_one() argument
421 fiq->ops->send_req(fiq, req); in fuse_send_one()
427 struct fuse_iqueue *fiq = &fc->iq; in fuse_queue_forget() local
432 fiq->ops->send_forget(fiq, forget); in fuse_queue_forget()
437 struct fuse_iqueue *fiq = &fc->iq; in flush_bg_queue() local
446 fuse_send_one(fiq, req); in flush_bg_queue()
462 struct fuse_iqueue *fiq = &fc->iq; in fuse_request_end() local
474 spin_lock(&fiq->lock); in fuse_request_end()
476 spin_unlock(&fiq->lock); in fuse_request_end()
515 struct fuse_iqueue *fiq = &req->fm->fc->iq; in queue_interrupt() local
521 fiq->ops->send_interrupt(fiq, req); in queue_interrupt()
547 struct fuse_iqueue *fiq = &fc->iq; in request_wait_answer() local
576 removed = fuse_remove_pending_req(req, &fiq->lock); in request_wait_answer()
590 struct fuse_iqueue *fiq = &req->fm->fc->iq; in __fuse_request_send() local
597 fuse_send_one(fiq, req); in __fuse_request_send()
708 struct fuse_iqueue *fiq = &fc->iq; in fuse_request_queue_background_uring() local
713 fuse_request_assign_unique(fiq, req); in fuse_request_queue_background_uring()
787 struct fuse_iqueue *fiq = &fm->fc->iq; in fuse_simple_notify_reply() local
798 fuse_send_one(fiq, req); in fuse_simple_notify_reply()
1229 static int forget_pending(struct fuse_iqueue *fiq) in forget_pending() argument
1231 return fiq->forget_list_head.next != NULL; in forget_pending()
1234 static int request_pending(struct fuse_iqueue *fiq) in request_pending() argument
1236 return !list_empty(&fiq->pending) || !list_empty(&fiq->interrupts) || in request_pending()
1237 forget_pending(fiq); in request_pending()
1246 * Called with fiq->lock held, releases it
1248 static int fuse_read_interrupt(struct fuse_iqueue *fiq, in fuse_read_interrupt() argument
1251 __releases(fiq->lock) in fuse_read_interrupt()
1266 spin_unlock(&fiq->lock); in fuse_read_interrupt()
1278 static struct fuse_forget_link *fuse_dequeue_forget(struct fuse_iqueue *fiq, in fuse_dequeue_forget() argument
1282 struct fuse_forget_link *head = fiq->forget_list_head.next; in fuse_dequeue_forget()
1289 fiq->forget_list_head.next = *newhead; in fuse_dequeue_forget()
1291 if (fiq->forget_list_head.next == NULL) in fuse_dequeue_forget()
1292 fiq->forget_list_tail = &fiq->forget_list_head; in fuse_dequeue_forget()
1300 static int fuse_read_single_forget(struct fuse_iqueue *fiq, in fuse_read_single_forget() argument
1303 __releases(fiq->lock) in fuse_read_single_forget()
1306 struct fuse_forget_link *forget = fuse_dequeue_forget(fiq, 1, NULL); in fuse_read_single_forget()
1313 .unique = fuse_get_unique_locked(fiq), in fuse_read_single_forget()
1317 spin_unlock(&fiq->lock); in fuse_read_single_forget()
1333 static int fuse_read_batch_forget(struct fuse_iqueue *fiq, in fuse_read_batch_forget() argument
1335 __releases(fiq->lock) in fuse_read_batch_forget()
1344 .unique = fuse_get_unique_locked(fiq), in fuse_read_batch_forget()
1349 spin_unlock(&fiq->lock); in fuse_read_batch_forget()
1354 head = fuse_dequeue_forget(fiq, max_forgets, &count); in fuse_read_batch_forget()
1355 spin_unlock(&fiq->lock); in fuse_read_batch_forget()
1382 static int fuse_read_forget(struct fuse_conn *fc, struct fuse_iqueue *fiq, in fuse_read_forget() argument
1385 __releases(fiq->lock) in fuse_read_forget()
1387 if (fc->minor < 16 || fiq->forget_list_head.next->next == NULL) in fuse_read_forget()
1388 return fuse_read_single_forget(fiq, cs, nbytes); in fuse_read_forget()
1390 return fuse_read_batch_forget(fiq, cs, nbytes); in fuse_read_forget()
1407 struct fuse_iqueue *fiq = &fc->iq; in fuse_dev_do_read() local
1434 spin_lock(&fiq->lock); in fuse_dev_do_read()
1435 if (!fiq->connected || request_pending(fiq)) in fuse_dev_do_read()
1437 spin_unlock(&fiq->lock); in fuse_dev_do_read()
1441 err = wait_event_interruptible_exclusive(fiq->waitq, in fuse_dev_do_read()
1442 !fiq->connected || request_pending(fiq)); in fuse_dev_do_read()
1447 if (!fiq->connected) { in fuse_dev_do_read()
1452 if (!list_empty(&fiq->interrupts)) { in fuse_dev_do_read()
1453 req = list_entry(fiq->interrupts.next, struct fuse_req, in fuse_dev_do_read()
1455 return fuse_read_interrupt(fiq, cs, nbytes, req); in fuse_dev_do_read()
1458 if (forget_pending(fiq)) { in fuse_dev_do_read()
1459 if (list_empty(&fiq->pending) || fiq->forget_batch-- > 0) in fuse_dev_do_read()
1460 return fuse_read_forget(fc, fiq, cs, nbytes); in fuse_dev_do_read()
1462 if (fiq->forget_batch <= -8) in fuse_dev_do_read()
1463 fiq->forget_batch = 16; in fuse_dev_do_read()
1466 req = list_entry(fiq->pending.next, struct fuse_req, list); in fuse_dev_do_read()
1469 spin_unlock(&fiq->lock); in fuse_dev_do_read()
1536 spin_unlock(&fiq->lock); in fuse_dev_do_read()
1996 struct fuse_iqueue *fiq = &fc->iq; in fuse_resend() local
2023 spin_lock(&fiq->lock); in fuse_resend()
2024 if (!fiq->connected) { in fuse_resend()
2025 spin_unlock(&fiq->lock); in fuse_resend()
2032 list_splice(&to_queue, &fiq->pending); in fuse_resend()
2033 fuse_dev_wake_and_unlock(fiq); in fuse_resend()
2386 struct fuse_iqueue *fiq; in fuse_dev_poll() local
2392 fiq = &fud->fc->iq; in fuse_dev_poll()
2393 poll_wait(file, &fiq->waitq, wait); in fuse_dev_poll()
2395 spin_lock(&fiq->lock); in fuse_dev_poll()
2396 if (!fiq->connected) in fuse_dev_poll()
2398 else if (request_pending(fiq)) in fuse_dev_poll()
2400 spin_unlock(&fiq->lock); in fuse_dev_poll()
2453 struct fuse_iqueue *fiq = &fc->iq; in fuse_abort_conn() local
2498 spin_lock(&fiq->lock); in fuse_abort_conn()
2499 fiq->connected = 0; in fuse_abort_conn()
2500 list_for_each_entry(req, &fiq->pending, list) in fuse_abort_conn()
2502 list_splice_tail_init(&fiq->pending, &to_end); in fuse_abort_conn()
2503 while (forget_pending(fiq)) in fuse_abort_conn()
2504 kfree(fuse_dequeue_forget(fiq, 1, NULL)); in fuse_abort_conn()
2505 wake_up_all(&fiq->waitq); in fuse_abort_conn()
2506 spin_unlock(&fiq->lock); in fuse_abort_conn()
2507 kill_fasync(&fiq->fasync, SIGIO, POLL_IN); in fuse_abort_conn()