X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Finclude%2Flinux%2Flvfs.h;h=fffb4bd67977c98732a1e217298b4490a095dda5;hb=c1f6b32958c799412c830f35f8d16ed7275407ea;hp=6f48bcc1ad416956bc11bc0b943a98239334c0f1;hpb=239ac78a9f3630c22f120b148740463a357e7a0a;p=fs%2Flustre-release.git diff --git a/lustre/include/linux/lvfs.h b/lustre/include/linux/lvfs.h index 6f48bcc..fffb4bd 100644 --- a/lustre/include/linux/lvfs.h +++ b/lustre/include/linux/lvfs.h @@ -1,23 +1,54 @@ -#ifndef __LVFS_H__ -#define __LVFS_H__ +/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- + * vim:expandtab:shiftwidth=8:tabstop=8: + * + * Copyright (C) 2001 Cluster File Systems, Inc. + * + * This file is part of Lustre, http://www.lustre.org. + * + * Lustre is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * Lustre is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Lustre; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * lustre VFS/process permission interface + */ -#include +#ifndef __LINUX_LVFS_H__ +#define __LINUX_LVFS_H__ + +#ifndef __LVFS_H__ +#error Do not #include this file directly. #include instead +#endif #if defined __KERNEL__ +#include #include -#endif - -#ifdef LIBLUSTRE -#include +#else +struct group_info { /* unused */ }; +#include #endif +#define LLOG_LVFS + /* simple.c */ -struct obd_ucred { - __u32 ouc_fsuid; - __u32 ouc_fsgid; - __u32 ouc_cap; - __u32 ouc_suppgid1; - __u32 ouc_suppgid2; + +struct lvfs_ucred { + __u32 luc_uid; + __u32 luc_gid; + __u32 luc_fsuid; + __u32 luc_fsgid; + __u32 luc_cap; + __u32 luc_umask; + struct group_info *luc_ginfo; + struct md_identity *luc_identity; }; struct lvfs_callback_ops { @@ -26,15 +57,16 @@ struct lvfs_callback_ops { #define OBD_RUN_CTXT_MAGIC 0xC0FFEEAA #define OBD_CTXT_DEBUG /* development-only debugging */ -struct obd_run_ctxt { - struct vfsmount *pwdmnt; - struct dentry *pwd; - mm_segment_t fs; - struct obd_ucred ouc; - int ngroups; +struct lvfs_run_ctxt { + struct vfsmount *pwdmnt; + struct dentry *pwd; + mm_segment_t fs; + struct lvfs_ucred luc; + int ngroups; struct lvfs_callback_ops cb_ops; + struct group_info *group_info; #ifdef OBD_CTXT_DEBUG - __u32 magic; + __u32 magic; #endif }; @@ -44,22 +76,15 @@ struct obd_run_ctxt { #define OBD_SET_CTXT_MAGIC(ctxt) do {} while(0) #endif -/* lvfs_common.c */ -struct dentry *lvfs_fid2dentry(struct obd_run_ctxt *, __u64, __u32, __u64 ,void *data); - -void push_ctxt(struct obd_run_ctxt *save, struct obd_run_ctxt *new_ctx, - struct obd_ucred *cred); -void pop_ctxt(struct obd_run_ctxt *saved, struct obd_run_ctxt *new_ctx, - struct obd_ucred *cred); - #ifdef __KERNEL__ -struct dentry *simple_mkdir(struct dentry *dir, char *name, int mode); -struct dentry *simple_mknod(struct dentry *dir, char *name, int mode); +struct dentry *simple_mkdir(struct dentry *dir, char *name, int mode, int fix); +struct dentry *simple_mknod(struct dentry *dir, char *name, int mode, int fix); +int lustre_rename(struct dentry *dir, char *oldname, char *newname); int lustre_fread(struct file *file, void *buf, int len, loff_t *off); int lustre_fwrite(struct file *file, const void *buf, int len, loff_t *off); int lustre_fsync(struct file *file); -long l_readdir(struct file * file, void * dirent, unsigned int count); +long l_readdir(struct file * file, struct list_head *dentry_list); static inline void l_dput(struct dentry *de) { @@ -81,10 +106,19 @@ static inline struct dentry *ll_lookup_one_len(const char *fid_name, { struct dentry *dchild; - down(&dparent->d_inode->i_sem); + LOCK_INODE_MUTEX(dparent->d_inode); dchild = lookup_one_len(fid_name, dparent, fid_namelen); - up(&dparent->d_inode->i_sem); + UNLOCK_INODE_MUTEX(dparent->d_inode); + + if (IS_ERR(dchild) || dchild->d_inode == NULL) + return dchild; + if (is_bad_inode(dchild->d_inode)) { + CERROR("bad inode returned %lu/%u\n", + dchild->d_inode->i_ino, dchild->d_inode->i_generation); + dput(dchild); + dchild = ERR_PTR(-ENOENT); + } return dchild; } @@ -96,10 +130,4 @@ static inline void ll_sleep(int t) } #endif -#define LL_FID_NAMELEN (16 + 1 + 8 + 1) -static inline int ll_fid2str(char *str, __u64 id, __u32 generation) -{ - return sprintf(str, "%llx:%08x", (unsigned long long)id, generation); -} - #endif