13
13
#include "orangefs-kernel.h"
14
14
15
15
/* Returns 1 if dentry can still be trusted, else 0. */
16
- static int orangefs_revalidate_lookup (struct dentry * dentry )
16
+ static int orangefs_revalidate_lookup (struct inode * parent_inode , const struct qstr * name ,
17
+ struct dentry * dentry )
17
18
{
18
- struct dentry * parent_dentry = dget_parent (dentry );
19
- struct inode * parent_inode = parent_dentry -> d_inode ;
20
19
struct orangefs_inode_s * parent = ORANGEFS_I (parent_inode );
21
20
struct inode * inode = dentry -> d_inode ;
22
21
struct orangefs_kernel_op_s * new_op ;
@@ -26,14 +25,14 @@ static int orangefs_revalidate_lookup(struct dentry *dentry)
26
25
gossip_debug (GOSSIP_DCACHE_DEBUG , "%s: attempting lookup.\n" , __func__ );
27
26
28
27
new_op = op_alloc (ORANGEFS_VFS_OP_LOOKUP );
29
- if (!new_op ) {
30
- ret = - ENOMEM ;
31
- goto out_put_parent ;
32
- }
28
+ if (!new_op )
29
+ return - ENOMEM ;
33
30
34
31
new_op -> upcall .req .lookup .sym_follow = ORANGEFS_LOOKUP_LINK_NO_FOLLOW ;
35
32
new_op -> upcall .req .lookup .parent_refn = parent -> refn ;
36
- strscpy (new_op -> upcall .req .lookup .d_name , dentry -> d_name .name );
33
+ /* op_alloc() leaves ->upcall zeroed */
34
+ memcpy (new_op -> upcall .req .lookup .d_name , name -> name ,
35
+ min (name -> len , ORANGEFS_NAME_MAX - 1 ));
37
36
38
37
gossip_debug (GOSSIP_DCACHE_DEBUG ,
39
38
"%s:%s:%d interrupt flag [%d]\n" ,
@@ -78,8 +77,6 @@ static int orangefs_revalidate_lookup(struct dentry *dentry)
78
77
ret = 1 ;
79
78
out_release_op :
80
79
op_release (new_op );
81
- out_put_parent :
82
- dput (parent_dentry );
83
80
return ret ;
84
81
out_drop :
85
82
gossip_debug (GOSSIP_DCACHE_DEBUG , "%s:%s:%d revalidate failed\n" ,
@@ -115,7 +112,7 @@ static int orangefs_d_revalidate(struct inode *dir, const struct qstr *name,
115
112
* If this passes, the positive dentry still exists or the negative
116
113
* dentry still does not exist.
117
114
*/
118
- if (!orangefs_revalidate_lookup (dentry ))
115
+ if (!orangefs_revalidate_lookup (dir , name , dentry ))
119
116
return 0 ;
120
117
121
118
/* We do not need to continue with negative dentries. */
0 commit comments