[funini.com] -> [kei@sodan] -> Kernel Reading

root/fs/xfs/linux-2.6/xfs_vnode.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. vn_count
  2. vn_grab
  3. VN_BAD
  4. vn_atime_to_bstime
  5. vn_atime_to_timespec
  6. vn_atime_to_time_t

/*
 * Copyright (c) 2000-2005 Silicon Graphics, Inc.
 * All Rights Reserved.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it would 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 this program; if not, write the Free Software Foundation,
 * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */
#ifndef __XFS_VNODE_H__
#define __XFS_VNODE_H__

struct file;
struct xfs_iomap;
struct attrlist_cursor_kern;

/*
 * Return values for xfs_inactive.  A return value of
 * VN_INACTIVE_NOCACHE implies that the file system behavior
 * has disassociated its state and bhv_desc_t from the vnode.
 */
#define VN_INACTIVE_CACHE       0
#define VN_INACTIVE_NOCACHE     1

/*
 * Flags for read/write calls - same values as IRIX
 */
#define IO_ISAIO        0x00001         /* don't wait for completion */
#define IO_ISDIRECT     0x00004         /* bypass page cache */
#define IO_INVIS        0x00020         /* don't update inode timestamps */

/*
 * Flags for xfs_inode_flush
 */
#define FLUSH_SYNC              1       /* wait for flush to complete   */

/*
 * Flush/Invalidate options for vop_toss/flush/flushinval_pages.
 */
#define FI_NONE                 0       /* none */
#define FI_REMAPF               1       /* Do a remapf prior to the operation */
#define FI_REMAPF_LOCKED        2       /* Do a remapf prior to the operation.
                                           Prevent VM access to the pages until
                                           the operation completes. */


extern void     vn_init(void);

/*
 * Yeah, these don't take vnode anymore at all, all this should be
 * cleaned up at some point.
 */
extern void     vn_iowait(struct xfs_inode *ip);
extern void     vn_iowake(struct xfs_inode *ip);
extern void     vn_ioerror(struct xfs_inode *ip, int error, char *f, int l);

static inline int vn_count(struct inode *vp)
{
        return atomic_read(&vp->i_count);
}

#define IHOLD(ip) \
do { \
        ASSERT(atomic_read(&VFS_I(ip)->i_count) > 0) ; \
        atomic_inc(&(VFS_I(ip)->i_count)); \
        xfs_itrace_hold((ip), __FILE__, __LINE__, (inst_t *)__return_address); \
} while (0)

#define IRELE(ip) \
do { \
        xfs_itrace_rele((ip), __FILE__, __LINE__, (inst_t *)__return_address); \
        iput(VFS_I(ip)); \
} while (0)

static inline struct inode *vn_grab(struct inode *vp)
{
        return igrab(vp);
}

/*
 * Dealing with bad inodes
 */
static inline int VN_BAD(struct inode *vp)
{
        return is_bad_inode(vp);
}

/*
 * Extracting atime values in various formats
 */
static inline void vn_atime_to_bstime(struct inode *vp, xfs_bstime_t *bs_atime)
{
        bs_atime->tv_sec = vp->i_atime.tv_sec;
        bs_atime->tv_nsec = vp->i_atime.tv_nsec;
}

static inline void vn_atime_to_timespec(struct inode *vp, struct timespec *ts)
{
        *ts = vp->i_atime;
}

static inline void vn_atime_to_time_t(struct inode *vp, time_t *tt)
{
        *tt = vp->i_atime.tv_sec;
}

/*
 * Some useful predicates.
 */
#define VN_MAPPED(vp)   mapping_mapped(vp->i_mapping)
#define VN_CACHED(vp)   (vp->i_mapping->nrpages)
#define VN_DIRTY(vp)    mapping_tagged(vp->i_mapping, \
                                        PAGECACHE_TAG_DIRTY)


/*
 * Tracking vnode activity.
 */
#if defined(XFS_INODE_TRACE)

#define INODE_TRACE_SIZE        16              /* number of trace entries */
#define INODE_KTRACE_ENTRY      1
#define INODE_KTRACE_EXIT       2
#define INODE_KTRACE_HOLD       3
#define INODE_KTRACE_REF        4
#define INODE_KTRACE_RELE       5

extern void _xfs_itrace_entry(struct xfs_inode *, const char *, inst_t *);
extern void _xfs_itrace_exit(struct xfs_inode *, const char *, inst_t *);
extern void xfs_itrace_hold(struct xfs_inode *, char *, int, inst_t *);
extern void _xfs_itrace_ref(struct xfs_inode *, char *, int, inst_t *);
extern void xfs_itrace_rele(struct xfs_inode *, char *, int, inst_t *);
#define xfs_itrace_entry(ip)    \
        _xfs_itrace_entry(ip, __func__, (inst_t *)__return_address)
#define xfs_itrace_exit(ip)     \
        _xfs_itrace_exit(ip, __func__, (inst_t *)__return_address)
#define xfs_itrace_exit_tag(ip, tag)    \
        _xfs_itrace_exit(ip, tag, (inst_t *)__return_address)
#define xfs_itrace_ref(ip)      \
        _xfs_itrace_ref(ip, __FILE__, __LINE__, (inst_t *)__return_address)

#else
#define xfs_itrace_entry(a)
#define xfs_itrace_exit(a)
#define xfs_itrace_exit_tag(a, b)
#define xfs_itrace_hold(a, b, c, d)
#define xfs_itrace_ref(a)
#define xfs_itrace_rele(a, b, c, d)
#endif

#endif  /* __XFS_VNODE_H__ */

/* [<][>][^][v][top][bottom][index][help] */

[funini.com] -> [kei@sodan] -> Kernel Reading