Commit cc738c1a authored by NeilBrown's avatar NeilBrown Committed by Greg Kroah-Hartman
Browse files

staging: lustre: opencode cfs_cap_{raise, lower, raised}



Each of these functions is used precisely once, so having
a separate exported function seems like overkill.

cfs_cap_raised() is trivial - one line.
cfs_cap_raise() and cfs_cap_lower() are used as a pair
which is more effectively implemented with
override_cred() / revert_creds().

Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5ebaa2d1
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -66,9 +66,6 @@ typedef u32 cfs_cap_t;
			 BIT(CAP_SYS_BOOT) |	\
			 BIT(CAP_SYS_RESOURCE))

void cfs_cap_raise(cfs_cap_t cap);
void cfs_cap_lower(cfs_cap_t cap);
int cfs_cap_raised(cfs_cap_t cap);
cfs_cap_t cfs_curproc_cap_pack(void);

/* __LIBCFS_CURPROC_H__ */
+0 −30
Original line number Diff line number Diff line
@@ -52,36 +52,6 @@
 * for Linux kernel.
 */

void cfs_cap_raise(cfs_cap_t cap)
{
	struct cred *cred;

	cred = prepare_creds();
	if (cred) {
		cap_raise(cred->cap_effective, cap);
		commit_creds(cred);
	}
}
EXPORT_SYMBOL(cfs_cap_raise);

void cfs_cap_lower(cfs_cap_t cap)
{
	struct cred *cred;

	cred = prepare_creds();
	if (cred) {
		cap_lower(cred->cap_effective, cap);
		commit_creds(cred);
	}
}
EXPORT_SYMBOL(cfs_cap_lower);

int cfs_cap_raised(cfs_cap_t cap)
{
	return cap_raised(current_cap(), cap);
}
EXPORT_SYMBOL(cfs_cap_raised);

static void cfs_kernel_cap_pack(kernel_cap_t kcap, cfs_cap_t *cap)
{
	/* XXX lost high byte */
+12 −6
Original line number Diff line number Diff line
@@ -466,7 +466,7 @@ int llog_open(const struct lu_env *env, struct llog_ctxt *ctxt,
	      struct llog_handle **lgh, struct llog_logid *logid,
	      char *name, enum llog_open_param open_param)
{
	int	 raised;
	const struct cred *old_cred = NULL;
	int	 rc;

	LASSERT(ctxt);
@@ -483,12 +483,18 @@ int llog_open(const struct lu_env *env, struct llog_ctxt *ctxt,
	(*lgh)->lgh_ctxt = ctxt;
	(*lgh)->lgh_logops = ctxt->loc_logops;

	raised = cfs_cap_raised(CAP_SYS_RESOURCE);
	if (!raised)
		cfs_cap_raise(CAP_SYS_RESOURCE);
	if (cap_raised(current_cap(), CAP_SYS_RESOURCE)) {
		struct cred *cred = prepare_creds();

		if (cred) {
			cap_raise(cred->cap_effective, CAP_SYS_RESOURCE);
			old_cred = override_creds(cred);
		}
	}
	rc = ctxt->loc_logops->lop_open(env, *lgh, logid, name, open_param);
	if (!raised)
		cfs_cap_lower(CAP_SYS_RESOURCE);
	if (old_cred)
		revert_creds(old_cred);

	if (rc) {
		llog_free_handle(*lgh);
		*lgh = NULL;