⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inode.h

📁 lustre 1.6.5 source code
💻 H
📖 第 1 页 / 共 2 页
字号:
 * * The links list entry holds pointers to other aliases for the base path * node entry. * * The nodes link is bookkeeping. */struct pnode {    unsigned p_ref;                                     /* soft ref count */    struct pnode *p_parent;                             /* parent */    struct pnode_base *p_base;                          /* base part */    struct mount *p_mount;                              /* mount info */    struct pnode *p_cover;                              /* covering pnode */    LIST_ENTRY(pnode) p_links;                          /* other aliases */    TAILQ_ENTRY(pnode) p_nodes;                         /* all nodes links */};/* * Reference path-tree node. */#define P_REF(pno) \    do { \        TAILQ_REMOVE(&_sysio_pnodes, (pno), p_nodes); \        TAILQ_INSERT_TAIL(&_sysio_pnodes, (pno), p_nodes); \        (pno)->p_ref++; \        assert((pno)->p_ref); \    } while (0)/* * Release reference to path-tree node. */#define P_RELE(pno) \    do { \        assert((pno)->p_ref); \        --(pno)->p_ref; \    } while (0)/* * An intent record allows callers of namei and lookup to pass some information * about what they want to accomplish in the end. */struct intent {    unsigned int_opmask;                    void    *int_arg1;    void    *int_arg2;};/* * Intent operations. */#define INT_GETATTR         0x01                        /* get attrs */#define INT_SETATTR         0x02                        /* set attrs */#define INT_UPDPARENT       0x04                        /* insert/delete */#define INT_OPEN            0x08                        /* open */#define INT_CREAT           (INT_UPDPARENT|0x10)        /* insert */#define INT_READLINK        0x12                        /* readlink */#define INTENT_INIT(intnt, mask, arg1, arg2) \    do { \        (intnt)->int_opmask = (mask); \        (intnt)->int_arg1 = (arg1); \        (intnt)->int_arg2 = (arg2); \    } while (0)/* * Bundled up arguments to _sysio_path_walk. */struct nameidata {    unsigned nd_flags;                                  /* flags (see below) */    const char *nd_path;                                /* path arg */    struct pnode *nd_pno;                               /* returned pnode */    struct pnode *nd_root;                              /* system/user root */    struct intent *nd_intent;                           /* intent (NULL ok) */    unsigned nd_slicnt;					/* symlink indirects */#ifdef AUTOMOUNT_FILE_NAME    unsigned nd_amcnt;					/* automounts */#endif};/* * Values for nameidata flags field. */#define ND_NOFOLLOW	0x01				/* no follow symlinks */#define ND_NEGOK	0x02				/* last missing is ok */#define ND_NOPERMCHECK	0x04				/* don't check perms */#ifdef AUTOMOUNT_FILE_NAME#define _ND_INIT_AUTOMOUNT(nd)	((nd)->nd_amcnt = 0)#else#define _ND_INIT_AUTOMOUNT(nd)#endif#define _ND_INIT_OTHERS(nd) \    _ND_INIT_AUTOMOUNT(nd)/* * Init nameidata record. */#define ND_INIT(nd, flags, path, root, intnt) \    do { \	(nd)->nd_flags = (flags); \        (nd)->nd_path = (path); \        (nd)->nd_pno = NULL; \        (nd)->nd_root = (root); \        (nd)->nd_intent = (intnt); \        (nd)->nd_slicnt = 0; \	_ND_INIT_OTHERS(nd); \    } while (0)/* * IO completion callback record. */struct ioctx_callback {    TAILQ_ENTRY(ioctx_callback) iocb_next;             /* list link */    void    (*iocb_f)(struct ioctx *, void *);         /* cb func */    void    *iocb_data;                                /* cb data */};/* * All IO internally is done with an asynchronous mechanism. This record * holds the completion information. It's too big :-( */struct ioctx {    LIST_ENTRY(ioctx) ioctx_link;                       /* AIO list link */    unsigned        ioctx_fast                      : 1,		/* from stack space */	ioctx_done			: 1,		/* transfer complete */	ioctx_write			: 1;		/* op is a write */    struct inode *ioctx_ino;                            /* i-node */    const struct iovec *ioctx_iov;                      /* scatter/gather vec */    size_t  ioctx_iovlen;                               /* iovec length */    const struct intnl_xtvec *ioctx_xtv;                /* extents */    size_t  ioctx_xtvlen;                               /* xtv length */    ssize_t ioctx_cc;                                   /* rtn char count */    int ioctx_errno;                                    /* error number */    TAILQ_HEAD(, ioctx_callback) ioctx_cbq;             /* callback queue */    void *ioctx_private;				/* driver data */};/* * Init IO context record. */#define IOCTX_INIT(ioctx, fast, wr, ino, iov, iovlen, xtv, xtvlen) \    do { \	(ioctx)->ioctx_fast = (fast); \	(ioctx)->ioctx_done = 0; \	(ioctx)->ioctx_write = (wr) ? 1 : 0; \        (ioctx)->ioctx_ino = (ino); \        (ioctx)->ioctx_iov = (iov); \        (ioctx)->ioctx_iovlen = (iovlen); \        (ioctx)->ioctx_xtv = (xtv); \        (ioctx)->ioctx_xtvlen = (xtvlen); \        (ioctx)->ioctx_cc = 0; \        (ioctx)->ioctx_errno = 0; \        TAILQ_INIT(&(ioctx)->ioctx_cbq); \        (ioctx)->ioctx_private = NULL; \    } while (0)/* * Return whether access to a pnode is read-only. */#define IS_RDONLY(pno) \	((pno)->p_mount->mnt_flags & MOUNT_F_RO)extern struct pnode *_sysio_root;extern TAILQ_HEAD(inodes_head, inode) _sysio_inodes;extern TAILQ_HEAD(pnodes_head, pnode) _sysio_pnodes;extern int _sysio_i_init(void);#ifdef ZERO_SUM_MEMORYextern void _sysio_i_shutdown(void);#endifextern struct inode *_sysio_i_new(struct filesys *fs,                                  struct file_identifier *fid,				  struct intnl_stat *stat,				  unsigned immunity,                                  struct inode_ops *ops,                                  void *private);extern struct inode *_sysio_i_find(struct filesys *fs,                                   struct file_identifier *fid);extern void _sysio_i_gone(struct inode *ino);extern void _sysio_i_undead(struct inode *ino);extern int _sysio_p_find_alias(struct pnode *parent,                               struct qstr *name,                               struct pnode **pnop);extern int _sysio_p_validate(struct pnode *pno,                             struct intent *intnt,                             const char *path);extern struct pnode_base *_sysio_pb_new(struct qstr *name,                                        struct pnode_base *parent,                                        struct inode *ino);extern void _sysio_pb_gone(struct pnode_base *pb);extern struct pnode *_sysio_p_new_alias(struct pnode *parent,                                        struct pnode_base *pb,                                        struct mount *mnt);extern void _sysio_p_gone(struct pnode *pno);extern size_t _sysio_p_prune(struct pnode *root);extern int _sysio_p_kill_all(struct pnode *root);extern char *_sysio_pb_path(struct pnode_base *pb, char separator);extern int _sysio_setattr(struct pnode *pno,			  struct inode *ino,			  unsigned mask,			  struct intnl_stat *stbuf);extern void _sysio_do_noop(void);extern void _sysio_do_illop(void);extern int _sysio_do_ebadf(void);extern int _sysio_do_einval(void);extern int _sysio_do_enoent(void);extern int _sysio_do_enodev(void);extern int _sysio_do_espipe(void);extern int _sysio_do_eisdir(void);extern int _sysio_do_enosys(void);extern int _sysio_path_walk(struct pnode *parent, struct nameidata *nd);#ifdef AUTOMOUNT_FILE_NAMEextern void _sysio_next_component(const char *path, struct qstr *name);#endifextern int _sysio_permitted(struct pnode *pno, int amode);extern int _sysio_namei(struct pnode *pno,                        const char *path,                        unsigned flags,                        struct intent *intnt,                        struct pnode **pnop);extern int _sysio_p_chdir(struct pnode *pno);extern int _sysio_ioctx_init(void);extern void _sysio_ioctx_enter(struct ioctx *ioctx);extern struct ioctx *_sysio_ioctx_new(struct inode *ino,				      int wr,                                      const struct iovec *iov,				      size_t iovlen,                                      const struct intnl_xtvec *xtv,				      size_t xtvlen);extern int _sysio_ioctx_cb(struct ioctx *ioctx,			   void (*f)(struct ioctx *, void *),			   void *data);extern void _sysio_ioctx_cb_free(struct ioctx_callback *cb);extern struct ioctx *_sysio_ioctx_find(void *id);extern int _sysio_ioctx_done(struct ioctx *ioctx);extern ssize_t _sysio_ioctx_wait(struct ioctx *ioctx);extern void _sysio_ioctx_complete(struct ioctx *ioctx);extern int _sysio_open(struct pnode *pno, int flags, mode_t mode);extern int _sysio_mkdir(struct pnode *where, mode_t mode);extern int _sysio_mknod(struct pnode *where, mode_t mode, dev_t dev);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -