make swapon() MPSAFE (will adjust syscalls.master later)
This commit is contained in:
parent
af4e4157df
commit
4609145389
@ -183,6 +183,9 @@ struct swapon_args {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MPSAFE
|
||||||
|
*/
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
int
|
int
|
||||||
swapon(p, uap)
|
swapon(p, uap)
|
||||||
@ -194,21 +197,25 @@ swapon(p, uap)
|
|||||||
struct nameidata nd;
|
struct nameidata nd;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
|
mtx_lock(&Giant);
|
||||||
|
|
||||||
error = suser(p);
|
error = suser(p);
|
||||||
if (error)
|
if (error)
|
||||||
return (error);
|
goto done2;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Swap metadata may not fit in the KVM if we have physical
|
* Swap metadata may not fit in the KVM if we have physical
|
||||||
* memory of >1GB.
|
* memory of >1GB.
|
||||||
*/
|
*/
|
||||||
if (swap_zone == NULL)
|
if (swap_zone == NULL) {
|
||||||
return (ENOMEM);
|
error = ENOMEM;
|
||||||
|
goto done2;
|
||||||
|
}
|
||||||
|
|
||||||
NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, uap->name, p);
|
NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, uap->name, p);
|
||||||
error = namei(&nd);
|
error = namei(&nd);
|
||||||
if (error)
|
if (error)
|
||||||
return (error);
|
goto done2;
|
||||||
|
|
||||||
NDFREE(&nd, NDF_ONLY_PNBUF);
|
NDFREE(&nd, NDF_ONLY_PNBUF);
|
||||||
vp = nd.ni_vp;
|
vp = nd.ni_vp;
|
||||||
@ -226,7 +233,8 @@ swapon(p, uap)
|
|||||||
|
|
||||||
if (error)
|
if (error)
|
||||||
vrele(vp);
|
vrele(vp);
|
||||||
|
done2:
|
||||||
|
mtx_unlock(&Giant);
|
||||||
return (error);
|
return (error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user