Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d0660f0b authored by David Howells's avatar David Howells
Browse files

dns_resolver: Allow used keys to be invalidated



Allow used DNS resolver keys to be invalidated after use if the caller is
doing its own caching of the results.  This reduces the amount of resources
required.

Fix AFS to invalidate DNS results to kill off permanent failure records
that get lodged in the resolver keyring and prevent future lookups from
happening.

Fixes: 0a5143f2 ("afs: Implement VL server rotation")
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
parent ca1cbbdc
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -251,7 +251,7 @@ struct afs_vlserver_list *afs_dns_query(struct afs_cell *cell, time64_t *_expiry
	_enter("%s", cell->name);

	ret = dns_query("afsdb", cell->name, cell->name_len, "srv=1",
			&result, _expiry);
			&result, _expiry, true);
	if (ret < 0) {
		_leave(" = %d [dns]", ret);
		return ERR_PTR(ret);
+1 −1
Original line number Diff line number Diff line
@@ -46,7 +46,7 @@ static int afs_probe_cell_name(struct dentry *dentry)
		return 0;
	}

	ret = dns_query("afsdb", name, len, "srv=1", NULL, NULL);
	ret = dns_query("afsdb", name, len, "srv=1", NULL, NULL, false);
	if (ret == -ENODATA)
		ret = -EDESTADDRREQ;
	return ret;
+1 −1
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@ dns_resolve_server_name_to_ip(const char *unc, char **ip_addr)
		goto name_is_IP_address;

	/* Perform the upcall */
	rc = dns_query(NULL, hostname, len, NULL, ip_addr, NULL);
	rc = dns_query(NULL, hostname, len, NULL, ip_addr, NULL, false);
	if (rc < 0)
		cifs_dbg(FYI, "%s: unable to resolve: %*.*s\n",
			 __func__, len, len, hostname);
+1 −1
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ ssize_t nfs_dns_resolve_name(struct net *net, char *name, size_t namelen,
	char *ip_addr = NULL;
	int ip_len;

	ip_len = dns_query(NULL, name, namelen, NULL, &ip_addr, NULL);
	ip_len = dns_query(NULL, name, namelen, NULL, &ip_addr, NULL, false);
	if (ip_len > 0)
		ret = rpc_pton(net, ip_addr, ip_len, sa, salen);
	else
+2 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include <uapi/linux/dns_resolver.h>

extern int dns_query(const char *type, const char *name, size_t namelen,
		     const char *options, char **_result, time64_t *_expiry);
		     const char *options, char **_result, time64_t *_expiry,
		     bool invalidate);

#endif /* _LINUX_DNS_RESOLVER_H */
Loading