diff --git a/src/add-ons/kernel/file_systems/bindfs/Volume.cpp b/src/add-ons/kernel/file_systems/bindfs/Volume.cpp index 2c5013e92c..24453909cf 100644 --- a/src/add-ons/kernel/file_systems/bindfs/Volume.cpp +++ b/src/add-ons/kernel/file_systems/bindfs/Volume.cpp @@ -33,6 +33,7 @@ Volume::Volume(fs_volume* fsVolume) : fFSVolume(fsVolume), fSourceFSVolume(NULL), + fSourceVnode(NULL), fRootNode(NULL) { } @@ -40,6 +41,8 @@ Volume::Volume(fs_volume* fsVolume) Volume::~Volume() { + if (fSourceVnode != NULL) + vfs_put_vnode(fSourceVnode); } @@ -57,13 +60,12 @@ Volume::Mount(const char* parameterString) RETURN_ERROR(B_BAD_VALUE); } - struct vnode* sourceVnode; - status_t error = vfs_get_vnode_from_path(source, true, &sourceVnode); + status_t error = vfs_get_vnode_from_path(source, true, &fSourceVnode); if (error != B_OK) RETURN_ERROR(error); - if (sourceVnode == NULL) + if (fSourceVnode == NULL) RETURN_ERROR(B_ENTRY_NOT_FOUND); - fs_vnode* sourceFSNode = vfs_fsnode_for_vnode(sourceVnode); + fs_vnode* sourceFSNode = vfs_fsnode_for_vnode(fSourceVnode); fSourceFSVolume = volume_for_vnode(sourceFSNode); struct stat st; diff --git a/src/add-ons/kernel/file_systems/bindfs/Volume.h b/src/add-ons/kernel/file_systems/bindfs/Volume.h index bacaba3036..6d06e24baa 100644 --- a/src/add-ons/kernel/file_systems/bindfs/Volume.h +++ b/src/add-ons/kernel/file_systems/bindfs/Volume.h @@ -10,6 +10,7 @@ class Node; +struct vnode; class Volume { @@ -41,6 +42,7 @@ private: private: fs_volume* fFSVolume; fs_volume* fSourceFSVolume; + vnode* fSourceVnode; Node* fRootNode; fs_vnode_ops fVnodeOps;