summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzmq810150896 <[email protected]>2023-10-12 08:22:46 +0800
committerGitHub <[email protected]>2023-10-12 08:22:46 +0800
commite6eddfa71127699d613147bba44279bfe7c61196 (patch)
tree2e5062ea17ee739c923708073d95e57abb74bb1f
parent19bfdac891dbb70d475a64ae118ecb83459f4a50 (diff)
Fix the problem that when dfs_v2 transmits fd, dentry or vnode does not exist (#8089)
-rw-r--r--components/lwp/lwp_ipc.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/components/lwp/lwp_ipc.c b/components/lwp/lwp_ipc.c
index 0b36306057..8410bc2cac 100644
--- a/components/lwp/lwp_ipc.c
+++ b/components/lwp/lwp_ipc.c
@@ -407,19 +407,26 @@ static int _ipc_msg_fd_new(void *file)
return -1;
}
+ d->vnode = df->vnode;
+ d->flags = df->flags;
+ d->data = df->data;
+ d->magic = df->magic;
+
#ifdef RT_USING_DFS_V2
d->fops = df->fops;
d->mode = df->mode;
d->dentry = df->dentry;
- d->dentry->ref_count ++;
+ if (d->dentry)
+ rt_atomic_add(&(d->dentry->ref_count), 1);
+
+ if (d->vnode)
+ rt_atomic_add(&(d->vnode->ref_count), 1);
+#else
+ if (d->vnode)
+ d->vnode->ref_count ++;
#endif
- d->vnode = df->vnode;
- d->flags = df->flags;
- d->data = df->data;
- d->magic = df->magic;
- d->vnode->ref_count ++;
return fd;
}