mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
This pull consists mostly of nfsd container work:
Scott Mayhew revived an old api that communicates with a userspace daemon to manage some on-disk state that's used to track clients across server reboots. We've been using a usermode_helper upcall for that, but it's tough to run those with the right namespaces, so a daemon is much friendlier to container use cases. Trond fixed nfsd's handling of user credentials in user namespaces. He also contributed patches that allow containers to support different sets of NFS protocol versions. The only remaining container bug I'm aware of is that the NFS reply cache is shared between all containers. If anyone's aware of other gaps in our container support, let me know. The rest of this is miscellaneous bugfixes. -----BEGIN PGP SIGNATURE----- iQJJBAABCAAzFiEEYtFWavXG9hZotryuJ5vNeUKO4b4FAlzcWNcVHGJmaWVsZHNA ZmllbGRzZXMub3JnAAoJECebzXlCjuG+DUEP/0WD3jKNAHFV3M5YQPAI9fz/iCND Db/A4oWP5qa6JmwmHe61il29QeGqkeFr/NPexgzM3Xw2E39d7RBXBeWyVDuqb0wr 6SCXjXibTsuAHg11nR8Xf0P5Vej3rfGbG6up5lLCIDTEZxVpWoaBJnM8+3bewuCj XbeiDW54oiMbmDjon3MXqVAIF/z7LjorecJ+Yw5+0Jy7KZ6num9Kt8+fi7qkEfFd i5Bp9KWgzlTbJUJV4EX3ZKN3zlGkfOvjoo2kP3PODPVMB34W8jSLKkRSA1tDWYZg 43WhBt5OODDlV6zpxSJXehYKIB4Ae469+RRaIL4F+ORRK+AzR0C/GTuOwJiG+P3J n95DX5WzX74nPOGQJgAvq4JNpZci85jM3jEK1TR2M7KiBDG5Zg+FTsPYVxx5Sgah Akl/pjLtHQPSdBbFGHn5TsXU+gqWNiKsKa9663tjxLb8ldmJun6JoQGkAEF9UJUn dzv0UxyHeHAblhSynY+WsUR+Xep9JDo/p5LyFK4if9Sd62KeA1uF/MFhAqpKZF81 mrgRCqW4sD8aVTBNZI06pZzmcZx4TRr2o+Oj5KAXf6Yk6TJRSGfnQscoMMBsTLkw VK1rBQ/71TpjLHGZZZEx1YJrkVZAMmw2ty4DtK2f9jeKO13bWmUpc6UATzVufHKA C1rUZXJ5YioDbYDy =TUdw -----END PGP SIGNATURE----- Merge tag 'nfsd-5.2' of git://linux-nfs.org/~bfields/linux Pull nfsd updates from Bruce Fields: "This consists mostly of nfsd container work: Scott Mayhew revived an old api that communicates with a userspace daemon to manage some on-disk state that's used to track clients across server reboots. We've been using a usermode_helper upcall for that, but it's tough to run those with the right namespaces, so a daemon is much friendlier to container use cases. Trond fixed nfsd's handling of user credentials in user namespaces. He also contributed patches that allow containers to support different sets of NFS protocol versions. The only remaining container bug I'm aware of is that the NFS reply cache is shared between all containers. If anyone's aware of other gaps in our container support, let me know. The rest of this is miscellaneous bugfixes" * tag 'nfsd-5.2' of git://linux-nfs.org/~bfields/linux: (23 commits) nfsd: update callback done processing locks: move checks from locks_free_lock() to locks_release_private() nfsd: fh_drop_write in nfsd_unlink nfsd: allow fh_want_write to be called twice nfsd: knfsd must use the container user namespace SUNRPC: rsi_parse() should use the current user namespace SUNRPC: Fix the server AUTH_UNIX userspace mappings lockd: Pass the user cred from knfsd when starting the lockd server SUNRPC: Temporary sockets should inherit the cred from their parent SUNRPC: Cache the process user cred in the RPC server listener nfsd: Allow containers to set supported nfs versions nfsd: Add custom rpcbind callbacks for knfsd SUNRPC: Allow further customisation of RPC program registration SUNRPC: Clean up generic dispatcher code SUNRPC: Add a callback to initialise server requests SUNRPC/nfs: Fix return value for nfs4_callback_compound() nfsd: handle legacy client tracking records sent by nfsdcld nfsd: re-order client tracking method selection nfsd: keep a tally of RECLAIM_COMPLETE operations when using nfsdcld nfsd: un-deprecate nfsdcld ...
This commit is contained in:
commit
700a800a94
34 changed files with 1085 additions and 316 deletions
|
|
@ -56,7 +56,7 @@ struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init)
|
|||
u32 nlm_version = (nlm_init->nfs_version == 2) ? 1 : 4;
|
||||
int status;
|
||||
|
||||
status = lockd_up(nlm_init->net);
|
||||
status = lockd_up(nlm_init->net, nlm_init->cred);
|
||||
if (status < 0)
|
||||
return ERR_PTR(status);
|
||||
|
||||
|
|
@ -241,7 +241,7 @@ reclaimer(void *ptr)
|
|||
allow_signal(SIGKILL);
|
||||
|
||||
down_write(&host->h_rwsem);
|
||||
lockd_up(net); /* note: this cannot fail as lockd is already running */
|
||||
lockd_up(net, NULL); /* note: this cannot fail as lockd is already running */
|
||||
|
||||
dprintk("lockd: reclaiming locks for host %s\n", host->h_name);
|
||||
|
||||
|
|
|
|||
|
|
@ -188,28 +188,31 @@ lockd(void *vrqstp)
|
|||
|
||||
static int create_lockd_listener(struct svc_serv *serv, const char *name,
|
||||
struct net *net, const int family,
|
||||
const unsigned short port)
|
||||
const unsigned short port,
|
||||
const struct cred *cred)
|
||||
{
|
||||
struct svc_xprt *xprt;
|
||||
|
||||
xprt = svc_find_xprt(serv, name, net, family, 0);
|
||||
if (xprt == NULL)
|
||||
return svc_create_xprt(serv, name, net, family, port,
|
||||
SVC_SOCK_DEFAULTS);
|
||||
SVC_SOCK_DEFAULTS, cred);
|
||||
svc_xprt_put(xprt);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int create_lockd_family(struct svc_serv *serv, struct net *net,
|
||||
const int family)
|
||||
const int family, const struct cred *cred)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = create_lockd_listener(serv, "udp", net, family, nlm_udpport);
|
||||
err = create_lockd_listener(serv, "udp", net, family, nlm_udpport,
|
||||
cred);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
return create_lockd_listener(serv, "tcp", net, family, nlm_tcpport);
|
||||
return create_lockd_listener(serv, "tcp", net, family, nlm_tcpport,
|
||||
cred);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -222,16 +225,17 @@ static int create_lockd_family(struct svc_serv *serv, struct net *net,
|
|||
* Returns zero if all listeners are available; otherwise a
|
||||
* negative errno value is returned.
|
||||
*/
|
||||
static int make_socks(struct svc_serv *serv, struct net *net)
|
||||
static int make_socks(struct svc_serv *serv, struct net *net,
|
||||
const struct cred *cred)
|
||||
{
|
||||
static int warned;
|
||||
int err;
|
||||
|
||||
err = create_lockd_family(serv, net, PF_INET);
|
||||
err = create_lockd_family(serv, net, PF_INET, cred);
|
||||
if (err < 0)
|
||||
goto out_err;
|
||||
|
||||
err = create_lockd_family(serv, net, PF_INET6);
|
||||
err = create_lockd_family(serv, net, PF_INET6, cred);
|
||||
if (err < 0 && err != -EAFNOSUPPORT)
|
||||
goto out_err;
|
||||
|
||||
|
|
@ -246,7 +250,8 @@ out_err:
|
|||
return err;
|
||||
}
|
||||
|
||||
static int lockd_up_net(struct svc_serv *serv, struct net *net)
|
||||
static int lockd_up_net(struct svc_serv *serv, struct net *net,
|
||||
const struct cred *cred)
|
||||
{
|
||||
struct lockd_net *ln = net_generic(net, lockd_net_id);
|
||||
int error;
|
||||
|
|
@ -258,7 +263,7 @@ static int lockd_up_net(struct svc_serv *serv, struct net *net)
|
|||
if (error)
|
||||
goto err_bind;
|
||||
|
||||
error = make_socks(serv, net);
|
||||
error = make_socks(serv, net, cred);
|
||||
if (error < 0)
|
||||
goto err_bind;
|
||||
set_grace_period(net);
|
||||
|
|
@ -461,7 +466,7 @@ static struct svc_serv *lockd_create_svc(void)
|
|||
/*
|
||||
* Bring up the lockd process if it's not already up.
|
||||
*/
|
||||
int lockd_up(struct net *net)
|
||||
int lockd_up(struct net *net, const struct cred *cred)
|
||||
{
|
||||
struct svc_serv *serv;
|
||||
int error;
|
||||
|
|
@ -474,7 +479,7 @@ int lockd_up(struct net *net)
|
|||
goto err_create;
|
||||
}
|
||||
|
||||
error = lockd_up_net(serv, net);
|
||||
error = lockd_up_net(serv, net, cred);
|
||||
if (error < 0) {
|
||||
lockd_unregister_notifiers();
|
||||
goto err_put;
|
||||
|
|
@ -807,5 +812,7 @@ static struct svc_program nlmsvc_program = {
|
|||
.pg_name = "lockd", /* service name */
|
||||
.pg_class = "nfsd", /* share authentication with nfsd */
|
||||
.pg_stats = &nlmsvc_stats, /* stats table */
|
||||
.pg_authenticate = &lockd_authenticate /* export authentication */
|
||||
.pg_authenticate = &lockd_authenticate, /* export authentication */
|
||||
.pg_init_request = svc_generic_init_request,
|
||||
.pg_rpcbind_set = svc_generic_rpcbind_set,
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue