Whamcloud - gitweb
- merge 0.7rc1 from b_devel to HEAD (20030612 merge point)
[fs/lustre-release.git] / lustre / obdclass / simple.c
similarity index 83%
rename from lustre/lib/simple.c
rename to lustre/obdclass/simple.c
index c0d4f31..0ce54a3 100644 (file)
 
 #define DEBUG_SUBSYSTEM S_FILTER
 
-#include <linux/obd_support.h>
 #include <linux/obd.h>
-#include <linux/lustre_mds.h>
 #include <linux/lustre_lib.h>
-#include <linux/lustre_net.h>
 
-#ifdef OBD_CTXT_DEBUG
 /* Debugging check only needed during development */
-#define ASSERT_CTXT_MAGIC(magic) LASSERT((magic) == OBD_RUN_CTXT_MAGIC)
-#define ASSERT_NOT_KERNEL_CTXT(msg) LASSERT(!segment_eq(get_fs(), get_ds()))
-#define ASSERT_KERNEL_CTXT(msg) LASSERT(segment_eq(get_fs(), get_ds()))
+#ifdef OBD_CTXT_DEBUG
+# define ASSERT_CTXT_MAGIC(magic) LASSERT((magic) == OBD_RUN_CTXT_MAGIC)
+# define ASSERT_NOT_KERNEL_CTXT(msg) LASSERT(!segment_eq(get_fs(), get_ds()))
+# define ASSERT_KERNEL_CTXT(msg) LASSERT(segment_eq(get_fs(), get_ds()))
 #else
-#define ASSERT_CTXT_MAGIC(magic) do {} while(0)
-#define ASSERT_NOT_KERNEL_CTXT(msg) do {} while(0)
-#define ASSERT_KERNEL_CTXT(msg) do {} while(0)
+# define ASSERT_CTXT_MAGIC(magic) do {} while(0)
+# define ASSERT_NOT_KERNEL_CTXT(msg) do {} while(0)
+# define ASSERT_KERNEL_CTXT(msg) do {} while(0)
 #endif
 
 /* push / pop to root of obd store */
