From ea07cfecbe59a432180161b6376e8c52ba1abeab Mon Sep 17 00:00:00 2001 From: yury Date: Thu, 7 Jul 2005 07:57:07 +0000 Subject: [PATCH] - better to make vfs_create() to set correct uid and gid for new inode, as dirtying inode in ext3 is too expensive. Thanks to Andreas. --- lustre/obdfilter/filter.c | 32 ++++++++++++++++++++------------ lustre/utils/lconf | 4 ++-- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/lustre/obdfilter/filter.c b/lustre/obdfilter/filter.c index cf341c0..46b9803 100644 --- a/lustre/obdfilter/filter.c +++ b/lustre/obdfilter/filter.c @@ -2310,8 +2310,8 @@ static int filter_statfs(struct obd_device *obd, struct obd_statfs *osfs, RETURN(rc); } -int filter_create_object(struct obd_device *obd, obd_gr group, obd_id id, - obd_uid uid, obd_gid gid) +int filter_create_object(struct obd_device *obd, obd_gr group, + obd_id id, obd_uid uid, obd_gid gid) { struct dentry *dparent = NULL; struct dentry *dchild = NULL; @@ -2320,6 +2320,8 @@ int filter_create_object(struct obd_device *obd, obd_gr group, obd_id id, int err = 0, rc = 0; void *handle = NULL; void *lock = NULL; + obd_uid ouid; + obd_gid ogid; ENTRY; filter = &obd->u.filter; @@ -2353,22 +2355,28 @@ int filter_create_object(struct obd_device *obd, obd_gr group, obd_id id, GOTO(cleanup, rc = PTR_ERR(handle)); cleanup_phase = 3; + /* making ll_vfs_create() to use passed @uid and @gid */ + if (uid) { + ouid = current->fsuid; + current->fsuid = uid; + } + if (gid) { + ogid = current->fsgid; + current->fsgid = gid; + } + rc = ll_vfs_create(dparent->d_inode, dchild, S_IFREG, NULL); + + if (uid) + current->fsuid = ouid; + if (gid) + current->fsgid = ogid; + if (rc) { CERROR("create failed rc = %d\n", rc); GOTO(cleanup, rc); } - /* setting passed uid and gid */ - if (dchild->d_inode != NULL) { - if (uid) - dchild->d_inode->i_uid = uid; - if (gid) - dchild->d_inode->i_gid = gid; - if (uid || gid) - mark_inode_dirty(dchild->d_inode); - } - fsfilt_set_fs_flags(obd, dparent->d_inode, SM_DO_REC); /* save last created object id */ diff --git a/lustre/utils/lconf b/lustre/utils/lconf index 08cd122..07f3790 100755 --- a/lustre/utils/lconf +++ b/lustre/utils/lconf @@ -2906,11 +2906,11 @@ def getServiceLevel(self): ret = 6 elif type in ('ldlm',): ret = 20 - elif type in ('osd', 'cobd'): + elif type in ('osd',): ret = 30 elif type in ('mdsdev',): ret = 40 - elif type in ('lmv',): + elif type in ('lmv', 'cobd',): ret = 45 elif type in ('mountpoint', 'echoclient'): ret = 60 -- 1.8.3.1