Whamcloud - gitweb
Branch b1_8
authoryangsheng <yangsheng>
Tue, 28 Jul 2009 12:42:40 +0000 (12:42 +0000)
committeryangsheng <yangsheng>
Tue, 28 Jul 2009 12:42:40 +0000 (12:42 +0000)
b=19808

i=adilger, shadow, green

Landed for 2.6.30 kernel patchless support.

16 files changed:
lustre/autoconf/lustre-core.m4
lustre/include/liblustre.h
lustre/include/linux/lustre_compat25.h
lustre/include/lustre/ll_fiemap.h
lustre/llite/dir.c
lustre/llite/llite_lib.c
lustre/llite/llite_nfs.c
lustre/llite/lloop.c
lustre/llite/lproc_llite.c
lustre/llite/namei.c
lustre/llite/rw26.c
lustre/lvfs/lvfs_linux.c
lustre/mdc/mdc_lib.c
lustre/mdc/mdc_request.c
lustre/obdclass/linux/linux-module.c
lustre/obdclass/lustre_handles.c

index 8e7efaa..af463e9 100644 (file)
@@ -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 <linux/dcache.h>
+],[
+        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 <linux/fs.h>
+],[
+        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 <linux/fs.h>
+],[
+        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 <linux/fs.h>
+],[
+        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
 ])
 
 #
index 0522e56..aa7ddca 100644 (file)
@@ -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);
index da0cb36..32b922c 100644 (file)
@@ -43,6 +43,7 @@
 #error sorry, lustre requires at least 2.6.5
 #endif
 
+#include <linux/fs_struct.h>
 #include <libcfs/linux/portals_compat25.h>
 
 #include <linux/lustre_patchless_compat.h>
@@ -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 <linux/writeback.h>
 
@@ -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
index 271ca5b..7a64d80 100644 (file)
@@ -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.
index 301edbf..6737947 100644 (file)
@@ -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);
index 9ace0cb..2060941 100644 (file)
@@ -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);
         }
index c4c1f15..48a1f28 100644 (file)
@@ -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));
index eb1244e..1aad475 100644 (file)
@@ -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;
         }
index 266ade3..579010b 100644 (file)
@@ -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);
index 3535efc..97fe090 100644 (file)
@@ -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);
index c07768f..e3a521c 100644 (file)
@@ -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
index 5a77267..bb7be27 100644 (file)
@@ -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);
 
index a7f4e83..443227c 100644 (file)
@@ -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;
 
index f42064c..bca065e 100644 (file)
@@ -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;
index 431f074..dc3ff63 100644 (file)
@@ -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);
index 43b0125..d320889 100644 (file)
@@ -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);