__u32 valid;
__u32 fsuid;
__u32 fsgid;
+ __u32 capability;
__u32 mode;
__u32 uid;
__u32 gid;
__u32 sa_opcode;
__u32 sa_fsuid;
__u32 sa_fsgid;
+ __u32 sa_cap;
+ __u32 sa_reserved;
__u32 sa_valid;
struct ll_fid sa_fid;
__u32 sa_mode;
__u32 cr_opcode;
__u32 cr_fsuid;
__u32 cr_fsgid;
+ __u32 cr_cap;
+ __u32 cr_reserved;
__u32 cr_mode;
struct ll_fid cr_fid;
struct ll_fid cr_replayfid;
__u32 lk_opcode;
__u32 lk_fsuid;
__u32 lk_fsgid;
- __u32 lk_reserved;
+ __u32 lk_cap;
struct ll_fid lk_fid1;
struct ll_fid lk_fid2;
};
__u32 ul_opcode;
__u32 ul_fsuid;
__u32 ul_fsgid;
+ __u32 ul_cap;
+ __u32 ul_reserved;
__u32 ul_mode;
struct ll_fid ul_fid1;
struct ll_fid ul_fid2;
__u32 rn_opcode;
__u32 rn_fsuid;
__u32 rn_fsgid;
- __u32 rn_reserved;
+ __u32 rn_cap;
struct ll_fid rn_fid1;
struct ll_fid rn_fid2;
};
struct mds_update_record {
__u32 ur_fsuid;
__u32 ur_fsgid;
+ __u32 ur_cap;
__u32 ur_opcode;
struct ll_fid *ur_fid1;
struct ll_fid *ur_fid2;
struct obd_ucred {
__u32 ouc_fsuid;
__u32 ouc_fsgid;
+ __u32 ouc_cap;
};
#define OBD_RUN_CTXT_MAGIC 0xC0FFEEAA
mm_segment_t fs;
__u32 fsuid;
__u32 fsgid;
- __u32 override;
+ __u32 cap;
#ifdef OBD_CTXT_DEBUG
__u32 magic;
#endif
b->fsuid = HTON__u32(current->fsuid);
b->fsgid = HTON__u32(current->fsgid);
+ b->capability = HTON__u32(current->cap_effective);
mds_pack_fid(&b->fid1);
mds_pack_fid(&b->fid2);
rec->cr_opcode = HTON__u32(REINT_CREATE);
rec->cr_fsuid = HTON__u32(current->fsuid);
rec->cr_fsgid = HTON__u32(current->fsgid);
+ rec->cr_cap = HTON__u32(current->cap_effective);
ll_inode2fid(&rec->cr_fid, dir);
memset(&rec->cr_replayfid, 0, sizeof rec->cr_replayfid);
rec->cr_mode = HTON__u32(mode);
rec->sa_opcode = HTON__u32(REINT_SETATTR);
rec->sa_fsuid = HTON__u32(current->fsuid);
rec->sa_fsgid = HTON__u32(current->fsgid);
+ rec->sa_cap = HTON__u32(current->cap_effective);
ll_inode2fid(&rec->sa_fid, inode);
rec->sa_valid = HTON__u32(iattr->ia_valid);
rec->sa_mode = HTON__u32(iattr->ia_mode);
rec->ul_opcode = HTON__u32(REINT_UNLINK);
rec->ul_fsuid = HTON__u32(current->fsuid);
rec->ul_fsgid = HTON__u32(current->fsgid);
+ rec->ul_cap = HTON__u32(current->cap_effective);
rec->ul_mode = HTON__u32(mode);
ll_inode2fid(&rec->ul_fid1, inode);
if (child)
rec->lk_opcode = HTON__u32(REINT_LINK);
rec->lk_fsuid = HTON__u32(current->fsuid);
rec->lk_fsgid = HTON__u32(current->fsgid);
+ rec->lk_cap = HTON__u32(current->cap_effective);
ll_inode2fid(&rec->lk_fid1, inode);
ll_inode2fid(&rec->lk_fid2, dir);
rec->rn_opcode = HTON__u32(REINT_RENAME);
rec->rn_fsuid = HTON__u32(current->fsuid);
rec->rn_fsgid = HTON__u32(current->fsgid);
+ rec->rn_cap = HTON__u32(current->cap_effective);
ll_inode2fid(&rec->rn_fid1, srcdir);
ll_inode2fid(&rec->rn_fid2, tgtdir);
b->valid = NTOH__u32(b->valid);
b->fsuid = NTOH__u32(b->fsuid);
b->fsgid = NTOH__u32(b->fsgid);
+ b->capability = NTOH__u32(b->capability);
b->ino = NTOH__u32(b->ino);
b->mode = NTOH__u32(b->mode);
b->uid = NTOH__u32(b->uid);
r->ur_fsuid = NTOH__u32(rec->sa_fsuid);
r->ur_fsgid = NTOH__u32(rec->sa_fsgid);
+ r->ur_cap = NTOH__u32(rec->sa_cap);
r->ur_fid1 = &rec->sa_fid;
attr->ia_valid = NTOH__u32(rec->sa_valid);
attr->ia_mode = NTOH__u32(rec->sa_mode);
r->ur_fsuid = NTOH__u32(rec->cr_fsuid);
r->ur_fsgid = NTOH__u32(rec->cr_fsgid);
+ r->ur_cap = NTOH__u32(rec->cr_cap);
r->ur_fid1 = &rec->cr_fid;
r->ur_fid2 = &rec->cr_replayfid;
r->ur_mode = NTOH__u32(rec->cr_mode);
r->ur_fsuid = NTOH__u32(rec->lk_fsuid);
r->ur_fsgid = NTOH__u32(rec->lk_fsgid);
+ r->ur_cap = NTOH__u32(rec->lk_cap);
r->ur_fid1 = &rec->lk_fid1;
r->ur_fid2 = &rec->lk_fid2;
r->ur_fsuid = NTOH__u32(rec->ul_fsuid);
r->ur_fsgid = NTOH__u32(rec->ul_fsgid);
+ r->ur_cap = NTOH__u32(rec->ul_cap);
r->ur_mode = NTOH__u32(rec->ul_mode);
r->ur_fid1 = &rec->ul_fid1;
r->ur_fid2 = &rec->ul_fid2;
r->ur_fsuid = NTOH__u32(rec->rn_fsuid);
r->ur_fsgid = NTOH__u32(rec->rn_fsgid);
+ r->ur_cap = NTOH__u32(rec->rn_cap);
r->ur_fid1 = &rec->rn_fid1;
r->ur_fid2 = &rec->rn_fid2;
save->fs = get_fs();
save->pwd = dget(current->fs->pwd);
save->pwdmnt = mntget(current->fs->pwdmnt);
- save->override = cap_raised(current->cap_effective, CAP_DAC_OVERRIDE);
LASSERT(save->pwd);
LASSERT(save->pwdmnt);
save->fsuid = current->fsuid;
save->fsgid = current->fsgid;
+ save->cap = current->cap_effective;
if (uc) {
current->fsuid = uc->ouc_fsuid;
current->fsgid = uc->ouc_fsgid;
+ current->cap_effective = uc->ouc_cap;
}
set_fs(new->fs);
set_fs_pwd(current->fs, new->pwdmnt, new->pwd);
- if (save->override)
- cap_lower(current->cap_effective, CAP_DAC_OVERRIDE);
+ //if (save->override)
+ // cap_lower(current->cap_effective, CAP_DAC_OVERRIDE);
}
void pop_ctxt(struct obd_run_ctxt *saved)
//printk("pc6\n");
current->fsuid = saved->fsuid;
current->fsgid = saved->fsgid;
+ current->cap_effective = saved->cap;
- if (saved->override)
- cap_raise(current->cap_effective, CAP_DAC_OVERRIDE);
+ // if (saved->override)
+ // cap_raise(current->cap_effective, CAP_DAC_OVERRIDE);
}
/* utility to make a file */
* operation can lay its hands on it; but that is not
* always needed...
*/
- if (it->it_status == 0 &&
+ if ( // it->it_status == 0 &&
it->it_op != IT_RENAME2 &&
it->it_op != IT_SETATTR &&
it->it_op != IT_GETATTR &&
uc.ouc_fsuid = body->fsuid;
uc.ouc_fsgid = body->fsgid;
+ uc.ouc_cap = body->capability;
push_ctxt(&saved, &mds->mds_ctxt, &uc);
de = mds_fid2dentry(mds, &body->fid1, NULL);
if (IS_ERR(de)) {
body = lustre_msg_buf(req->rq_reqmsg, offset);
uc.ouc_fsuid = body->fsuid;
uc.ouc_fsgid = body->fsgid;
+ uc.ouc_cap = body->capability;
push_ctxt(&saved, &mds->mds_ctxt, &uc);
de = mds_fid2dentry(mds, &body->fid1, NULL);
if (IS_ERR(de)) {
uc.ouc_fsuid = body->fsuid;
uc.ouc_fsgid = body->fsgid;
- push_ctxt(&saved, &mds->mds_ctxt, &uc);
+ uc.ouc_cap = body->capability;
+ push_ctxt(&saved, &mds->mds_ctxt, &uc);
handle = mds_fs_start(mds, de->d_inode, MDS_FSOP_SETATTR);
if (!handle)
GOTO(out_ea, rc = -ENOMEM);
body = lustre_msg_buf(req->rq_reqmsg, 0);
uc.ouc_fsuid = body->fsuid;
uc.ouc_fsgid = body->fsgid;
+ uc.ouc_cap = body->capability;
push_ctxt(&saved, &mds->mds_ctxt, &uc);
de = mds_fid2dentry(mds, &body->fid1, &mnt);
if (IS_ERR(de))
uc.ouc_fsuid = rec->ur_fsuid;
uc.ouc_fsgid = rec->ur_fsgid;
+ uc.ouc_cap = rec->ur_cap;
push_ctxt(&saved, &mds->mds_ctxt, &uc);
rc = reinters[realop] (rec, offset, req);
ENTRY;
init_waitqueue_head(&req->rq_wait_for_rep);
- DEBUG_REQ(D_HA, req, "subsys: %s:", cli->cli_name);
+ // DEBUG_REQ(D_HA, req, "subsys: %s:", cli->cli_name);
/* XXX probably both an import and connection level are needed */
if (req->rq_level > conn->c_level) {
runtests runvmstat snaprun.sh tbox.sh common.sh
noinst_PROGRAMS = openunlink testreq truncate directio openme writeme mcreate
noinst_PROGRAMS += munlink tchmod toexcl fsx test_brw openclose createdestroy
-noinst_PROGRAMS += lovstripe stat # ldaptest
+noinst_PROGRAMS += lovstripe stat createmany # ldaptest
# ldaptest_SOURCES = ldaptest.c
tchmod_SOURCES = tchmod.c
createdestroy_SOURCES = createdestroy.c
lovstripe_SOURCES = lovstripe.c
stat_SOURCES = stat.c
+createmany_SOURCES = createmany.c
include $(top_srcdir)/Rules
--- /dev/null
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+int main(int argc, char ** argv)
+{
+ int i, rc, count;
+ char filename[4096];
+
+ if (argc < 3) {
+ printf("Usage %s filenamebase count\n", argv[0]);
+ return 1;
+ }
+
+ if (strlen(argv[1]) > 4080) {
+ printf("name too long\n");
+ return 1;
+ }
+
+ count = strtoul(argv[2], NULL, 0);
+
+
+ for (i=0 ; i < count ; i++) {
+ sprintf(filename, "%s-%d", argv[1], i);
+ rc = mknod(filename, S_IFREG| 0444, 0);
+ if (rc) {
+ printf("mknod(%s) error: %s\n",
+ filename, strerror(errno));
+ break;
+ }
+ }
+ return rc;
+}
#!/bin/sh
while sleep 1 ; do
egrep "ll_|ldlm|filp|dentry|inode|portals|size-[0-9]* " /proc/slabinfo
+ echo '-----------------------'
done