@@ -174,7 +174,7 @@ static void ksmbd_expire_session(struct ksmbd_conn *conn)
174
174
unsigned long id ;
175
175
struct ksmbd_session * sess ;
176
176
177
- down_write (& sessions_table_lock );
177
+ down_write (& conn -> session_lock );
178
178
xa_for_each (& conn -> sessions , id , sess ) {
179
179
if (sess -> state != SMB2_SESSION_VALID ||
180
180
time_after (jiffies ,
@@ -185,7 +185,7 @@ static void ksmbd_expire_session(struct ksmbd_conn *conn)
185
185
continue ;
186
186
}
187
187
}
188
- up_write (& sessions_table_lock );
188
+ up_write (& conn -> session_lock );
189
189
}
190
190
191
191
int ksmbd_session_register (struct ksmbd_conn * conn ,
@@ -227,7 +227,9 @@ void ksmbd_sessions_deregister(struct ksmbd_conn *conn)
227
227
}
228
228
}
229
229
}
230
+ up_write (& sessions_table_lock );
230
231
232
+ down_write (& conn -> session_lock );
231
233
xa_for_each (& conn -> sessions , id , sess ) {
232
234
unsigned long chann_id ;
233
235
struct channel * chann ;
@@ -244,17 +246,19 @@ void ksmbd_sessions_deregister(struct ksmbd_conn *conn)
244
246
ksmbd_session_destroy (sess );
245
247
}
246
248
}
247
- up_write (& sessions_table_lock );
249
+ up_write (& conn -> session_lock );
248
250
}
249
251
250
252
struct ksmbd_session * ksmbd_session_lookup (struct ksmbd_conn * conn ,
251
253
unsigned long long id )
252
254
{
253
255
struct ksmbd_session * sess ;
254
256
257
+ down_read (& conn -> session_lock );
255
258
sess = xa_load (& conn -> sessions , id );
256
259
if (sess )
257
260
sess -> last_active = jiffies ;
261
+ up_read (& conn -> session_lock );
258
262
return sess ;
259
263
}
260
264
0 commit comments