Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag '6.17-rc7-ksmbd-server-fixes' of git://git.samba.org/ksmbd

Pull smb server fixes from Steve French:

- free_transport fix for disconnect races

- minor delayed work fix

* tag '6.17-rc7-ksmbd-server-fixes' of git://git.samba.org/ksmbd:
smb: server: use disable_work_sync in transport_rdma.c
smb: server: don't use delayed_work for post_recv_credits_work

+10 -12
+10 -12
fs/smb/server/transport_rdma.c
··· 148 148 wait_queue_head_t wait_send_pending; 149 149 atomic_t send_pending; 150 150 151 - struct delayed_work post_recv_credits_work; 151 + struct work_struct post_recv_credits_work; 152 152 struct work_struct send_immediate_work; 153 153 struct work_struct disconnect_work; 154 154 ··· 367 367 368 368 spin_lock_init(&t->lock_new_recv_credits); 369 369 370 - INIT_DELAYED_WORK(&t->post_recv_credits_work, 371 - smb_direct_post_recv_credits); 370 + INIT_WORK(&t->post_recv_credits_work, 371 + smb_direct_post_recv_credits); 372 372 INIT_WORK(&t->send_immediate_work, smb_direct_send_immediate_work); 373 373 INIT_WORK(&t->disconnect_work, smb_direct_disconnect_rdma_work); 374 374 ··· 399 399 wait_event(t->wait_send_pending, 400 400 atomic_read(&t->send_pending) == 0); 401 401 402 - cancel_work_sync(&t->disconnect_work); 403 - cancel_delayed_work_sync(&t->post_recv_credits_work); 404 - cancel_work_sync(&t->send_immediate_work); 402 + disable_work_sync(&t->disconnect_work); 403 + disable_work_sync(&t->post_recv_credits_work); 404 + disable_work_sync(&t->send_immediate_work); 405 405 406 406 if (t->qp) { 407 407 ib_drain_qp(t->qp); ··· 615 615 wake_up_interruptible(&t->wait_send_credits); 616 616 617 617 if (is_receive_credit_post_required(receive_credits, avail_recvmsg_count)) 618 - mod_delayed_work(smb_direct_wq, 619 - &t->post_recv_credits_work, 0); 618 + queue_work(smb_direct_wq, &t->post_recv_credits_work); 620 619 621 620 if (data_length) { 622 621 enqueue_reassembly(t, recvmsg, (int)data_length); ··· 772 773 st->count_avail_recvmsg += queue_removed; 773 774 if (is_receive_credit_post_required(st->recv_credits, st->count_avail_recvmsg)) { 774 775 spin_unlock(&st->receive_credit_lock); 775 - mod_delayed_work(smb_direct_wq, 776 - &st->post_recv_credits_work, 0); 776 + queue_work(smb_direct_wq, &st->post_recv_credits_work); 777 777 } else { 778 778 spin_unlock(&st->receive_credit_lock); 779 779 } ··· 799 801 static void smb_direct_post_recv_credits(struct work_struct *work) 800 802 { 801 803 struct smb_direct_transport *t = container_of(work, 802 - struct smb_direct_transport, post_recv_credits_work.work); 804 + struct smb_direct_transport, post_recv_credits_work); 803 805 struct smb_direct_recvmsg *recvmsg; 804 806 int receive_credits, credits = 0; 805 807 int ret; ··· 1732 1734 goto out_err; 1733 1735 } 1734 1736 1735 - smb_direct_post_recv_credits(&t->post_recv_credits_work.work); 1737 + smb_direct_post_recv_credits(&t->post_recv_credits_work); 1736 1738 return 0; 1737 1739 out_err: 1738 1740 put_recvmsg(t, recvmsg);