@@ -66,14 +66,14 @@ static unsigned long inode_hash(struct super_block *sb, unsigned long hashval)
6666 return tmp & inode_hash_mask ;
6767}
6868
69- static struct ksmbd_inode * __ksmbd_inode_lookup (struct inode * inode )
69+ static struct ksmbd_inode * __ksmbd_inode_lookup (struct dentry * de )
7070{
7171 struct hlist_head * head = inode_hashtable +
72- inode_hash (inode -> i_sb , inode -> i_ino );
72+ inode_hash (d_inode ( de ) -> i_sb , ( unsigned long ) de );
7373 struct ksmbd_inode * ci = NULL , * ret_ci = NULL ;
7474
7575 hlist_for_each_entry (ci , head , m_hash ) {
76- if (ci -> m_inode == inode ) {
76+ if (ci -> m_de == de ) {
7777 if (atomic_inc_not_zero (& ci -> m_count ))
7878 ret_ci = ci ;
7979 break ;
@@ -84,26 +84,16 @@ static struct ksmbd_inode *__ksmbd_inode_lookup(struct inode *inode)
8484
8585static struct ksmbd_inode * ksmbd_inode_lookup (struct ksmbd_file * fp )
8686{
87- return __ksmbd_inode_lookup (file_inode ( fp -> filp ) );
87+ return __ksmbd_inode_lookup (fp -> filp -> f_path . dentry );
8888}
8989
90- static struct ksmbd_inode * ksmbd_inode_lookup_by_vfsinode (struct inode * inode )
91- {
92- struct ksmbd_inode * ci ;
93-
94- read_lock (& inode_hash_lock );
95- ci = __ksmbd_inode_lookup (inode );
96- read_unlock (& inode_hash_lock );
97- return ci ;
98- }
99-
100- int ksmbd_query_inode_status (struct inode * inode )
90+ int ksmbd_query_inode_status (struct dentry * dentry )
10191{
10292 struct ksmbd_inode * ci ;
10393 int ret = KSMBD_INODE_STATUS_UNKNOWN ;
10494
10595 read_lock (& inode_hash_lock );
106- ci = __ksmbd_inode_lookup (inode );
96+ ci = __ksmbd_inode_lookup (dentry );
10797 if (ci ) {
10898 ret = KSMBD_INODE_STATUS_OK ;
10999 if (ci -> m_flags & (S_DEL_PENDING | S_DEL_ON_CLS ))
@@ -143,7 +133,7 @@ void ksmbd_fd_set_delete_on_close(struct ksmbd_file *fp,
143133static void ksmbd_inode_hash (struct ksmbd_inode * ci )
144134{
145135 struct hlist_head * b = inode_hashtable +
146- inode_hash (ci -> m_inode -> i_sb , ci -> m_inode -> i_ino );
136+ inode_hash (d_inode ( ci -> m_de ) -> i_sb , ( unsigned long ) ci -> m_de );
147137
148138 hlist_add_head (& ci -> m_hash , b );
149139}
@@ -157,7 +147,6 @@ static void ksmbd_inode_unhash(struct ksmbd_inode *ci)
157147
158148static int ksmbd_inode_init (struct ksmbd_inode * ci , struct ksmbd_file * fp )
159149{
160- ci -> m_inode = file_inode (fp -> filp );
161150 atomic_set (& ci -> m_count , 1 );
162151 atomic_set (& ci -> op_count , 0 );
163152 atomic_set (& ci -> sop_count , 0 );
@@ -166,6 +155,7 @@ static int ksmbd_inode_init(struct ksmbd_inode *ci, struct ksmbd_file *fp)
166155 INIT_LIST_HEAD (& ci -> m_fp_list );
167156 INIT_LIST_HEAD (& ci -> m_op_list );
168157 rwlock_init (& ci -> m_lock );
158+ ci -> m_de = fp -> filp -> f_path .dentry ;
169159 return 0 ;
170160}
171161
@@ -488,12 +478,15 @@ struct ksmbd_file *ksmbd_lookup_fd_cguid(char *cguid)
488478 return fp ;
489479}
490480
491- struct ksmbd_file * ksmbd_lookup_fd_inode (struct inode * inode )
481+ struct ksmbd_file * ksmbd_lookup_fd_inode (struct dentry * dentry )
492482{
493483 struct ksmbd_file * lfp ;
494484 struct ksmbd_inode * ci ;
485+ struct inode * inode = d_inode (dentry );
495486
496- ci = ksmbd_inode_lookup_by_vfsinode (inode );
487+ read_lock (& inode_hash_lock );
488+ ci = __ksmbd_inode_lookup (dentry );
489+ read_unlock (& inode_hash_lock );
497490 if (!ci )
498491 return NULL ;
499492
0 commit comments