On Tue, Nov 19, 2024 at 8:02 AM Max Kellermann <max.kellermann@xxxxxxxxx> wrote: > > On Tue, Nov 19, 2024 at 1:51 PM Jeff Layton <jlayton@xxxxxxxxxx> wrote: > > -ENAMETOOLONG could be problematic there. This function is often called > > when we have a dentry and need to build a path to it to send to the MDS > > in a call. The system call that caused us to generate this path > > probably doesn't involve a pathname itself, so the caller may be > > confused by an -ENAMETOOLONG return. > > It is unfortunate that the Ceph-MDS protocol requires having to > convert a file descriptor back to a path name - but do you really > believe EIO would cause less confusion? ENAMETOOLONG is exactly what > happens, even if it's an internal error. But there are many error > codes that describe internal errors, so there's some prior art. The protocol does **not** require building the full path for most operations unless it involves a snapshot. For snapshots we have to climb the directory tree until we find the directory with the snapshot. e.g.: $ tree -a foo/ foo/.snap/ foo/bar/baz/.snap/ foo/ └── bar └── baz └── file foo/.snap/ └── 1 └── bar └── baz └── file foo/bar/baz/.snap/ ├── _1_1099511627779 │ └── file └── 2 └── file If you read "file" via foo/.snap/1 you get: 2024-11-19T13:47:23.523+0000 7f9b3b79b640 1 -- [v2:172.21.10.4:6874/192645635,v1:172.21.10.4:6875/192645635] <== client.4417 172.21.10.4:0/1322260999 43506 ==== client_request(client.4417:121 open #0x10000000003//1/bar/baz/file 2024-11-19T13:47:23.524518+0000 caller_uid=1141, caller_gid=1141{1000,1141,}) ==== 199+0+0 (crc 0 0 0) 0x55acb2d55180 con 0x55acb2b3cc00 and for foo/bar/baz/.snap/2/ 2024-11-19T13:47:56.796+0000 7f9b3b79b640 1 -- [v2:172.21.10.4:6874/192645635,v1:172.21.10.4:6875/192645635] <== client.4417 172.21.10.4:0/1322260999 43578 ==== client_request(client.4417:155 open #0x10000000005//2/file 2024-11-19T13:47:56.798370+0000 caller_uid=1141, caller_gid=1141{1000,1141,}) ==== 191+0+0 (crc 0 0 0) 0x55acb2d56000 con 0x55acb2b3cc00 (Note: the MDS protocol indicates a snapshot in the relative file path via double forward slash.) If you create "file": 2024-11-19T13:56:56.895+0000 7f9b34f8e640 7 mds.0.server reply_client_request 0 ((0) Success) client_request(client.4467:7 create owner_uid=1141, owner_gid=1141 #0x10000000005/file 2024-11-19T13:56:56.890430+0000 caller_uid=1141, caller_gid=1141{1000,1141,}) (During path lookups when planning to read the file, the client will usually get read caps so it doesn't need to formally open the file. So this last example uses a create.) -- Patrick Donnelly, Ph.D. He / Him / His Red Hat Partner Engineer IBM, Inc. GPG: 19F28A586F808C2402351B93C3301A3E258DD79D