From 90434377f3cc0227b3ea2093be70e2064896c9fa Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 18 Apr 2008 16:38:12 -0700 Subject: [PATCH] mds: a couple truncate bugs --- src/include/ceph_fs.h | 1 + src/mds/MDCache.cc | 4 ++-- src/mds/Server.cc | 6 ++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/include/ceph_fs.h b/src/include/ceph_fs.h index 48aa79db11560..2feb2a4964333 100644 --- a/src/include/ceph_fs.h +++ b/src/include/ceph_fs.h @@ -18,6 +18,7 @@ #endif #define CEPH_MON_PORT 12345 +#define CEPH_FILE_MAX_SIZE (1ULL << 40) // 1 TB /* * types in this file are defined as little-endian, and are diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 6ed6ff8aa7470..e5dcd519c946a 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -2847,8 +2847,8 @@ void MDCache::_do_purge_inode(CInode *in, off_t newsize, off_t oldsize) in->get(CInode::PIN_PURGING); // remove - if (in->inode.size > 0) { - mds->filer->remove(in->inode, newsize, oldsize, 0, + if (newsize < oldsize) { + mds->filer->remove(in->inode, newsize, oldsize-newsize, 0, 0, new C_MDC_PurgeFinish(this, in, newsize, oldsize)); } else { // no need, empty file, just log it diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 6fc6e981b5d8b..d23b815b79b8d 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -3875,6 +3875,12 @@ public: void Server::handle_client_truncate(MDRequest *mdr) { MClientRequest *req = mdr->client_request; + + if (req->head.args.truncate.length > CEPH_FILE_MAX_SIZE) { + reply_request(mdr, -EFBIG); + return; + } + CInode *cur = rdlock_path_pin_ref(mdr, true); if (!cur) return; -- 2.39.5