afs: Make error on cell lookup failure consistent with OpenAFS
authorDavid Howells <dhowells@redhat.com>
Thu, 8 Jun 2023 08:43:54 +0000 (09:43 +0100)
committerDavid Howells <dhowells@redhat.com>
Fri, 17 Nov 2023 07:55:28 +0000 (07:55 +0000)
When kafs tries to look up a cell in the DNS or the local config, it will
translate a lookup failure into EDESTADDRREQ whereas OpenAFS translates it
into ENOENT.  Applications such as West expect the latter behaviour and
fail if they see the former.

This can be seen by trying to mount an unknown cell:

   # mount -t afs %example.com:cell.root /mnt
   mount: /mnt: mount(2) system call failed: Destination address required.

Fixes: 4d673da14533 ("afs: Support the AFS dynamic root")
Reported-by: Markus Suvanto <markus.suvanto@gmail.com>
Link: https://bugzilla.kernel.org/show_bug.cgi?id=216637
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Jeffrey Altman <jaltman@auristor.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org

fs/afs/dynroot.c

index 4d04ef2d3ae7bb8eeb00ae317bc2c659f71077f0..1fa8cf23bd3609bc35d3ba1ee2e8835fae2b55f2 100644 (file)
@@ -132,8 +132,8 @@ static int afs_probe_cell_name(struct dentry *dentry)
 
        ret = dns_query(net->net, "afsdb", name, len, "srv=1",
                        NULL, NULL, false);
-       if (ret == -ENODATA)
-               ret = -EDESTADDRREQ;
+       if (ret == -ENODATA || ret == -ENOKEY)
+               ret = -ENOENT;
        return ret;
 }