Read-only flexfile layout segments use the owner's uid plus one, so the client gets no write access on the data server. For a UUID or GUID owner from_kuid() is -1 and the "plus one" makes it 0, root. Use the overflow uid for them instead. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Jan Koester --- fs/nfsd/flexfilelayout.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fs/nfsd/flexfilelayout.c b/fs/nfsd/flexfilelayout.c index 6d531285ab..f459d2c1c1 100644 --- a/fs/nfsd/flexfilelayout.c +++ b/fs/nfsd/flexfilelayout.c @@ -51,7 +51,11 @@ nfsd4_ff_proc_layoutget(struct svc_rqst *rqstp, struct inode *inode, /* Do not allow a IOMODE_READ segment to have write pemissions */ if (seg->iomode == IOMODE_READ) { - u = from_kuid(&init_user_ns, inode->i_uid) + 1; + /* any uid but the owner's; a UUID or GUID has no "+ 1" */ + if (uid_is_legacy(inode->i_uid)) + u = from_kuid(&init_user_ns, inode->i_uid) + 1; + else + u = overflowuid; fl->uid = make_kuid(&init_user_ns, u); } else fl->uid = inode->i_uid; -- 2.56.0