@@ -70,6 +67,7 @@ void push_ctxt(struct obd_run_ctxt *save, struct obd_run_ctxt *new_ctx,
         LASSERT(atomic_read(&new_ctx->pwd->d_count));
         save->pwd = dget(current->fs->pwd);
         save->pwdmnt = mntget(current->fs->pwdmnt);
+        save->ngroups = current->ngroups;
 
         LASSERT(save->pwd);
         LASSERT(save->pwdmnt);
@@ -77,13 +75,17 @@ void push_ctxt(struct obd_run_ctxt *save, struct obd_run_ctxt *new_ctx,
         LASSERT(new_ctx->pwdmnt);
 
         if (uc) {
-                save->fsuid = current->fsuid;
-                save->fsgid = current->fsgid;
-                save->cap = current->cap_effective;
+                save->ouc.ouc_fsuid = current->fsuid;
+                save->ouc.ouc_fsgid = current->fsgid;
+                save->ouc.ouc_cap = current->cap_effective;
+                save->ouc.ouc_suppgid1 = current->groups[0];
+                save->ouc.ouc_suppgid2 = current->groups[1];
 
                 current->fsuid = uc->ouc_fsuid;
                 current->fsgid = uc->ouc_fsgid;
                 current->cap_effective = uc->ouc_cap;
+                current->ngroups = 0;
+
                 if (uc->ouc_suppgid1 != -1)
                         current->groups[current->ngroups++] = uc->ouc_suppgid1;
                 if (uc->ouc_suppgid2 != -1)
@@ -103,6 +105,7 @@ void push_ctxt(struct obd_run_ctxt *save, struct obd_run_ctxt *new_ctx,
                atomic_read(&current->fs->pwdmnt->mnt_count));
         */
 }
+EXPORT_SYMBOL(push_ctxt);
 
 void pop_ctxt(struct obd_run_ctxt *saved, struct obd_run_ctxt *new_ctx,
               struct obd_ucred *uc)
@@ -132,14 +135,13 @@ void pop_ctxt(struct obd_run_ctxt *saved, struct obd_run_ctxt *new_ctx,
         dput(saved->pwd);
         mntput(saved->pwdmnt);
         if (uc) {
-                current->fsuid = saved->fsuid;
-                current->fsgid = saved->fsgid;
-                current->cap_effective = saved->cap;
+                current->fsuid = saved->ouc.ouc_fsuid;
+                current->fsgid = saved->ouc.ouc_fsgid;
+                current->cap_effective = saved->ouc.ouc_cap;
+                current->ngroups = saved->ngroups;
 
-                if (uc->ouc_suppgid1 != -1)
-                        current->ngroups--;
-                if (uc->ouc_suppgid2 != -1)
-                        current->ngroups--;
+                current->groups[0] = saved->ouc.ouc_suppgid1;
+                current->groups[1] = saved->ouc.ouc_suppgid2;
         }
 
         /*
@@ -153,6 +155,7 @@ void pop_ctxt(struct obd_run_ctxt *saved, struct obd_run_ctxt *new_ctx,
                atomic_read(&current->fs->pwdmnt->mnt_count));
         */
 }
+EXPORT_SYMBOL(pop_ctxt);
 
 /* utility to make a file */
 struct dentry *simple_mknod(struct dentry *dir, char *name, int mode)
@@ -169,7 +172,7 @@ struct dentry *simple_mknod(struct dentry *dir, char *name, int mode)
                 GOTO(out_up, dchild);
 
         if (dchild->d_inode) {
-                if ((dchild->d_inode->i_mode & S_IFMT) != S_IFREG)
+                if (!S_ISREG(dchild->d_inode->i_mode))
                         GOTO(out_err, err = -EEXIST);
 
                 GOTO(out_up, dchild);
@@ -187,6 +190,7 @@ out_err:
 out_up:
         return dchild;
 }
+EXPORT_SYMBOL(simple_mknod);
 
 /* utility to make a directory */
 struct dentry *simple_mkdir(struct dentry *dir, char *name, int mode)
@@ -220,25 +224,27 @@ out_err:
 out_up:
         return dchild;
 }
+EXPORT_SYMBOL(simple_mkdir);
 
 /*
  * Read a file from within kernel context.  Prior to calling this
  * function we should already have done a push_ctxt().
  */
-int lustre_fread(struct file *file, char *str, int len, loff_t *off)
+int lustre_fread(struct file *file, void *buf, int len, loff_t *off)
 {
         ASSERT_KERNEL_CTXT("kernel doing read outside kernel context\n");
         if (!file || !file->f_op || !file->f_op->read || !off)
                 RETURN(-ENOSYS);
 
-        return file->f_op->read(file, str, len, off);
+        return file->f_op->read(file, buf, len, off);
 }
+EXPORT_SYMBOL(lustre_fread);
 
 /*
  * Write a file from within kernel context.  Prior to calling this
  * function we should already have done a push_ctxt().
  */
-int lustre_fwrite(struct file *file, const char *str, int len, loff_t *off)
+int lustre_fwrite(struct file *file, const void *buf, int len, loff_t *off)
 {
         ENTRY;
         ASSERT_KERNEL_CTXT("kernel doing write outside kernel context\n");
@@ -252,8 +258,9 @@ int lustre_fwrite(struct file *file, const char *str, int len, loff_t *off)
         if (!file->f_op->write)
                 RETURN(-EROFS);
 
-        RETURN(file->f_op->write(file, str, len, off));
+        RETURN(file->f_op->write(file, buf, len, off));
 }
+EXPORT_SYMBOL(lustre_fwrite);
 
 /*
  * Sync a file from within kernel context.  Prior to calling this
@@ -268,3 +275,4 @@ int lustre_fsync(struct file *file)
 
         RETURN(file->f_op->fsync(file, file->f_dentry, 0));
 }
+EXPORT_SYMBOL(lustre_fsync);