From: yangsheng Date: Tue, 28 Jul 2009 12:42:40 +0000 (+0000) Subject: Branch b1_8 X-Git-Tag: v1_8_2_01~1^2~208 X-Git-Url: https://git.whamcloud.com/gitweb?a=commitdiff_plain;h=881a7c94451f3a9ee3fd478fd52514cd4fc5de09;p=fs%2Flustre-release.git Branch b1_8 b=19808 i=adilger, shadow, green Landed for 2.6.30 kernel patchless support. --- diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4 index 8e7efaa..af463e9 100644 --- a/lustre/autoconf/lustre-core.m4 +++ b/lustre/autoconf/lustre-core.m4 @@ -583,6 +583,26 @@ LB_LINUX_TRY_COMPILE([ ]) ]) +# +# LC_D_OBTAIN_ALIAS +# starting from 2.6.18 kernel don't export do_kern_mount +# and want to use vfs_kern_mount instead. +# +AC_DEFUN([LC_D_OBTAIN_ALIAS], +[AC_MSG_CHECKING([d_obtain_alias exist in kernel]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + d_obtain_alias(NULL); +],[ + AC_DEFINE(HAVE_D_OBTAIN_ALIAS, 1, + [d_obtain_alias exist in kernel]) + AC_MSG_RESULT([yes]) +],[ + AC_MSG_RESULT([no]) +]) +]) + # # LC_INVALIDATEPAGE_RETURN_INT # 2.6.17 changes return type for invalidatepage to 'void' from 'int' @@ -1546,6 +1566,57 @@ LB_LINUX_TRY_COMPILE([ ]) ]) +# 2.6.29 change prepare/commit_write to write_begin/end +AC_DEFUN([LC_WRITE_BEGIN_END], +[AC_MSG_CHECKING([if kernel has .write_begin/end]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + struct address_space_operations aops; + + aops.write_begin = NULL; + aops.write_end = NULL; +], [ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_KERNEL_WRITE_BEGIN_END, 1, + [kernel has .write_begin/end]) +],[ + AC_MSG_RESULT([no]) +]) +]) + +# 2.6.29 blkdev_put has 2 arguments +AC_DEFUN([LC_BLKDEV_PUT_2ARGS], +[AC_MSG_CHECKING([blkdev_put needs 2 parameters]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + blkdev_put(NULL, 0); +],[ + AC_DEFINE(HAVE_BLKDEV_PUT_2ARGS, 1, + [blkdev_put needs 2 paramters]) + AC_MSG_RESULT([yes]) +],[ + AC_MSG_RESULT([no]) +]) +]) + +# 2.6.29 dentry_open has 4 arguments +AC_DEFUN([LC_DENTRY_OPEN_4ARGS], +[AC_MSG_CHECKING([dentry_open needs 4 parameters]) +LB_LINUX_TRY_COMPILE([ + #include +],[ + dentry_open(NULL, NULL, 0, NULL); +],[ + AC_DEFINE(HAVE_DENTRY_OPEN_4ARGS, 1, + [dentry_open needs 4 paramters]) + AC_MSG_RESULT([yes]) +],[ + AC_MSG_RESULT([no]) +]) +]) + # # LC_PROG_LINUX # @@ -1686,6 +1757,12 @@ AC_DEFUN([LC_PROG_LINUX], LC_VFS_SYMLINK_5ARGS LC_SB_ANY_QUOTA_ACTIVE LC_SB_HAS_QUOTA_ACTIVE + + #2.6.29 + LC_WRITE_BEGIN_END + LC_D_OBTAIN_ALIAS + LC_BLKDEV_PUT_2ARGS + LC_DENTRY_OPEN_4ARGS ]) # diff --git a/lustre/include/liblustre.h b/lustre/include/liblustre.h index 0522e56..aa7ddca 100644 --- a/lustre/include/liblustre.h +++ b/lustre/include/liblustre.h @@ -618,6 +618,8 @@ typedef struct task_struct cfs_task_t; #define cfs_current() current #define cfs_curproc_pid() (current->pid) #define cfs_curproc_comm() (current->comm) +#define cfs_curproc_fsuid() (current->fsuid) +#define cfs_curproc_fsgid() (current->fsgid) extern struct task_struct *current; int in_group_p(gid_t gid); diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h index da0cb36..32b922c 100644 --- a/lustre/include/linux/lustre_compat25.h +++ b/lustre/include/linux/lustre_compat25.h @@ -43,6 +43,7 @@ #error sorry, lustre requires at least 2.6.5 #endif +#include #include #include @@ -137,8 +138,8 @@ struct group_info *groups_alloc(int gidsetsize); void groups_free(struct group_info *ginfo); #else /* >= 2.6.4 */ -#define current_ngroups current->group_info->ngroups -#define current_groups current->group_info->small_block +#define current_ngroups current_cred()->group_info->ngroups +#define current_groups current_cred()->group_info->small_block #endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,4) */ @@ -202,7 +203,19 @@ void groups_free(struct group_info *ginfo); #define to_kdev_t(dev) (dev) #define kdev_t_to_nr(dev) (dev) #define val_to_kdev(dev) (dev) -#define ILOOKUP(sb, ino, test, data) ilookup5(sb, ino, test, data); +#define ILOOKUP(sb, ino, test, data) ilookup5(sb, ino, test, (void *)(data)); + +#ifdef HAVE_BLKDEV_PUT_2ARGS +#define ll_blkdev_put(a, b) blkdev_put(a, b) +#else +#define ll_blkdev_put(a, b) blkdev_put(a) +#endif + +#ifdef HAVE_DENTRY_OPEN_4ARGS +#define ll_dentry_open(a, b, c, d) dentry_open(a, b, c, d) +#else +#define ll_dentry_open(a, b, c, d) dentry_open(a, b, c) +#endif #include @@ -395,6 +408,10 @@ ll_kern_mount(const char *fstype, int flags, const char *name, void *data) #define ll_do_statfs(sb, sfs) (sb)->s_op->statfs((sb), (sfs)) #endif +#ifndef HAVE_D_OBTAIN_ALIAS +#define d_obtain_alias(inode) d_alloc_anon(inode) +#endif + #ifdef HAVE_UNREGISTER_BLKDEV_RETURN_INT #define ll_unregister_blkdev(a,b) unregister_blkdev((a),(b)) #else diff --git a/lustre/include/lustre/ll_fiemap.h b/lustre/include/lustre/ll_fiemap.h index 271ca5b..7a64d80 100644 --- a/lustre/include/lustre/ll_fiemap.h +++ b/lustre/include/lustre/ll_fiemap.h @@ -79,10 +79,6 @@ struct ll_user_fiemap { #define FIEMAP_FLAG_XATTR 0x00000002 /* map extended attribute tree */ #define FIEMAP_FLAG_DEVICE_ORDER 0x40000000 /* return device ordered mapping */ -#define FIEMAP_FLAGS_COMPAT (FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR | \ - FIEMAP_FLAG_DEVICE_ORDER) - - #define FIEMAP_EXTENT_LAST 0x00000001 /* Last extent in file. */ #define FIEMAP_EXTENT_UNKNOWN 0x00000002 /* Data location unknown. */ #define FIEMAP_EXTENT_DELALLOC 0x00000004 /* Location still pending. diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c index 301edbf..6737947 100644 --- a/lustre/llite/dir.c +++ b/lustre/llite/dir.c @@ -1491,7 +1491,7 @@ static int ll_dir_ioctl(struct inode *inode, struct file *file, GOTO(out_quotactl, rc = -EPERM); break; case Q_GETQUOTA: - if (((type == USRQUOTA && current->euid != id) || + if (((type == USRQUOTA && cfs_curproc_euid() != id) || (type == GRPQUOTA && !in_egroup_p(id))) && !cfs_capable(CFS_CAP_SYS_ADMIN)) GOTO(out_quotactl, rc = -EPERM); diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c index 9ace0cb..2060941 100644 --- a/lustre/llite/llite_lib.c +++ b/lustre/llite/llite_lib.c @@ -1542,7 +1542,7 @@ int ll_setattr_raw(struct inode *inode, struct iattr *attr) /* POSIX: check before ATTR_*TIME_SET set (from inode_change_ok) */ if (ia_valid & (ATTR_MTIME_SET | ATTR_ATIME_SET)) { - if (current->fsuid != inode->i_uid && + if (cfs_curproc_fsuid() != inode->i_uid && !cfs_capable(CFS_CAP_FOWNER)) RETURN(-EPERM); } diff --git a/lustre/llite/llite_nfs.c b/lustre/llite/llite_nfs.c index c4c1f15..48a1f280 100644 --- a/lustre/llite/llite_nfs.c +++ b/lustre/llite/llite_nfs.c @@ -132,7 +132,7 @@ static struct dentry *ll_iget_for_nfs(struct super_block *sb, RETURN(ERR_PTR(-ESTALE)); } - result = d_alloc_anon(inode); + result = d_obtain_alias(inode); if (!result) { iput(inode); RETURN(ERR_PTR(-ENOMEM)); diff --git a/lustre/llite/lloop.c b/lustre/llite/lloop.c index eb1244e..1aad475 100644 --- a/lustre/llite/lloop.c +++ b/lustre/llite/lloop.c @@ -559,9 +559,15 @@ static int loop_clr_fd(struct lloop_device *lo, struct block_device *bdev, return 0; } +#ifdef HAVE_BLKDEV_PUT_2ARGS +static int lo_open(struct block_device *bdev, fmode_t mode) +{ + struct lloop_device *lo = bdev->bd_disk->private_data; +#else static int lo_open(struct inode *inode, struct file *file) { struct lloop_device *lo = inode->i_bdev->bd_disk->private_data; +#endif down(&lo->lo_ctl_mutex); lo->lo_refcnt++; @@ -570,9 +576,15 @@ static int lo_open(struct inode *inode, struct file *file) return 0; } +#ifdef HAVE_BLKDEV_PUT_2ARGS +static int lo_release(struct gendisk *disk, fmode_t mode) +{ + struct lloop_device *lo = disk->private_data; +#else static int lo_release(struct inode *inode, struct file *file) { struct lloop_device *lo = inode->i_bdev->bd_disk->private_data; +#endif down(&lo->lo_ctl_mutex); --lo->lo_refcnt; @@ -582,11 +594,18 @@ static int lo_release(struct inode *inode, struct file *file) } /* lloop device node's ioctl function. */ +#ifdef HAVE_BLKDEV_PUT_2ARGS +static int lo_ioctl(struct block_device *bdev, fmode_t mode, + unsigned int cmd, unsigned long arg) +{ + struct lloop_device *lo = bdev->bd_disk->private_data; +#else static int lo_ioctl(struct inode *inode, struct file *unused, unsigned int cmd, unsigned long arg) { struct lloop_device *lo = inode->i_bdev->bd_disk->private_data; struct block_device *bdev = inode->i_bdev; +#endif int err = 0; down(&lloop_mutex); @@ -594,7 +613,7 @@ static int lo_ioctl(struct inode *inode, struct file *unused, case LL_IOC_LLOOP_DETACH: { err = loop_clr_fd(lo, bdev, 2); if (err == 0) - blkdev_put(bdev); /* grabbed in LLOOP_ATTACH */ + ll_blkdev_put(bdev, 0); /* grabbed in LLOOP_ATTACH */ break; } @@ -682,7 +701,7 @@ static enum llioc_iter lloop_ioctl(struct inode *unused, struct file *file, err = loop_set_fd(lo, NULL, bdev, file); if (err) { fput(file); - blkdev_put(bdev); + ll_blkdev_put(bdev, 0); } break; @@ -706,7 +725,7 @@ static enum llioc_iter lloop_ioctl(struct inode *unused, struct file *file, bdev = lo->lo_device; err = loop_clr_fd(lo, bdev, 1); if (err == 0) - blkdev_put(bdev); /* grabbed in LLOOP_ATTACH */ + ll_blkdev_put(bdev, 0); /* grabbed in LLOOP_ATTACH */ break; } diff --git a/lustre/llite/lproc_llite.c b/lustre/llite/lproc_llite.c index 266ade3..579010b 100644 --- a/lustre/llite/lproc_llite.c +++ b/lustre/llite/lproc_llite.c @@ -760,7 +760,7 @@ void ll_stats_ops_tally(struct ll_sb_info *sbi, int op, int count) sbi->ll_stats_track_id == current->parent->pid) lprocfs_counter_add(sbi->ll_stats, op, count); else if (sbi->ll_stats_track_type == STATS_TRACK_GID && - sbi->ll_stats_track_id == current->gid) + sbi->ll_stats_track_id == cfs_curproc_gid()) lprocfs_counter_add(sbi->ll_stats, op, count); } EXPORT_SYMBOL(ll_stats_ops_tally); diff --git a/lustre/llite/namei.c b/lustre/llite/namei.c index 3535efc..97fe090 100644 --- a/lustre/llite/namei.c +++ b/lustre/llite/namei.c @@ -880,7 +880,7 @@ static int ll_new_node(struct inode *dir, struct qstr *name, GOTO(err_exit, err); err = mdc_create(sbi->ll_mdc_exp, &op_data, tgt, tgt_len, - mode, current->fsuid, current->fsgid, + mode, cfs_curproc_fsuid(), cfs_curproc_fsgid(), cfs_curproc_cap_pack(), rdev, &request); if (err) GOTO(err_exit, err); diff --git a/lustre/llite/rw26.c b/lustre/llite/rw26.c index c07768f..e3a521c 100644 --- a/lustre/llite/rw26.c +++ b/lustre/llite/rw26.c @@ -353,6 +353,45 @@ static ssize_t ll_direct_IO_26(int rw, struct kiocb *kiocb, return ll_direct_IO(rw, kiocb->ki_filp, iov, file_offset, nr_segs, 1); } +#ifdef HAVE_KERNEL_WRITE_BEGIN_END +static int ll_write_begin(struct file *file, struct address_space *mapping, + loff_t pos, unsigned len, unsigned flags, + struct page **pagep, void **fsdata) +{ + pgoff_t index = pos >> PAGE_CACHE_SHIFT; + struct page *page; + int rc; + unsigned from = pos & (PAGE_CACHE_SIZE - 1); + ENTRY; + + page = grab_cache_page_write_begin(mapping, index, flags); + if (!page) + RETURN(-ENOMEM); + + *pagep = page; + + rc = ll_prepare_write(file, page, from, from + len); + if (rc) { + unlock_page(page); + page_cache_release(page); + } + RETURN(rc); +} + +static int ll_write_end(struct file *file, struct address_space *mapping, + loff_t pos, unsigned len, unsigned copied, + struct page *page, void *fsdata) +{ + unsigned from = pos & (PAGE_CACHE_SIZE - 1); + int rc; + rc = ll_commit_write(file, page, from, from + copied); + + unlock_page(page); + page_cache_release(page); + return rc?rc:copied; +} +#endif + struct address_space_operations ll_aops = { .readpage = ll_readpage, // .readpages = ll_readpages, @@ -361,8 +400,13 @@ struct address_space_operations ll_aops = { .writepages = generic_writepages, .set_page_dirty = __set_page_dirty_nobuffers, .sync_page = NULL, +#ifdef HAVE_KERNEL_WRITE_BEGIN_END + .write_begin = ll_write_begin, + .write_end = ll_write_end, +#else .prepare_write = ll_prepare_write, .commit_write = ll_commit_write, +#endif .invalidatepage = ll_invalidatepage, .releasepage = ll_releasepage, .bmap = NULL diff --git a/lustre/lvfs/lvfs_linux.c b/lustre/lvfs/lvfs_linux.c index 5a77267..bb7be27 100644 --- a/lustre/lvfs/lvfs_linux.c +++ b/lustre/lvfs/lvfs_linux.c @@ -86,9 +86,13 @@ static void push_group_info(struct lvfs_run_ctxt *save, current_ngroups = 0; } else { #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,4) + struct cred *cred; task_lock(current); - save->group_info = current->group_info; - current->group_info = ginfo; + save->group_info = current_cred()->group_info; + if ((cred = prepare_creds())) { + cred->group_info = ginfo; + commit_creds(cred); + } task_unlock(current); #else LASSERT(ginfo->ngroups <= NGROUPS); @@ -116,8 +120,12 @@ static void pop_group_info(struct lvfs_run_ctxt *save, current_ngroups = save->ngroups; } else { #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,4) + struct cred *cred; task_lock(current); - current->group_info = save->group_info; + if ((cred = prepare_creds())) { + cred->group_info = save->group_info; + commit_creds(cred); + } task_unlock(current); #else current->ngroups = save->group_info.ngroups; @@ -160,13 +168,18 @@ void push_ctxt(struct lvfs_run_ctxt *save, struct lvfs_run_ctxt *new_ctx, LASSERT(new_ctx->pwdmnt); if (uc) { - save->luc.luc_fsuid = current->fsuid; - save->luc.luc_fsgid = current->fsgid; - save->luc.luc_cap = current->cap_effective; + struct cred *cred; + save->luc.luc_fsuid = current_fsuid(); + save->luc.luc_fsgid = current_fsgid(); + save->luc.luc_cap = current_cap(); + + if ((cred = prepare_creds())) { + cred->fsuid = uc->luc_fsuid; + cred->fsgid = uc->luc_fsgid; + cred->cap_effective = uc->luc_cap; + commit_creds(cred); + } - current->fsuid = uc->luc_fsuid; - current->fsgid = uc->luc_fsgid; - current->cap_effective = uc->luc_cap; push_group_info(save, uc->luc_uce); } current->fs->umask = 0; /* umask already applied on client */ @@ -217,9 +230,14 @@ void pop_ctxt(struct lvfs_run_ctxt *saved, struct lvfs_run_ctxt *new_ctx, mntput(saved->pwdmnt); current->fs->umask = saved->luc.luc_umask; if (uc) { - current->fsuid = saved->luc.luc_fsuid; - current->fsgid = saved->luc.luc_fsgid; - current->cap_effective = saved->luc.luc_cap; + struct cred *cred; + if ((cred = prepare_creds())) { + cred->fsuid = saved->luc.luc_fsuid; + cred->fsgid = saved->luc.luc_fsgid; + cred->cap_effective = saved->luc.luc_cap; + commit_creds(cred); + } + pop_group_info(saved, uc->luc_uce); } @@ -418,7 +436,7 @@ struct l_file *l_dentry_open(struct lvfs_run_ctxt *ctxt, struct l_dentry *de, int flags) { mntget(ctxt->pwdmnt); - return dentry_open(de, ctxt->pwdmnt, flags); + return ll_dentry_open(de, ctxt->pwdmnt, flags, current_cred()); } EXPORT_SYMBOL(l_dentry_open); diff --git a/lustre/mdc/mdc_lib.c b/lustre/mdc/mdc_lib.c index a7f4e83..443227c 100644 --- a/lustre/mdc/mdc_lib.c +++ b/lustre/mdc/mdc_lib.c @@ -63,8 +63,8 @@ static void mdc_readdir_pack_18(struct ptlrpc_request *req, int offset, b = lustre_msg_buf(req->rq_reqmsg, offset, sizeof(*b)); - b->fsuid = current->fsuid; - b->fsgid = current->fsgid; + b->fsuid = cfs_curproc_fsuid(); + b->fsgid = cfs_curproc_fsgid(); b->capability = cfs_curproc_cap_pack(); b->fid1 = *fid; b->size = pg_off; /* !! */ @@ -80,8 +80,8 @@ static void mdc_readdir_pack_20(struct ptlrpc_request *req, int offset, ENTRY; b = lustre_msg_buf(req->rq_reqmsg, offset, sizeof(*b)); - b->fsuid = current->fsuid; - b->fsgid = current->fsgid; + b->fsuid = cfs_curproc_fsuid(); + b->fsgid = cfs_curproc_fsgid(); b->capability = cfs_curproc_cap_pack(); if (fid) { @@ -117,8 +117,8 @@ static void mdc_pack_req_body_18(struct ptlrpc_request *req, int offset, b->valid = valid; b->eadatasize = ea_size; b->flags = flags; - b->fsuid = current->fsuid; - b->fsgid = current->fsgid; + b->fsuid = cfs_curproc_fsuid(); + b->fsgid = cfs_curproc_fsgid(); b->capability = cfs_curproc_cap_pack(); EXIT; } @@ -139,8 +139,8 @@ static void mdc_pack_req_body_20(struct ptlrpc_request *req, int offset, b->valid |= OBD_MD_FLID; } - b->fsuid = current->fsuid; - b->fsgid = current->fsgid; + b->fsuid = cfs_curproc_fsuid(); + b->fsgid = cfs_curproc_fsgid(); b->capability = cfs_curproc_cap_pack(); EXIT; } @@ -308,8 +308,8 @@ static void mdc_open_pack_18(struct ptlrpc_request *req, int offset, /* XXX do something about time, uid, gid */ rec->cr_opcode = REINT_OPEN; - rec->cr_fsuid = current->fsuid; - rec->cr_fsgid = current->fsgid; + rec->cr_fsuid = cfs_curproc_fsuid(); + rec->cr_fsgid = cfs_curproc_fsgid(); rec->cr_cap = cfs_curproc_cap_pack(); rec->cr_fid = op_data->fid1; memset(&rec->cr_replayfid, 0, sizeof(rec->cr_replayfid)); @@ -349,8 +349,8 @@ static void mdc_open_pack_20(struct ptlrpc_request *req, int offset, /* XXX do something about time, uid, gid */ rec->cr_opcode = REINT_OPEN; - rec->cr_fsuid = current->fsuid; - rec->cr_fsgid = current->fsgid; + rec->cr_fsuid = cfs_curproc_fsuid(); + rec->cr_fsgid = cfs_curproc_fsgid(); rec->cr_cap = cfs_curproc_cap_pack(); memcpy(&rec->cr_fid1, &op_data->fid1, sizeof(op_data->fid1)); memcpy(&rec->cr_fid2, &op_data->fid2, sizeof(op_data->fid2)); @@ -444,8 +444,8 @@ void mdc_setattr_pack_18(struct ptlrpc_request *req, int offset, ENTRY; rec->sa_opcode = REINT_SETATTR; - rec->sa_fsuid = current->fsuid; - rec->sa_fsgid = current->fsgid; + rec->sa_fsuid = cfs_curproc_fsuid(); + rec->sa_fsgid = cfs_curproc_fsgid(); rec->sa_cap = cfs_curproc_cap_pack(); rec->sa_fid = data->fid1; rec->sa_suppgid = -1; @@ -492,8 +492,8 @@ static void mdc_setattr_pack_20(struct ptlrpc_request *req, int offset, ENTRY; rec->sa_opcode = REINT_SETATTR; - rec->sa_fsuid = current->fsuid; - rec->sa_fsgid = current->fsgid; + rec->sa_fsuid = cfs_curproc_fsuid(); + rec->sa_fsgid = cfs_curproc_fsgid(); rec->sa_cap = cfs_curproc_cap_pack(); memcpy(&rec->sa_fid, &data->fid1, sizeof(data->fid1)); rec->sa_suppgid = -1; @@ -552,8 +552,8 @@ static void mdc_unlink_pack_18(struct ptlrpc_request *req, int offset, LASSERT (rec != NULL); rec->ul_opcode = REINT_UNLINK; - rec->ul_fsuid = current->fsuid; - rec->ul_fsgid = current->fsgid; + rec->ul_fsuid = cfs_curproc_fsuid(); + rec->ul_fsgid = cfs_curproc_fsgid(); rec->ul_cap = cfs_curproc_cap_pack(); rec->ul_mode = data->create_mode; rec->ul_suppgid = data->suppgids[0]; @@ -578,8 +578,8 @@ static void mdc_unlink_pack_20(struct ptlrpc_request *req, int offset, LASSERT (rec != NULL); rec->ul_opcode = REINT_UNLINK; - rec->ul_fsuid = current->fsuid; - rec->ul_fsgid = current->fsgid; + rec->ul_fsuid = cfs_curproc_fsuid(); + rec->ul_fsgid = cfs_curproc_fsgid(); rec->ul_cap = cfs_curproc_cap_pack(); rec->ul_mode = data->create_mode; rec->ul_suppgid1= data->suppgids[0]; @@ -613,8 +613,8 @@ static void mdc_link_pack_18(struct ptlrpc_request *req, int offset, rec = lustre_msg_buf(req->rq_reqmsg, offset, sizeof (*rec)); rec->lk_opcode = REINT_LINK; - rec->lk_fsuid = current->fsuid; - rec->lk_fsgid = current->fsgid; + rec->lk_fsuid = cfs_curproc_fsuid(); + rec->lk_fsgid = cfs_curproc_fsgid(); rec->lk_cap = cfs_curproc_cap_pack(); rec->lk_suppgid1 = data->suppgids[0]; rec->lk_suppgid2 = data->suppgids[1]; @@ -637,8 +637,8 @@ static void mdc_link_pack_20(struct ptlrpc_request *req, int offset, rec = lustre_msg_buf(req->rq_reqmsg, offset, sizeof (*rec)); rec->lk_opcode = REINT_LINK; - rec->lk_fsuid = current->fsuid; - rec->lk_fsgid = current->fsgid; + rec->lk_fsuid = cfs_curproc_fsuid(); + rec->lk_fsgid = cfs_curproc_fsgid(); rec->lk_cap = cfs_curproc_cap_pack(); rec->lk_suppgid1 = data->suppgids[0]; rec->lk_suppgid2 = data->suppgids[1]; @@ -676,8 +676,8 @@ static void mdc_rename_pack_18(struct ptlrpc_request *req, int offset, /* XXX do something about time, uid, gid */ rec->rn_opcode = REINT_RENAME; - rec->rn_fsuid = current->fsuid; - rec->rn_fsgid = current->fsgid; + rec->rn_fsuid = cfs_curproc_fsuid(); + rec->rn_fsgid = cfs_curproc_fsgid(); rec->rn_cap = cfs_curproc_cap_pack(); rec->rn_suppgid1 = data->suppgids[0]; rec->rn_suppgid2 = data->suppgids[1]; @@ -707,8 +707,8 @@ static void mdc_rename_pack_20(struct ptlrpc_request *req, int offset, /* XXX do something about time, uid, gid */ rec->rn_opcode = REINT_RENAME; - rec->rn_fsuid = current->fsuid; - rec->rn_fsgid = current->fsgid; + rec->rn_fsuid = cfs_curproc_fsuid(); + rec->rn_fsgid = cfs_curproc_fsgid(); rec->rn_cap = cfs_curproc_cap_pack(); rec->rn_suppgid1 = data->suppgids[0]; rec->rn_suppgid2 = data->suppgids[1]; @@ -749,8 +749,8 @@ static void mdc_getattr_pack_18(struct ptlrpc_request *req, int offset, b = lustre_msg_buf(req->rq_reqmsg, offset, sizeof(*b)); - b->fsuid = current->fsuid; - b->fsgid = current->fsgid; + b->fsuid = cfs_curproc_fsuid(); + b->fsgid = cfs_curproc_fsgid(); b->capability = cfs_curproc_cap_pack(); b->valid = valid; b->flags = flags | MDS_BFLAG_EXT_FLAGS; @@ -781,8 +781,8 @@ static void mdc_getattr_pack_20(struct ptlrpc_request *req, int offset, b = lustre_msg_buf(req->rq_reqmsg, offset, sizeof (*b)); - b->fsuid = current->fsuid; - b->fsgid = current->fsgid; + b->fsuid = cfs_curproc_fsuid(); + b->fsgid = cfs_curproc_fsgid(); b->capability = cfs_curproc_cap_pack(); b->valid = valid; b->flags = flags | MDS_BFLAG_EXT_FLAGS; @@ -861,8 +861,8 @@ static void mdc_close_pack_20(struct ptlrpc_request *req, int offset, rec = lustre_msg_buf(req->rq_reqmsg, offset + 1, sizeof(*rec)); rec->sa_opcode = REINT_SETATTR; - rec->sa_fsuid = current->fsuid; - rec->sa_fsgid = current->fsgid; + rec->sa_fsuid = cfs_curproc_fsuid(); + rec->sa_fsgid = cfs_curproc_fsgid(); rec->sa_cap = cfs_curproc_cap_pack(); rec->sa_suppgid = -1; diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c index f42064c..bca065e 100644 --- a/lustre/mdc/mdc_request.c +++ b/lustre/mdc/mdc_request.c @@ -303,8 +303,8 @@ int mdc_xattr_common(struct obd_export *exp, struct ll_fid *fid, rec = lustre_msg_buf(req->rq_reqmsg, REQ_REC_OFF, sizeof(struct mdt_rec_setxattr)); rec->sx_opcode = REINT_SETXATTR; - rec->sx_fsuid = current->fsuid; - rec->sx_fsgid = current->fsgid; + rec->sx_fsuid = cfs_curproc_fsuid(); + rec->sx_fsgid = cfs_curproc_fsgid(); rec->sx_cap = cfs_curproc_cap_pack(); rec->sx_suppgid1 = -1; rec->sx_suppgid2 = -1; diff --git a/lustre/obdclass/linux/linux-module.c b/lustre/obdclass/linux/linux-module.c index 431f074..dc3ff63 100644 --- a/lustre/obdclass/linux/linux-module.c +++ b/lustre/obdclass/linux/linux-module.c @@ -204,7 +204,7 @@ static int obd_class_ioctl(struct inode *inode, struct file *filp, int err = 0; ENTRY; - if (current->fsuid != 0) + if (cfs_curproc_fsuid() != 0) RETURN(err = -EACCES); if ((cmd & 0xffffff00) == ((int)'T') << 8) /* ignore all tty ioctls */ RETURN(err = -ENOTTY); diff --git a/lustre/obdclass/lustre_handles.c b/lustre/obdclass/lustre_handles.c index 43b0125..d320889 100644 --- a/lustre/obdclass/lustre_handles.c +++ b/lustre/obdclass/lustre_handles.c @@ -54,6 +54,7 @@ # define list_for_each_safe_rcu list_for_each_safe # define rcu_read_lock() spin_lock(&bucket->lock) # define rcu_read_unlock() spin_unlock(&bucket->lock) +# define list_for_each_entry_rcu list_for_each_entry #endif /* ifndef HAVE_RCU */ static __u64 handle_base; @@ -161,7 +162,7 @@ void class_handle_unhash(struct portals_handle *h) void *class_handle2object(__u64 cookie) { struct handle_bucket *bucket; - struct list_head *tmp; + struct portals_handle *h; void *retval = NULL; ENTRY; @@ -172,9 +173,7 @@ void *class_handle2object(__u64 cookie) bucket = handle_hash + (cookie & HANDLE_HASH_MASK); rcu_read_lock(); - list_for_each_rcu(tmp, &bucket->head) { - struct portals_handle *h; - h = list_entry(tmp, struct portals_handle, h_link); + list_for_each_entry_rcu(h, &bucket->head, h_link) { if (h->h_cookie != cookie) continue; @@ -232,13 +231,9 @@ static void cleanup_all_handles(void) int i; for (i = 0; i < HANDLE_HASH_SIZE; i++) { - struct list_head *pos, *n; - n = NULL; + struct portals_handle *h; spin_lock(&handle_hash[i].lock); - list_for_each_safe_rcu(pos, n, &(handle_hash[i].head)) { - struct portals_handle *h; - h = list_entry(pos, struct portals_handle, h_link); - + list_for_each_entry_rcu(h, &(handle_hash[i].head), h_link) { CERROR("force clean handle "LPX64" addr %p addref %p\n", h->h_cookie, h, h->h_addref);