Draft: vfs_ceph_rgw: Return ENOATTR for non-existing files/folders

If objects with names such as "d1/d2/d3/object" via s3cmd on bucket. s3cmd ends up creating a single object with key as "d1/d2/d3/object",

that been said it does not create individual components of path as object like d1, d1/d2, d1/d2/d3.

When client performs listing operation, smbd fetches extended attributes for d1, d1/d2, d1/d2/d3 via librgw.

However since these objects does not exists, underlying object store returns -ENOENT to librgw.

librgw internally translates any error returned to it as -EIO and sends back to smbd.

This results into cifs client displaying error like "ls: /mnt/rshare1/d1/d2/d3/: Input/output error".

This MR shall handle this situation by explicitly translate ENOENT to ENOATTR, thereby to get correctly handled by upper layers,

effectively providing correct result to cifs client.

Checklist

  • Commits have Signed-off-by: with name/author being identical to the commit author
  • (optional) This MR is just one part towards a larger feature.
  • (optional, if backport required) Bugzilla bug filed and BUG: tag added
  • Test suite updated with functionality tests
  • Test suite updated with negative tests
  • Documentation updated
  • CI timeout is 3h or higher (see Settings/CICD/General pipelines/ Timeout)

Reviewer's checklist:

  • There is a test suite reasonably covering new functionality or modifications
  • Function naming, parameters, return values, types, etc., are consistent and according to README.Coding.md
  • This feature/change has adequate documentation added
  • No obvious mistakes in the code

Merge request reports

Loading
Loading