linux/fs/gfs2/inode.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
   3 * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
   4 *
   5 * This copyrighted material is made available to anyone wishing to use,
   6 * modify, copy, or redistribute it subject to the terms and conditions
   7 * of the GNU General Public License version 2.
   8 */
   9
  10#ifndef __INODE_DOT_H__
  11#define __INODE_DOT_H__
  12
  13#include <linux/fs.h>
  14#include <linux/buffer_head.h>
  15#include <linux/mm.h>
  16#include "util.h"
  17
  18extern int gfs2_releasepage(struct page *page, gfp_t gfp_mask);
  19extern int gfs2_internal_read(struct gfs2_inode *ip,
  20                              struct file_ra_state *ra_state,
  21                              char *buf, loff_t *pos, unsigned size);
  22extern void gfs2_set_aops(struct inode *inode);
  23
  24static inline int gfs2_is_stuffed(const struct gfs2_inode *ip)
  25{
  26        return !ip->i_height;
  27}
  28
  29static inline int gfs2_is_jdata(const struct gfs2_inode *ip)
  30{
  31        return ip->i_diskflags & GFS2_DIF_JDATA;
  32}
  33
  34static inline int gfs2_is_writeback(const struct gfs2_inode *ip)
  35{
  36        const struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
  37        return (sdp->sd_args.ar_data == GFS2_DATA_WRITEBACK) && !gfs2_is_jdata(ip);
  38}
  39
  40static inline int gfs2_is_ordered(const struct gfs2_inode *ip)
  41{
  42        const struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
  43        return (sdp->sd_args.ar_data == GFS2_DATA_ORDERED) && !gfs2_is_jdata(ip);
  44}
  45
  46static inline int gfs2_is_dir(const struct gfs2_inode *ip)
  47{
  48        return S_ISDIR(ip->i_inode.i_mode);
  49}
  50
  51static inline void gfs2_set_inode_blocks(struct inode *inode, u64 blocks)
  52{
  53        inode->i_blocks = blocks <<
  54                (GFS2_SB(inode)->sd_sb.sb_bsize_shift - GFS2_BASIC_BLOCK_SHIFT);
  55}
  56
  57static inline u64 gfs2_get_inode_blocks(const struct inode *inode)
  58{
  59        return inode->i_blocks >>
  60                (GFS2_SB(inode)->sd_sb.sb_bsize_shift - GFS2_BASIC_BLOCK_SHIFT);
  61}
  62
  63static inline void gfs2_add_inode_blocks(struct inode *inode, s64 change)
  64{
  65        gfs2_assert(GFS2_SB(inode), (change >= 0 || inode->i_blocks > -change));
  66        change *= (GFS2_SB(inode)->sd_sb.sb_bsize/GFS2_BASIC_BLOCK);
  67        inode->i_blocks += change;
  68}
  69
  70static inline int gfs2_check_inum(const struct gfs2_inode *ip, u64 no_addr,
  71                                  u64 no_formal_ino)
  72{
  73        return ip->i_no_addr == no_addr && ip->i_no_formal_ino == no_formal_ino;
  74}
  75
  76static inline void gfs2_inum_out(const struct gfs2_inode *ip,
  77                                 struct gfs2_dirent *dent)
  78{
  79        dent->de_inum.no_formal_ino = cpu_to_be64(ip->i_no_formal_ino);
  80        dent->de_inum.no_addr = cpu_to_be64(ip->i_no_addr);
  81}
  82
  83
  84extern void gfs2_set_iop(struct inode *inode);
  85extern struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned type, 
  86                                       u64 no_addr, u64 no_formal_ino);
  87extern void gfs2_process_unlinked_inode(struct super_block *sb, u64 no_addr);
  88extern struct inode *gfs2_ilookup(struct super_block *sb, u64 no_addr);
  89
  90extern int gfs2_inode_refresh(struct gfs2_inode *ip);
  91
  92extern int gfs2_dinode_dealloc(struct gfs2_inode *inode);
  93extern int gfs2_change_nlink(struct gfs2_inode *ip, int diff);
  94extern struct inode *gfs2_lookupi(struct inode *dir, const struct qstr *name,
  95                                  int is_root);
  96extern struct inode *gfs2_createi(struct gfs2_holder *ghs,
  97                                  const struct qstr *name,
  98                                  unsigned int mode, dev_t dev);
  99extern int gfs2_permission(struct inode *inode, int mask);
 100extern int gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr);
 101extern struct inode *gfs2_lookup_simple(struct inode *dip, const char *name);
 102extern void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf);
 103extern void gfs2_dinode_print(const struct gfs2_inode *ip);
 104
 105extern const struct inode_operations gfs2_file_iops;
 106extern const struct inode_operations gfs2_dir_iops;
 107extern const struct inode_operations gfs2_symlink_iops;
 108extern const struct file_operations gfs2_file_fops_nolock;
 109extern const struct file_operations gfs2_dir_fops_nolock;
 110
 111extern void gfs2_set_inode_flags(struct inode *inode);
 112 
 113#ifdef CONFIG_GFS2_FS_LOCKING_DLM
 114extern const struct file_operations gfs2_file_fops;
 115extern const struct file_operations gfs2_dir_fops;
 116
 117static inline int gfs2_localflocks(const struct gfs2_sbd *sdp)
 118{
 119        return sdp->sd_args.ar_localflocks;
 120}
 121#else /* Single node only */
 122#define gfs2_file_fops gfs2_file_fops_nolock
 123#define gfs2_dir_fops gfs2_dir_fops_nolock
 124
 125static inline int gfs2_localflocks(const struct gfs2_sbd *sdp)
 126{
 127        return 1;
 128}
 129#endif /* CONFIG_GFS2_FS_LOCKING_DLM */
 130
 131#endif /* __INODE_DOT_H__ */
 132
 133
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.