From 1d9d6b02085df2df5c7be642702ab81f7cf07cfa Mon Sep 17 00:00:00 2001 From: zhangkaixiang Date: Thu, 16 Nov 2023 08:07:39 +0000 Subject: [PATCH] fix forget operations Signed-off-by: zhangkaixiang Change-Id: I0ac7723c238be9022dde52141abee0178a431776 --- .../src/cloud_disk/file_operations_cloud.cpp | 12 ++++++++++-- .../src/cloud_disk/file_operations_helper.cpp | 4 ++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/services/cloudfiledaemon/src/cloud_disk/file_operations_cloud.cpp b/services/cloudfiledaemon/src/cloud_disk/file_operations_cloud.cpp index 05f50ab32..76e011f3e 100644 --- a/services/cloudfiledaemon/src/cloud_disk/file_operations_cloud.cpp +++ b/services/cloudfiledaemon/src/cloud_disk/file_operations_cloud.cpp @@ -154,7 +154,11 @@ void FileOperationsCloud::Forget(fuse_req_t req, fuse_ino_t ino, uint64_t nLooku return (void) fuse_reply_none(req); } auto inoPtr = reinterpret_cast(ino); - shared_ptr node = FileOperationsHelper::FindCloudDiskInode(data, inoPtr->cloudId); + string key = inoPtr->cloudId; + if (inoPtr->layer != CLOUD_DISK_INODE_OTHER_LAYER) { + key = inoPtr->path; + } + shared_ptr node = FileOperationsHelper::FindCloudDiskInode(data, key); FileOperationsHelper::PutCloudDiskInode(data, node, nLookup); fuse_reply_none(req); } @@ -168,7 +172,11 @@ void FileOperationsCloud::ForgetMulti(fuse_req_t req, size_t count, struct fuse_ return (void) fuse_reply_none(req); } auto inoPtr = reinterpret_cast(forgets[i].ino); - shared_ptr node = FileOperationsHelper::FindCloudDiskInode(data, inoPtr->cloudId); + string key = inoPtr->cloudId; + if (inoPtr->layer != CLOUD_DISK_INODE_OTHER_LAYER) { + key = inoPtr->path; + } + shared_ptr node = FileOperationsHelper::FindCloudDiskInode(data, key); FileOperationsHelper::PutCloudDiskInode(data, node, forgets[i].nlookup); } fuse_reply_none(req); diff --git a/services/cloudfiledaemon/src/cloud_disk/file_operations_helper.cpp b/services/cloudfiledaemon/src/cloud_disk/file_operations_helper.cpp index 1b56ba88e..a6720d2e0 100644 --- a/services/cloudfiledaemon/src/cloud_disk/file_operations_helper.cpp +++ b/services/cloudfiledaemon/src/cloud_disk/file_operations_helper.cpp @@ -143,6 +143,10 @@ void FileOperationsHelper::PutCloudDiskInode(struct CloudDiskFuseData *data, shared_ptr inoPtr, uint64_t num) { std::unique_lock wLock(data->cacheLock, std::defer_lock); + if (inoPtr == nullptr) { + LOGD("Get an invalid inode!"); + return; + } inoPtr->refCount -= num; if (inoPtr->refCount == 0) { LOGD("node released: %{public}s", inoPtr->path.c_str()); -- Gitee