fix:add vnode destory for unregister dev node

Change-Id: I2205bbf42e7c2339f81443ace6924b12f4fa1c09
This commit is contained in:
mucor 2021-04-30 15:11:51 +08:00
parent 206f818666
commit 04bcb11c3c
2 changed files with 28 additions and 11 deletions

View File

@ -121,5 +121,6 @@ void ChangeRoot(struct Vnode *newRoot);
BOOL VnodeInUseIter(const struct Mount *mount);
struct Vnode *VnodeGetRoot(void);
void VnodeMemoryDump(void);
int VnodeDestory(struct Vnode *vnode);
#endif /* !_VNODE_H_ */

View File

@ -168,29 +168,21 @@ int VnodeFree(struct Vnode *vnode)
if (vnode == NULL) {
return LOS_OK;
}
struct PathCache *item = NULL;
struct PathCache *nextItem = NULL;
VnodeHold();
if (vnode->useCount > 0) {
VnodeDrop();
return -EBUSY;
}
LOS_DL_LIST_FOR_EACH_ENTRY_SAFE(item, nextItem, &vnode->childPathCaches, struct PathCache, childEntry) {
PathCacheFree(item);
}
LOS_DL_LIST_FOR_EACH_ENTRY_SAFE(item, nextItem, &vnode->parentPathCaches, struct PathCache, parentEntry) {
PathCacheFree(item);
}
VnodePathCacheFree(vnode);
LOS_ListDelete(&(vnode->hashEntry));
LOS_ListDelete(&vnode->actFreeEntry);
if (vnode->vop->Reclaim) {
vnode->vop->Reclaim(vnode);
}
LOS_ListDelete(&vnode->actFreeEntry);
memset_s(vnode, sizeof(struct Vnode), 0, sizeof(struct Vnode));
LOS_ListAdd(&g_vnodeFreeList, &vnode->actFreeEntry);
@ -629,4 +621,28 @@ void VnodeMemoryDump(void)
PRINTK("Vnode number = %d\n", vnodeCount);
PRINTK("Vnode memory size = %d(B)\n", vnodeCount * sizeof(struct Vnode));
}
}
int VnodeDestory(struct Vnode *vnode)
{
if (vnode == NULL || vnode->vop != &g_devfsOps) {
/* destory only support dev vnode */
return -EINVAL;
}
VnodeHold();
if (vnode->useCount > 0) {
VnodeDrop();
return -EBUSY;
}
VnodePathCacheFree(vnode);
LOS_ListDelete(&(vnode->hashEntry));
LOS_ListDelete(&vnode->actFreeEntry);
free(vnode->data);
free(vnode);
VnodeDrop();
return LOS_OK;
}