Project

General

Profile

Actions

Tasks #69796

closed

Tasks #63293: Implement fscrypt in libcephfs and cephfs-fuse

general libcephfs unit tests fail

Added by Christopher Hoffman about 1 year ago. Updated about 1 year ago.

Status:
Resolved
Priority:
Normal
Category:
-
Target version:
-
% Done:

100%

Reviewed:
Affected Versions:
Component(FS):
Labels (FS):
Pull request ID:
Tags (freeform):
Merge Commit:
Fixed In:
Released In:
Upkeep Timestamp:

Description

The following is failing:

The test suite

ceph_test_libcephfs

The tests:

OpenReadWrite
MulticlientSimple
MulticlientHoleEOF
MulticlientRevokeCaps
RecalledGetattr


Subtasks 1 (0 open1 closed)

Tasks #69797: OpenReadWriteResolvedChristopher Hoffman

Actions
Actions #1

Updated by Christopher Hoffman about 1 year ago

  • Subtask #69797 added
Actions #2

Updated by Christopher Hoffman about 1 year ago

  • Status changed from In Progress to Resolved

Multi-client tests and now all tests pass.

commit 4bb7c3d895960d4cffa84d172b16faa89d820edc (HEAD -> wip-fscrypt, origin/wip-fscrypt)
Author: Christopher Hoffman <[email protected]>
Date:   Tue Feb 11 16:05:29 2025 +0000

    client: Fix up a few things in read_sync path

    Fix up a few things in read_sync path
    1. File size may not be updated locally, do not check for trim read
    2. Do not get_cap before RMW, each do_write takes care of having proper caps

    Fixes: https://tracker.ceph.com/issues/69796
    Signed-off-by: Christopher Hoffman <[email protected]>

diff --git a/src/client/Client.cc b/src/client/Client.cc
index af8feef7d1f..8522ae35d0c 100644
--- a/src/client/Client.cc
+++ b/src/client/Client.cc
@@ -11601,12 +11601,6 @@ int Client::_read_sync(Fh *f, uint64_t off, uint64_t len, bufferlist *bl,

   auto effective_size = in->effective_size();

-  // trim read based on file size?
-  if (off >= in->effective_size())
-    return 0;
-  if (len == 0)
-    return 0;
-
   auto target_len = std::min(len, effective_size - off);
   uint64_t read_start;
   uint64_t read_len;
@@ -11645,7 +11639,6 @@ int Client::_read_sync(Fh *f, uint64_t off, uint64_t len, bufferlist *bl,
       left -= r;
       pbl->claim_append(tbl);
     }
-    auto effective_size = (fscrypt_denc ? in->effective_size() : in->size);

     // short read?
     if (r >= 0 && r < wanted) {
@@ -12485,9 +12478,7 @@ int64_t Client::_write(Fh *f, int64_t offset, uint64_t size, const char *buf,
       filer_iofinish.reset(new C_OnFinisher(new C_Lock_Client_Finisher(this, iofinish.get()), &objecter_finisher));
     }

-    get_cap_ref(in, CEPH_CAP_FILE_BUFFER);
-
-    enc_mgr->read_modify_write(iofinish.get());
+    enc_mgr->read_modify_write(filer_iofinish.get());

     if (onfinish) {
       // handle non-blocking caller (onfinish != nullptr), we can now safely

Actions

Also available in: Atom PDF