@@ -740,8 +740,7 @@ static void __smb1_oplock_break_noti(struct work_struct *wk)
740
740
741
741
if (allocate_interim_rsp_buf (work )) {
742
742
pr_err ("smb_allocate_rsp_buf failed! " );
743
- ksmbd_free_work_struct (work );
744
- return ;
743
+ goto out ;
745
744
}
746
745
747
746
/* Init response header */
@@ -786,7 +785,9 @@ static void __smb1_oplock_break_noti(struct work_struct *wk)
786
785
req -> Fid , req -> OplockLevel );
787
786
788
787
ksmbd_conn_write (work );
788
+ out :
789
789
ksmbd_free_work_struct (work );
790
+ ksmbd_conn_r_count_dec (conn );
790
791
}
791
792
792
793
/**
@@ -809,6 +810,7 @@ static int smb1_oplock_break_noti(struct oplock_info *opinfo)
809
810
work -> conn = conn ;
810
811
811
812
if (opinfo -> op_state == OPLOCK_ACK_WAIT ) {
813
+ ksmbd_conn_r_count_inc (conn );
812
814
INIT_WORK (& work -> work , __smb1_oplock_break_noti );
813
815
ksmbd_queue_work (work );
814
816
@@ -836,6 +838,7 @@ static void __smb2_oplock_break_noti(struct work_struct *wk)
836
838
{
837
839
struct smb2_oplock_break * rsp = NULL ;
838
840
struct ksmbd_work * work = container_of (wk , struct ksmbd_work , work );
841
+ struct ksmbd_conn * conn = work -> conn ;
839
842
struct oplock_break_info * br_info = work -> request_buf ;
840
843
struct smb2_hdr * rsp_hdr ;
841
844
struct ksmbd_file * fp ;
@@ -891,6 +894,7 @@ static void __smb2_oplock_break_noti(struct work_struct *wk)
891
894
892
895
out :
893
896
ksmbd_free_work_struct (work );
897
+ ksmbd_conn_r_count_dec (conn );
894
898
}
895
899
896
900
/**
@@ -925,6 +929,7 @@ static int smb2_oplock_break_noti(struct oplock_info *opinfo)
925
929
work -> sess = opinfo -> sess ;
926
930
927
931
if (opinfo -> op_state == OPLOCK_ACK_WAIT ) {
932
+ ksmbd_conn_r_count_inc (conn );
928
933
INIT_WORK (& work -> work , __smb2_oplock_break_noti );
929
934
ksmbd_queue_work (work );
930
935
@@ -946,6 +951,7 @@ static void __smb2_lease_break_noti(struct work_struct *wk)
946
951
{
947
952
struct smb2_lease_break * rsp = NULL ;
948
953
struct ksmbd_work * work = container_of (wk , struct ksmbd_work , work );
954
+ struct ksmbd_conn * conn = work -> conn ;
949
955
struct lease_break_info * br_info = work -> request_buf ;
950
956
struct smb2_hdr * rsp_hdr ;
951
957
@@ -992,6 +998,7 @@ static void __smb2_lease_break_noti(struct work_struct *wk)
992
998
993
999
out :
994
1000
ksmbd_free_work_struct (work );
1001
+ ksmbd_conn_r_count_dec (conn );
995
1002
}
996
1003
997
1004
/**
@@ -1031,6 +1038,7 @@ static int smb2_lease_break_noti(struct oplock_info *opinfo)
1031
1038
work -> sess = opinfo -> sess ;
1032
1039
1033
1040
if (opinfo -> op_state == OPLOCK_ACK_WAIT ) {
1041
+ ksmbd_conn_r_count_inc (conn );
1034
1042
INIT_WORK (& work -> work , __smb2_lease_break_noti );
1035
1043
ksmbd_queue_work (work );
1036
1044
wait_for_break_ack (opinfo );
0 commit comments