@@ -207,9 +207,9 @@ static void opinfo_add(struct oplock_info *opinfo)
207207{
208208 struct ksmbd_inode * ci = opinfo -> o_fp -> f_ci ;
209209
210- write_lock (& ci -> m_lock );
210+ down_write (& ci -> m_lock );
211211 list_add_rcu (& opinfo -> op_entry , & ci -> m_op_list );
212- write_unlock (& ci -> m_lock );
212+ up_write (& ci -> m_lock );
213213}
214214
215215static void opinfo_del (struct oplock_info * opinfo )
@@ -221,9 +221,9 @@ static void opinfo_del(struct oplock_info *opinfo)
221221 lease_del_list (opinfo );
222222 write_unlock (& lease_list_lock );
223223 }
224- write_lock (& ci -> m_lock );
224+ down_write (& ci -> m_lock );
225225 list_del_rcu (& opinfo -> op_entry );
226- write_unlock (& ci -> m_lock );
226+ up_write (& ci -> m_lock );
227227}
228228
229229static unsigned long opinfo_count (struct ksmbd_file * fp )
@@ -526,21 +526,18 @@ static struct oplock_info *same_client_has_lease(struct ksmbd_inode *ci,
526526 * Compare lease key and client_guid to know request from same owner
527527 * of same client
528528 */
529- read_lock (& ci -> m_lock );
529+ down_read (& ci -> m_lock );
530530 list_for_each_entry (opinfo , & ci -> m_op_list , op_entry ) {
531531 if (!opinfo -> is_lease || !opinfo -> conn )
532532 continue ;
533- read_unlock (& ci -> m_lock );
534533 lease = opinfo -> o_lease ;
535534
536535 ret = compare_guid_key (opinfo , client_guid , lctx -> lease_key );
537536 if (ret ) {
538537 m_opinfo = opinfo ;
539538 /* skip upgrading lease about breaking lease */
540- if (atomic_read (& opinfo -> breaking_cnt )) {
541- read_lock (& ci -> m_lock );
539+ if (atomic_read (& opinfo -> breaking_cnt ))
542540 continue ;
543- }
544541
545542 /* upgrading lease */
546543 if ((atomic_read (& ci -> op_count ) +
@@ -570,9 +567,8 @@ static struct oplock_info *same_client_has_lease(struct ksmbd_inode *ci,
570567 lease_none_upgrade (opinfo , lctx -> req_state );
571568 }
572569 }
573- read_lock (& ci -> m_lock );
574570 }
575- read_unlock (& ci -> m_lock );
571+ up_read (& ci -> m_lock );
576572
577573 return m_opinfo ;
578574}
@@ -1114,7 +1110,7 @@ void smb_send_parent_lease_break_noti(struct ksmbd_file *fp,
11141110 if (!p_ci )
11151111 return ;
11161112
1117- read_lock (& p_ci -> m_lock );
1113+ down_read (& p_ci -> m_lock );
11181114 list_for_each_entry (opinfo , & p_ci -> m_op_list , op_entry ) {
11191115 if (opinfo -> conn == NULL || !opinfo -> is_lease )
11201116 continue ;
@@ -1132,13 +1128,11 @@ void smb_send_parent_lease_break_noti(struct ksmbd_file *fp,
11321128 continue ;
11331129 }
11341130
1135- read_unlock (& p_ci -> m_lock );
11361131 oplock_break (opinfo , SMB2_OPLOCK_LEVEL_NONE );
11371132 opinfo_conn_put (opinfo );
1138- read_lock (& p_ci -> m_lock );
11391133 }
11401134 }
1141- read_unlock (& p_ci -> m_lock );
1135+ up_read (& p_ci -> m_lock );
11421136
11431137 ksmbd_inode_put (p_ci );
11441138}
@@ -1159,7 +1153,7 @@ void smb_lazy_parent_lease_break_close(struct ksmbd_file *fp)
11591153 if (!p_ci )
11601154 return ;
11611155
1162- read_lock (& p_ci -> m_lock );
1156+ down_read (& p_ci -> m_lock );
11631157 list_for_each_entry (opinfo , & p_ci -> m_op_list , op_entry ) {
11641158 if (opinfo -> conn == NULL || !opinfo -> is_lease )
11651159 continue ;
@@ -1173,13 +1167,11 @@ void smb_lazy_parent_lease_break_close(struct ksmbd_file *fp)
11731167 atomic_dec (& opinfo -> conn -> r_count );
11741168 continue ;
11751169 }
1176- read_unlock (& p_ci -> m_lock );
11771170 oplock_break (opinfo , SMB2_OPLOCK_LEVEL_NONE );
11781171 opinfo_conn_put (opinfo );
1179- read_lock (& p_ci -> m_lock );
11801172 }
11811173 }
1182- read_unlock (& p_ci -> m_lock );
1174+ up_read (& p_ci -> m_lock );
11831175
11841176 ksmbd_inode_put (p_ci );
11851177}
0 commit comments