@@ -129,14 +129,6 @@ static void free_opinfo(struct oplock_info *opinfo)
129
129
kfree (opinfo );
130
130
}
131
131
132
- static inline void opinfo_free_rcu (struct rcu_head * rcu_head )
133
- {
134
- struct oplock_info * opinfo ;
135
-
136
- opinfo = container_of (rcu_head , struct oplock_info , rcu_head );
137
- free_opinfo (opinfo );
138
- }
139
-
140
132
struct oplock_info * opinfo_get (struct ksmbd_file * fp )
141
133
{
142
134
struct oplock_info * opinfo ;
@@ -157,8 +149,8 @@ static struct oplock_info *opinfo_get_list(struct ksmbd_inode *ci)
157
149
if (list_empty (& ci -> m_op_list ))
158
150
return NULL ;
159
151
160
- rcu_read_lock ( );
161
- opinfo = list_first_or_null_rcu (& ci -> m_op_list , struct oplock_info ,
152
+ down_read ( & ci -> m_lock );
153
+ opinfo = list_first_entry (& ci -> m_op_list , struct oplock_info ,
162
154
op_entry );
163
155
if (opinfo ) {
164
156
if (opinfo -> conn == NULL ||
@@ -171,8 +163,7 @@ static struct oplock_info *opinfo_get_list(struct ksmbd_inode *ci)
171
163
}
172
164
}
173
165
}
174
-
175
- rcu_read_unlock ();
166
+ up_read (& ci -> m_lock );
176
167
177
168
return opinfo ;
178
169
}
@@ -185,15 +176,15 @@ void opinfo_put(struct oplock_info *opinfo)
185
176
if (!atomic_dec_and_test (& opinfo -> refcount ))
186
177
return ;
187
178
188
- call_rcu ( & opinfo -> rcu_head , opinfo_free_rcu );
179
+ free_opinfo ( opinfo );
189
180
}
190
181
191
182
static void opinfo_add (struct oplock_info * opinfo )
192
183
{
193
184
struct ksmbd_inode * ci = opinfo -> o_fp -> f_ci ;
194
185
195
186
down_write (& ci -> m_lock );
196
- list_add_rcu (& opinfo -> op_entry , & ci -> m_op_list );
187
+ list_add (& opinfo -> op_entry , & ci -> m_op_list );
197
188
up_write (& ci -> m_lock );
198
189
}
199
190
@@ -207,7 +198,7 @@ static void opinfo_del(struct oplock_info *opinfo)
207
198
write_unlock (& lease_list_lock );
208
199
}
209
200
down_write (& ci -> m_lock );
210
- list_del_rcu (& opinfo -> op_entry );
201
+ list_del (& opinfo -> op_entry );
211
202
up_write (& ci -> m_lock );
212
203
}
213
204
@@ -1347,8 +1338,8 @@ void smb_break_all_levII_oplock(struct ksmbd_work *work, struct ksmbd_file *fp,
1347
1338
ci = fp -> f_ci ;
1348
1339
op = opinfo_get (fp );
1349
1340
1350
- rcu_read_lock ( );
1351
- list_for_each_entry_rcu (brk_op , & ci -> m_op_list , op_entry ) {
1341
+ down_read ( & ci -> m_lock );
1342
+ list_for_each_entry (brk_op , & ci -> m_op_list , op_entry ) {
1352
1343
if (brk_op -> conn == NULL )
1353
1344
continue ;
1354
1345
@@ -1358,7 +1349,6 @@ void smb_break_all_levII_oplock(struct ksmbd_work *work, struct ksmbd_file *fp,
1358
1349
if (ksmbd_conn_releasing (brk_op -> conn ))
1359
1350
continue ;
1360
1351
1361
- rcu_read_unlock ();
1362
1352
if (brk_op -> is_lease && (brk_op -> o_lease -> state &
1363
1353
(~(SMB2_LEASE_READ_CACHING_LE |
1364
1354
SMB2_LEASE_HANDLE_CACHING_LE )))) {
@@ -1388,9 +1378,8 @@ void smb_break_all_levII_oplock(struct ksmbd_work *work, struct ksmbd_file *fp,
1388
1378
oplock_break (brk_op , SMB2_OPLOCK_LEVEL_NONE , NULL );
1389
1379
next :
1390
1380
opinfo_put (brk_op );
1391
- rcu_read_lock ();
1392
1381
}
1393
- rcu_read_unlock ( );
1382
+ up_read ( & ci -> m_lock );
1394
1383
1395
1384
if (op )
1396
1385
opinfo_put (op );
0 commit comments