mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 01:49:46 +00:00
afs: Support the AFS dynamic root
Support the AFS dynamic root which is a pseudo-volume that doesn't connect to any server resource, but rather is just a root directory that dynamically creates mountpoint directories where the name of such a directory is the name of the cell. Such a mount can be created thus: mount -t afs none /afs -o dyn Dynamic root superblocks aren't shared except by bind mounts and propagation. Cell root volumes can then be mounted by referring to them by name, e.g.: ls /afs/grand.central.org/ ls /afs/.grand.central.org/ The kernel will upcall to consult the DNS if the address wasn't supplied directly. Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
@@ -52,11 +52,11 @@
|
||||
* @name: Name to look up
|
||||
* @namelen: Length of name
|
||||
* @options: Request options (or NULL if no options)
|
||||
* @_result: Where to place the returned data.
|
||||
* @_result: Where to place the returned data (or NULL)
|
||||
* @_expiry: Where to store the result expiry time (or NULL)
|
||||
*
|
||||
* The data will be returned in the pointer at *result, and the caller is
|
||||
* responsible for freeing it.
|
||||
* The data will be returned in the pointer at *result, if provided, and the
|
||||
* caller is responsible for freeing it.
|
||||
*
|
||||
* The description should be of the form "[<query_type>:]<domain_name>", and
|
||||
* the options need to be appropriate for the query type requested. If no
|
||||
@@ -81,7 +81,7 @@ int dns_query(const char *type, const char *name, size_t namelen,
|
||||
kenter("%s,%*.*s,%zu,%s",
|
||||
type, (int)namelen, (int)namelen, name, namelen, options);
|
||||
|
||||
if (!name || namelen == 0 || !_result)
|
||||
if (!name || namelen == 0)
|
||||
return -EINVAL;
|
||||
|
||||
/* construct the query key description as "[<type>:]<name>" */
|
||||
@@ -146,13 +146,15 @@ int dns_query(const char *type, const char *name, size_t namelen,
|
||||
upayload = user_key_payload_locked(rkey);
|
||||
len = upayload->datalen;
|
||||
|
||||
ret = -ENOMEM;
|
||||
*_result = kmalloc(len + 1, GFP_KERNEL);
|
||||
if (!*_result)
|
||||
goto put;
|
||||
if (_result) {
|
||||
ret = -ENOMEM;
|
||||
*_result = kmalloc(len + 1, GFP_KERNEL);
|
||||
if (!*_result)
|
||||
goto put;
|
||||
|
||||
memcpy(*_result, upayload->data, len);
|
||||
(*_result)[len] = '\0';
|
||||
memcpy(*_result, upayload->data, len);
|
||||
(*_result)[len] = '\0';
|
||||
}
|
||||
|
||||
if (_expiry)
|
||||
*_expiry = rkey->expiry;
|
||||
|
||||
Reference in New Issue
Block a user