@@ -174,7 +174,7 @@ static void ksmbd_expire_session(struct ksmbd_conn *conn)
174174 unsigned long id ;
175175 struct ksmbd_session * sess ;
176176
177- down_write (& sessions_table_lock );
177+ down_write (& conn -> session_lock );
178178 xa_for_each (& conn -> sessions , id , sess ) {
179179 if (sess -> state != SMB2_SESSION_VALID ||
180180 time_after (jiffies ,
@@ -185,7 +185,7 @@ static void ksmbd_expire_session(struct ksmbd_conn *conn)
185185 continue ;
186186 }
187187 }
188- up_write (& sessions_table_lock );
188+ up_write (& conn -> session_lock );
189189}
190190
191191int ksmbd_session_register (struct ksmbd_conn * conn ,
@@ -227,7 +227,9 @@ void ksmbd_sessions_deregister(struct ksmbd_conn *conn)
227227 }
228228 }
229229 }
230+ up_write (& sessions_table_lock );
230231
232+ down_write (& conn -> session_lock );
231233 xa_for_each (& conn -> sessions , id , sess ) {
232234 unsigned long chann_id ;
233235 struct channel * chann ;
@@ -244,17 +246,19 @@ void ksmbd_sessions_deregister(struct ksmbd_conn *conn)
244246 ksmbd_session_destroy (sess );
245247 }
246248 }
247- up_write (& sessions_table_lock );
249+ up_write (& conn -> session_lock );
248250}
249251
250252struct ksmbd_session * ksmbd_session_lookup (struct ksmbd_conn * conn ,
251253 unsigned long long id )
252254{
253255 struct ksmbd_session * sess ;
254256
257+ down_read (& conn -> session_lock );
255258 sess = xa_load (& conn -> sessions , id );
256259 if (sess )
257260 sess -> last_active = jiffies ;
261+ up_read (& conn -> session_lock );
258262 return sess ;
259263}
260264
0 commit comments