Commit 5c676f6d authored by Steven Whitehouse's avatar Steven Whitehouse

[GFS2] Macros removal in gfs2.h

As suggested by Pekka Enberg <penberg@cs.helsinki.fi>.

The DIV_RU macro is renamed DIV_ROUND_UP and and moved to kernel.h
The other macros are gone from gfs2.h as (although not requested
by Pekka Enberg) are a number of included header file which are now
included individually. The inode number comparison function is
now an inline function.

The DT2IF and IF2DT may be addressed in a future patch.
Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
parent f3b270a4
...@@ -15,8 +15,11 @@ ...@@ -15,8 +15,11 @@
#include <linux/posix_acl.h> #include <linux/posix_acl.h>
#include <linux/posix_acl_xattr.h> #include <linux/posix_acl_xattr.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include <linux/gfs2_ondisk.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "acl.h" #include "acl.h"
#include "eaops.h" #include "eaops.h"
#include "eattr.h" #include "eattr.h"
...@@ -24,6 +27,7 @@ ...@@ -24,6 +27,7 @@
#include "inode.h" #include "inode.h"
#include "meta_io.h" #include "meta_io.h"
#include "trans.h" #include "trans.h"
#include "util.h"
#define ACL_ACCESS 1 #define ACL_ACCESS 1
#define ACL_DEFAULT 0 #define ACL_DEFAULT 0
...@@ -157,7 +161,7 @@ int gfs2_check_acl_locked(struct inode *inode, int mask) ...@@ -157,7 +161,7 @@ int gfs2_check_acl_locked(struct inode *inode, int mask)
struct posix_acl *acl = NULL; struct posix_acl *acl = NULL;
int error; int error;
error = acl_get(get_v2ip(inode), ACL_ACCESS, &acl, NULL, NULL, NULL); error = acl_get(inode->u.generic_ip, ACL_ACCESS, &acl, NULL, NULL, NULL);
if (error) if (error)
return error; return error;
...@@ -172,7 +176,7 @@ int gfs2_check_acl_locked(struct inode *inode, int mask) ...@@ -172,7 +176,7 @@ int gfs2_check_acl_locked(struct inode *inode, int mask)
int gfs2_check_acl(struct inode *inode, int mask) int gfs2_check_acl(struct inode *inode, int mask)
{ {
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
struct gfs2_holder i_gh; struct gfs2_holder i_gh;
int error; int error;
......
...@@ -21,10 +21,14 @@ ...@@ -21,10 +21,14 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "bits.h" #include "bits.h"
#include "util.h"
static const char valid_change[16] = { static const char valid_change[16] = {
/* current */ /* current */
......
...@@ -12,9 +12,12 @@ ...@@ -12,9 +12,12 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "bmap.h" #include "bmap.h"
#include "glock.h" #include "glock.h"
#include "inode.h" #include "inode.h"
...@@ -24,6 +27,7 @@ ...@@ -24,6 +27,7 @@
#include "rgrp.h" #include "rgrp.h"
#include "trans.h" #include "trans.h"
#include "dir.h" #include "dir.h"
#include "util.h"
/* This doesn't need to be that large as max 64 bit pointers in a 4k /* This doesn't need to be that large as max 64 bit pointers in a 4k
* block is 512, so __u16 is fine for that. It saves stack space to * block is 512, so __u16 is fine for that. It saves stack space to
...@@ -660,7 +664,7 @@ static int do_strip(struct gfs2_inode *ip, struct buffer_head *dibh, ...@@ -660,7 +664,7 @@ static int do_strip(struct gfs2_inode *ip, struct buffer_head *dibh,
for (x = 0; x < rlist.rl_rgrps; x++) { for (x = 0; x < rlist.rl_rgrps; x++) {
struct gfs2_rgrpd *rgd; struct gfs2_rgrpd *rgd;
rgd = get_gl2rgd(rlist.rl_ghs[x].gh_gl); rgd = rlist.rl_ghs[x].gh_gl->gl_object;
rg_blocks += rgd->rd_ri.ri_length; rg_blocks += rgd->rd_ri.ri_length;
} }
...@@ -1021,7 +1025,7 @@ void gfs2_write_calc_reserv(struct gfs2_inode *ip, unsigned int len, ...@@ -1021,7 +1025,7 @@ void gfs2_write_calc_reserv(struct gfs2_inode *ip, unsigned int len,
unsigned int tmp; unsigned int tmp;
if (gfs2_is_dir(ip)) { if (gfs2_is_dir(ip)) {
*data_blocks = DIV_RU(len, sdp->sd_jbsize) + 2; *data_blocks = DIV_ROUND_UP(len, sdp->sd_jbsize) + 2;
*ind_blocks = 3 * (sdp->sd_max_jheight - 1); *ind_blocks = 3 * (sdp->sd_max_jheight - 1);
} else { } else {
*data_blocks = (len >> sdp->sd_sb.sb_bsize_shift) + 3; *data_blocks = (len >> sdp->sd_sb.sb_bsize_shift) + 3;
...@@ -1029,7 +1033,7 @@ void gfs2_write_calc_reserv(struct gfs2_inode *ip, unsigned int len, ...@@ -1029,7 +1033,7 @@ void gfs2_write_calc_reserv(struct gfs2_inode *ip, unsigned int len,
} }
for (tmp = *data_blocks; tmp > sdp->sd_diptrs;) { for (tmp = *data_blocks; tmp > sdp->sd_diptrs;) {
tmp = DIV_RU(tmp, sdp->sd_inptrs); tmp = DIV_ROUND_UP(tmp, sdp->sd_inptrs);
*ind_blocks += tmp; *ind_blocks += tmp;
} }
} }
......
...@@ -14,9 +14,12 @@ ...@@ -14,9 +14,12 @@
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/kthread.h> #include <linux/kthread.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "daemon.h" #include "daemon.h"
#include "glock.h" #include "glock.h"
#include "log.h" #include "log.h"
...@@ -24,6 +27,7 @@ ...@@ -24,6 +27,7 @@
#include "recovery.h" #include "recovery.h"
#include "super.h" #include "super.h"
#include "unlinked.h" #include "unlinked.h"
#include "util.h"
/* This uses schedule_timeout() instead of msleep() because it's good for /* This uses schedule_timeout() instead of msleep() because it's good for
the daemons to wake up more often than the timeout when unmounting so the daemons to wake up more often than the timeout when unmounting so
......
...@@ -59,9 +59,12 @@ ...@@ -59,9 +59,12 @@
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/sort.h> #include <linux/sort.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "dir.h" #include "dir.h"
#include "glock.h" #include "glock.h"
#include "inode.h" #include "inode.h"
...@@ -70,6 +73,7 @@ ...@@ -70,6 +73,7 @@
#include "rgrp.h" #include "rgrp.h"
#include "trans.h" #include "trans.h"
#include "bmap.h" #include "bmap.h"
#include "util.h"
#define IS_LEAF 1 /* Hashed (leaf) directory */ #define IS_LEAF 1 /* Hashed (leaf) directory */
#define IS_DINODE 2 /* Linear (stuffed dinode block) directory */ #define IS_DINODE 2 /* Linear (stuffed dinode block) directory */
...@@ -2196,7 +2200,7 @@ static int leaf_dealloc(struct gfs2_inode *dip, uint32_t index, uint32_t len, ...@@ -2196,7 +2200,7 @@ static int leaf_dealloc(struct gfs2_inode *dip, uint32_t index, uint32_t len,
for (x = 0; x < rlist.rl_rgrps; x++) { for (x = 0; x < rlist.rl_rgrps; x++) {
struct gfs2_rgrpd *rgd; struct gfs2_rgrpd *rgd;
rgd = get_gl2rgd(rlist.rl_ghs[x].gh_gl); rgd = rlist.rl_ghs[x].gh_gl->gl_object;
rg_blocks += rgd->rd_ri.ri_length; rg_blocks += rgd->rd_ri.ri_length;
} }
...@@ -2205,7 +2209,7 @@ static int leaf_dealloc(struct gfs2_inode *dip, uint32_t index, uint32_t len, ...@@ -2205,7 +2209,7 @@ static int leaf_dealloc(struct gfs2_inode *dip, uint32_t index, uint32_t len,
goto out_rlist; goto out_rlist;
error = gfs2_trans_begin(sdp, error = gfs2_trans_begin(sdp,
rg_blocks + (DIV_RU(size, sdp->sd_jbsize) + 1) + rg_blocks + (DIV_ROUND_UP(size, sdp->sd_jbsize) + 1) +
RES_DINODE + RES_STATFS + RES_QUOTA, l_blocks); RES_DINODE + RES_STATFS + RES_QUOTA, l_blocks);
if (error) if (error)
goto out_rg_gunlock; goto out_rg_gunlock;
......
...@@ -13,13 +13,17 @@ ...@@ -13,13 +13,17 @@
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/xattr.h> #include <linux/xattr.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "acl.h" #include "acl.h"
#include "eaops.h" #include "eaops.h"
#include "eattr.h" #include "eattr.h"
#include "util.h"
/** /**
* gfs2_ea_name2type - get the type of the ea, and truncate type from the name * gfs2_ea_name2type - get the type of the ea, and truncate type from the name
......
...@@ -13,10 +13,13 @@ ...@@ -13,10 +13,13 @@
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/xattr.h> #include <linux/xattr.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "acl.h" #include "acl.h"
#include "eaops.h" #include "eaops.h"
#include "eattr.h" #include "eattr.h"
...@@ -26,6 +29,7 @@ ...@@ -26,6 +29,7 @@
#include "quota.h" #include "quota.h"
#include "rgrp.h" #include "rgrp.h"
#include "trans.h" #include "trans.h"
#include "util.h"
/** /**
* ea_calc_size - returns the acutal number of bytes the request will take up * ea_calc_size - returns the acutal number of bytes the request will take up
...@@ -478,7 +482,7 @@ static int ea_get_unstuffed(struct gfs2_inode *ip, struct gfs2_ea_header *ea, ...@@ -478,7 +482,7 @@ static int ea_get_unstuffed(struct gfs2_inode *ip, struct gfs2_ea_header *ea,
struct gfs2_sbd *sdp = ip->i_sbd; struct gfs2_sbd *sdp = ip->i_sbd;
struct buffer_head **bh; struct buffer_head **bh;
unsigned int amount = GFS2_EA_DATA_LEN(ea); unsigned int amount = GFS2_EA_DATA_LEN(ea);
unsigned int nptrs = DIV_RU(amount, sdp->sd_jbsize); unsigned int nptrs = DIV_ROUND_UP(amount, sdp->sd_jbsize);
uint64_t *dataptrs = GFS2_EA2DATAPTRS(ea); uint64_t *dataptrs = GFS2_EA2DATAPTRS(ea);
unsigned int x; unsigned int x;
int error = 0; int error = 0;
...@@ -676,7 +680,7 @@ static int ea_write(struct gfs2_inode *ip, struct gfs2_ea_header *ea, ...@@ -676,7 +680,7 @@ static int ea_write(struct gfs2_inode *ip, struct gfs2_ea_header *ea,
unsigned int copy; unsigned int copy;
unsigned int x; unsigned int x;
ea->ea_num_ptrs = DIV_RU(er->er_data_len, sdp->sd_jbsize); ea->ea_num_ptrs = DIV_ROUND_UP(er->er_data_len, sdp->sd_jbsize);
for (x = 0; x < ea->ea_num_ptrs; x++) { for (x = 0; x < ea->ea_num_ptrs; x++) {
struct buffer_head *bh; struct buffer_head *bh;
uint64_t block; uint64_t block;
...@@ -810,7 +814,7 @@ static int ea_init(struct gfs2_inode *ip, struct gfs2_ea_request *er) ...@@ -810,7 +814,7 @@ static int ea_init(struct gfs2_inode *ip, struct gfs2_ea_request *er)
unsigned int blks = 1; unsigned int blks = 1;
if (GFS2_EAREQ_SIZE_STUFFED(er) > jbsize) if (GFS2_EAREQ_SIZE_STUFFED(er) > jbsize)
blks += DIV_RU(er->er_data_len, jbsize); blks += DIV_ROUND_UP(er->er_data_len, jbsize);
return ea_alloc_skeleton(ip, er, blks, ea_init_i, NULL); return ea_alloc_skeleton(ip, er, blks, ea_init_i, NULL);
} }
...@@ -962,7 +966,8 @@ static int ea_set_simple(struct gfs2_inode *ip, struct buffer_head *bh, ...@@ -962,7 +966,8 @@ static int ea_set_simple(struct gfs2_inode *ip, struct buffer_head *bh,
es->es_bh = bh; es->es_bh = bh;
es->es_ea = ea; es->es_ea = ea;
blks = 2 + DIV_RU(es->es_er->er_data_len, ip->i_sbd->sd_jbsize); blks = 2 + DIV_ROUND_UP(es->es_er->er_data_len,
ip->i_sbd->sd_jbsize);
error = ea_alloc_skeleton(ip, es->es_er, blks, error = ea_alloc_skeleton(ip, es->es_er, blks,
ea_set_simple_alloc, es); ea_set_simple_alloc, es);
...@@ -1066,7 +1071,7 @@ static int ea_set_i(struct gfs2_inode *ip, struct gfs2_ea_request *er, ...@@ -1066,7 +1071,7 @@ static int ea_set_i(struct gfs2_inode *ip, struct gfs2_ea_request *er,
if (!(ip->i_di.di_flags & GFS2_DIF_EA_INDIRECT)) if (!(ip->i_di.di_flags & GFS2_DIF_EA_INDIRECT))
blks++; blks++;
if (GFS2_EAREQ_SIZE_STUFFED(er) > ip->i_sbd->sd_jbsize) if (GFS2_EAREQ_SIZE_STUFFED(er) > ip->i_sbd->sd_jbsize)
blks += DIV_RU(er->er_data_len, ip->i_sbd->sd_jbsize); blks += DIV_ROUND_UP(er->er_data_len, ip->i_sbd->sd_jbsize);
return ea_alloc_skeleton(ip, er, blks, ea_set_block, el); return ea_alloc_skeleton(ip, er, blks, ea_set_block, el);
} }
...@@ -1250,7 +1255,7 @@ static int ea_acl_chmod_unstuffed(struct gfs2_inode *ip, ...@@ -1250,7 +1255,7 @@ static int ea_acl_chmod_unstuffed(struct gfs2_inode *ip,
struct gfs2_sbd *sdp = ip->i_sbd; struct gfs2_sbd *sdp = ip->i_sbd;
struct buffer_head **bh; struct buffer_head **bh;
unsigned int amount = GFS2_EA_DATA_LEN(ea); unsigned int amount = GFS2_EA_DATA_LEN(ea);
unsigned int nptrs = DIV_RU(amount, sdp->sd_jbsize); unsigned int nptrs = DIV_ROUND_UP(amount, sdp->sd_jbsize);
uint64_t *dataptrs = GFS2_EA2DATAPTRS(ea); uint64_t *dataptrs = GFS2_EA2DATAPTRS(ea);
unsigned int x; unsigned int x;
int error; int error;
...@@ -1402,7 +1407,7 @@ static int ea_dealloc_indirect(struct gfs2_inode *ip) ...@@ -1402,7 +1407,7 @@ static int ea_dealloc_indirect(struct gfs2_inode *ip)
for (x = 0; x < rlist.rl_rgrps; x++) { for (x = 0; x < rlist.rl_rgrps; x++) {
struct gfs2_rgrpd *rgd; struct gfs2_rgrpd *rgd;
rgd = get_gl2rgd(rlist.rl_ghs[x].gh_gl); rgd = rlist.rl_ghs[x].gh_gl->gl_object;
rg_blocks += rgd->rd_ri.ri_length; rg_blocks += rgd->rd_ri.ri_length;
} }
......
...@@ -29,7 +29,7 @@ ALIGN(sizeof(struct gfs2_ea_header) + (er)->er_name_len + (er)->er_data_len, 8) ...@@ -29,7 +29,7 @@ ALIGN(sizeof(struct gfs2_ea_header) + (er)->er_name_len + (er)->er_data_len, 8)
#define GFS2_EAREQ_SIZE_UNSTUFFED(sdp, er) \ #define GFS2_EAREQ_SIZE_UNSTUFFED(sdp, er) \
ALIGN(sizeof(struct gfs2_ea_header) + (er)->er_name_len + \ ALIGN(sizeof(struct gfs2_ea_header) + (er)->er_name_len + \
sizeof(uint64_t) * DIV_RU((er)->er_data_len, (sdp)->sd_jbsize), 8) sizeof(uint64_t) * DIV_ROUND_UP((er)->er_data_len, (sdp)->sd_jbsize), 8)
#define GFS2_EA2NAME(ea) ((char *)((struct gfs2_ea_header *)(ea) + 1)) #define GFS2_EA2NAME(ea) ((char *)((struct gfs2_ea_header *)(ea) + 1))
#define GFS2_EA2DATA(ea) (GFS2_EA2NAME(ea) + (ea)->ea_name_len) #define GFS2_EA2DATA(ea) (GFS2_EA2NAME(ea) + (ea)->ea_name_len)
......
...@@ -10,13 +10,6 @@ ...@@ -10,13 +10,6 @@
#ifndef __GFS2_DOT_H__ #ifndef __GFS2_DOT_H__
#define __GFS2_DOT_H__ #define __GFS2_DOT_H__
#include <linux/gfs2_ondisk.h>
#include "lm_interface.h"
#include "lvb.h"
#include "incore.h"
#include "util.h"
enum { enum {
NO_CREATE = 0, NO_CREATE = 0,
CREATE = 1, CREATE = 1,
...@@ -32,29 +25,7 @@ enum { ...@@ -32,29 +25,7 @@ enum {
FORCE = 1, FORCE = 1,
}; };
/* Divide num by den. Round up if there is a remainder. */
#define DIV_RU(num, den) (((num) + (den) - 1) / (den))
#define GFS2_FAST_NAME_SIZE 8 #define GFS2_FAST_NAME_SIZE 8
#define get_v2sdp(sb) ((struct gfs2_sbd *)(sb)->s_fs_info)
#define set_v2sdp(sb, sdp) (sb)->s_fs_info = (sdp)
#define get_v2ip(inode) ((struct gfs2_inode *)(inode)->u.generic_ip)
#define set_v2ip(inode, ip) (inode)->u.generic_ip = (ip)
#define get_v2fp(file) ((struct gfs2_file *)(file)->private_data)
#define set_v2fp(file, fp) (file)->private_data = (fp)
#define get_v2bd(bh) ((struct gfs2_bufdata *)(bh)->b_private)
#define set_v2bd(bh, bd) (bh)->b_private = (bd)
#define get_transaction ((struct gfs2_trans *)(current->journal_info))
#define set_transaction(tr) (current->journal_info) = (tr)
#define get_gl2ip(gl) ((struct gfs2_inode *)(gl)->gl_object)
#define set_gl2ip(gl, ip) (gl)->gl_object = (ip)
#define get_gl2rgd(gl) ((struct gfs2_rgrpd *)(gl)->gl_object)
#define set_gl2rgd(gl, rgd) (gl)->gl_object = (rgd)
#define get_gl2gl(gl) ((struct gfs2_glock *)(gl)->gl_object)
#define set_gl2gl(gl, gl2) (gl)->gl_object = (gl2)
#endif /* __GFS2_DOT_H__ */ #endif /* __GFS2_DOT_H__ */
...@@ -16,10 +16,13 @@ ...@@ -16,10 +16,13 @@
#include <linux/sort.h> #include <linux/sort.h>
#include <linux/jhash.h> #include <linux/jhash.h>
#include <linux/kref.h> #include <linux/kref.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "glock.h" #include "glock.h"
#include "glops.h" #include "glops.h"
#include "inode.h" #include "inode.h"
...@@ -28,6 +31,7 @@ ...@@ -28,6 +31,7 @@
#include "meta_io.h" #include "meta_io.h"
#include "quota.h" #include "quota.h"
#include "super.h" #include "super.h"
#include "util.h"
/* Must be kept in sync with the beginning of struct gfs2_glock */ /* Must be kept in sync with the beginning of struct gfs2_glock */
struct glock_plug { struct glock_plug {
...@@ -1962,7 +1966,7 @@ void gfs2_try_toss_inode(struct gfs2_sbd *sdp, struct gfs2_inum *inum) ...@@ -1962,7 +1966,7 @@ void gfs2_try_toss_inode(struct gfs2_sbd *sdp, struct gfs2_inum *inum)
if (!gfs2_glmutex_trylock(gl)) if (!gfs2_glmutex_trylock(gl))
goto out; goto out;
ip = get_gl2ip(gl); ip = gl->gl_object;
if (!ip) if (!ip)
goto out_unlock; goto out_unlock;
...@@ -1994,7 +1998,7 @@ void gfs2_iopen_go_callback(struct gfs2_glock *io_gl, unsigned int state) ...@@ -1994,7 +1998,7 @@ void gfs2_iopen_go_callback(struct gfs2_glock *io_gl, unsigned int state)
return; return;
spin_lock(&io_gl->gl_spin); spin_lock(&io_gl->gl_spin);
i_gl = get_gl2gl(io_gl); i_gl = io_gl->gl_object;
if (i_gl) { if (i_gl) {
gfs2_glock_hold(i_gl); gfs2_glock_hold(i_gl);
spin_unlock(&io_gl->gl_spin); spin_unlock(&io_gl->gl_spin);
...@@ -2004,7 +2008,7 @@ void gfs2_iopen_go_callback(struct gfs2_glock *io_gl, unsigned int state) ...@@ -2004,7 +2008,7 @@ void gfs2_iopen_go_callback(struct gfs2_glock *io_gl, unsigned int state)
} }
if (gfs2_glmutex_trylock(i_gl)) { if (gfs2_glmutex_trylock(i_gl)) {
struct gfs2_inode *ip = get_gl2ip(i_gl); struct gfs2_inode *ip = i_gl->gl_object;
if (ip) { if (ip) {
gfs2_try_toss_vnode(ip); gfs2_try_toss_vnode(ip);
gfs2_glmutex_unlock(i_gl); gfs2_glmutex_unlock(i_gl);
...@@ -2093,7 +2097,7 @@ void gfs2_reclaim_glock(struct gfs2_sbd *sdp) ...@@ -2093,7 +2097,7 @@ void gfs2_reclaim_glock(struct gfs2_sbd *sdp)
if (gfs2_glmutex_trylock(gl)) { if (gfs2_glmutex_trylock(gl)) {
if (gl->gl_ops == &gfs2_inode_glops) { if (gl->gl_ops == &gfs2_inode_glops) {
struct gfs2_inode *ip = get_gl2ip(gl); struct gfs2_inode *ip = gl->gl_object;
if (ip && !atomic_read(&ip->i_count)) if (ip && !atomic_read(&ip->i_count))
gfs2_inode_destroy(ip); gfs2_inode_destroy(ip);
} }
...@@ -2174,7 +2178,7 @@ static void scan_glock(struct gfs2_glock *gl) ...@@ -2174,7 +2178,7 @@ static void scan_glock(struct gfs2_glock *gl)
{ {
if (gfs2_glmutex_trylock(gl)) { if (gfs2_glmutex_trylock(gl)) {
if (gl->gl_ops == &gfs2_inode_glops) { if (gl->gl_ops == &gfs2_inode_glops) {
struct gfs2_inode *ip = get_gl2ip(gl); struct gfs2_inode *ip = gl->gl_object;
if (ip && !atomic_read(&ip->i_count)) if (ip && !atomic_read(&ip->i_count))
goto out_schedule; goto out_schedule;
} }
...@@ -2234,7 +2238,7 @@ static void clear_glock(struct gfs2_glock *gl) ...@@ -2234,7 +2238,7 @@ static void clear_glock(struct gfs2_glock *gl)
if (gfs2_glmutex_trylock(gl)) { if (gfs2_glmutex_trylock(gl)) {
if (gl->gl_ops == &gfs2_inode_glops) { if (gl->gl_ops == &gfs2_inode_glops) {
struct gfs2_inode *ip = get_gl2ip(gl); struct gfs2_inode *ip = gl->gl_object;
if (ip && !atomic_read(&ip->i_count)) if (ip && !atomic_read(&ip->i_count))
gfs2_inode_destroy(ip); gfs2_inode_destroy(ip);
} }
...@@ -2430,10 +2434,10 @@ static int dump_glock(struct gfs2_glock *gl) ...@@ -2430,10 +2434,10 @@ static int dump_glock(struct gfs2_glock *gl)
if (error) if (error)
goto out; goto out;
} }
if (gl->gl_ops == &gfs2_inode_glops && get_gl2ip(gl)) { if (gl->gl_ops == &gfs2_inode_glops && gl->gl_object) {
if (!test_bit(GLF_LOCK, &gl->gl_flags) && if (!test_bit(GLF_LOCK, &gl->gl_flags) &&
list_empty(&gl->gl_holders)) { list_empty(&gl->gl_holders)) {
error = dump_inode(get_gl2ip(gl)); error = dump_inode(gl->gl_object);
if (error) if (error)
goto out; goto out;
} else { } else {
......
...@@ -12,9 +12,12 @@ ...@@ -12,9 +12,12 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "bmap.h" #include "bmap.h"
#include "glock.h" #include "glock.h"
#include "glops.h" #include "glops.h"
...@@ -24,6 +27,7 @@ ...@@ -24,6 +27,7 @@
#include "page.h" #include "page.h"
#include "recovery.h" #include "recovery.h"
#include "rgrp.h" #include "rgrp.h"
#include "util.h"
/** /**
* meta_go_sync - sync out the metadata for this glock * meta_go_sync - sync out the metadata for this glock
...@@ -193,7 +197,7 @@ static int inode_go_demote_ok(struct gfs2_glock *gl) ...@@ -193,7 +197,7 @@ static int inode_go_demote_ok(struct gfs2_glock *gl)
struct gfs2_sbd *sdp = gl->gl_sbd; struct gfs2_sbd *sdp = gl->gl_sbd;
int demote = 0; int demote = 0;
if (!get_gl2ip(gl) && !gl->gl_aspace->i_mapping->nrpages) if (!gl->gl_object && !gl->gl_aspace->i_mapping->nrpages)
demote = 1; demote = 1;
else if (!sdp->sd_args.ar_localcaching && else if (!sdp->sd_args.ar_localcaching &&
time_after_eq(jiffies, gl->gl_stamp + time_after_eq(jiffies, gl->gl_stamp +
...@@ -214,7 +218,7 @@ static int inode_go_demote_ok(struct gfs2_glock *gl) ...@@ -214,7 +218,7 @@ static int inode_go_demote_ok(struct gfs2_glock *gl)
static int inode_go_lock(struct gfs2_holder *gh) static int inode_go_lock(struct gfs2_holder *gh)
{ {
struct gfs2_glock *gl = gh->gh_gl; struct gfs2_glock *gl = gh->gh_gl;
struct gfs2_inode *ip = get_gl2ip(gl); struct gfs2_inode *ip = gl->gl_object;
int error = 0; int error = 0;
if (!ip) if (!ip)
...@@ -246,7 +250,7 @@ static int inode_go_lock(struct gfs2_holder *gh) ...@@ -246,7 +250,7 @@ static int inode_go_lock(struct gfs2_holder *gh)
static void inode_go_unlock(struct gfs2_holder *gh) static void inode_go_unlock(struct gfs2_holder *gh)
{ {
struct gfs2_glock *gl = gh->gh_gl; struct gfs2_glock *gl = gh->gh_gl;
struct gfs2_inode *ip = get_gl2ip(gl); struct gfs2_inode *ip = gl->gl_object;
if (ip && test_bit(GLF_DIRTY, &gl->gl_flags)) if (ip && test_bit(GLF_DIRTY, &gl->gl_flags))
gfs2_inode_attr_in(ip); gfs2_inode_attr_in(ip);
...@@ -264,7 +268,7 @@ static void inode_go_unlock(struct gfs2_holder *gh) ...@@ -264,7 +268,7 @@ static void inode_go_unlock(struct gfs2_holder *gh)
static void inode_greedy(struct gfs2_glock *gl) static void inode_greedy(struct gfs2_glock *gl)
{ {
struct gfs2_sbd *sdp = gl->gl_sbd; struct gfs2_sbd *sdp = gl->gl_sbd;
struct gfs2_inode *ip = get_gl2ip(gl); struct gfs2_inode *ip = gl->gl_object;
unsigned int quantum = gfs2_tune_get(sdp, gt_greedy_quantum); unsigned int quantum = gfs2_tune_get(sdp, gt_greedy_quantum);
unsigned int max = gfs2_tune_get(sdp, gt_greedy_max); unsigned int max = gfs2_tune_get(sdp, gt_greedy_max);
unsigned int new_time; unsigned int new_time;
...@@ -311,7 +315,7 @@ static int rgrp_go_demote_ok(struct gfs2_glock *gl) ...@@ -311,7 +315,7 @@ static int rgrp_go_demote_ok(struct gfs2_glock *gl)
static int rgrp_go_lock(struct gfs2_holder *gh) static int rgrp_go_lock(struct gfs2_holder *gh)
{ {
return gfs2_rgrp_bh_get(get_gl2rgd(gh->gh_gl)); return gfs2_rgrp_bh_get(gh->gh_gl->gl_object);
} }
/** /**
...@@ -324,7 +328,7 @@ static int rgrp_go_lock(struct gfs2_holder *gh) ...@@ -324,7 +328,7 @@ static int rgrp_go_lock(struct gfs2_holder *gh)
static void rgrp_go_unlock(struct gfs2_holder *gh) static void rgrp_go_unlock(struct gfs2_holder *gh)
{ {
gfs2_rgrp_bh_put(get_gl2rgd(gh->gh_gl)); gfs2_rgrp_bh_put(gh->gh_gl->gl_object);
} }
/** /**
...@@ -358,13 +362,14 @@ static void trans_go_xmote_th(struct gfs2_glock *gl, unsigned int state, ...@@ -358,13 +362,14 @@ static void trans_go_xmote_th(struct gfs2_glock *gl, unsigned int state,
static void trans_go_xmote_bh(struct gfs2_glock *gl) static void trans_go_xmote_bh(struct gfs2_glock *gl)
{ {
struct gfs2_sbd *sdp = gl->gl_sbd; struct gfs2_sbd *sdp = gl->gl_sbd;
struct gfs2_glock *j_gl = get_v2ip(sdp->sd_jdesc->jd_inode)->i_gl; struct gfs2_inode *ip = sdp->sd_jdesc->jd_inode->u.generic_ip;
struct gfs2_glock *j_gl = ip->i_gl;
struct gfs2_log_header head; struct gfs2_log_header head;
int error; int error;
if (gl->gl_state != LM_ST_UNLOCKED && if (gl->gl_state != LM_ST_UNLOCKED &&
test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags)) { test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags)) {
gfs2_meta_cache_flush(get_v2ip(sdp->sd_jdesc->jd_inode)); gfs2_meta_cache_flush(sdp->sd_jdesc->jd_inode->u.generic_ip);
j_gl->gl_ops->go_inval(j_gl, DIO_METADATA | DIO_DATA); j_gl->gl_ops->go_inval(j_gl, DIO_METADATA | DIO_DATA);
error = gfs2_find_jhead(sdp->sd_jdesc, &head); error = gfs2_find_jhead(sdp->sd_jdesc, &head);
......
...@@ -313,6 +313,14 @@ enum { ...@@ -313,6 +313,14 @@ enum {
QDF_LOCKED = 2, QDF_LOCKED = 2,
}; };
struct gfs2_quota_lvb {
uint32_t qb_magic;
uint32_t __pad;
uint64_t qb_limit; /* Hard limit of # blocks to alloc */
uint64_t qb_warn; /* Warn user when alloc is above this # */
int64_t qb_value; /* Current # blocks allocated */
};
struct gfs2_quota_data { struct gfs2_quota_data {
struct list_head qd_list; struct list_head qd_list;
unsigned int qd_count; unsigned int qd_count;
......
...@@ -14,9 +14,12 @@ ...@@ -14,9 +14,12 @@
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/posix_acl.h> #include <linux/posix_acl.h>
#include <linux/sort.h> #include <linux/sort.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "acl.h" #include "acl.h"
#include "bmap.h" #include "bmap.h"
#include "dir.h" #include "dir.h"
...@@ -33,6 +36,7 @@ ...@@ -33,6 +36,7 @@
#include "rgrp.h" #include "rgrp.h"
#include "trans.h" #include "trans.h"
#include "unlinked.h" #include "unlinked.h"
#include "util.h"
/** /**
* inode_attr_in - Copy attributes from the dinode into the VFS inode * inode_attr_in - Copy attributes from the dinode into the VFS inode
...@@ -176,7 +180,7 @@ struct inode *gfs2_ip2v(struct gfs2_inode *ip) ...@@ -176,7 +180,7 @@ struct inode *gfs2_ip2v(struct gfs2_inode *ip)
init_special_inode(tmp, tmp->i_mode, tmp->i_rdev); init_special_inode(tmp, tmp->i_mode, tmp->i_rdev);
} }
set_v2ip(tmp, NULL); tmp->u.generic_ip = NULL;
for (;;) { for (;;) {
spin_lock(&ip->i_spin); spin_lock(&ip->i_spin);
...@@ -196,7 +200,7 @@ struct inode *gfs2_ip2v(struct gfs2_inode *ip) ...@@ -196,7 +200,7 @@ struct inode *gfs2_ip2v(struct gfs2_inode *ip)
gfs2_inode_hold(ip); gfs2_inode_hold(ip);
ip->i_vnode = inode; ip->i_vnode = inode;
set_v2ip(inode, ip); inode->u.generic_ip = ip;
spin_unlock(&ip->i_spin); spin_unlock(&ip->i_spin);
...@@ -207,7 +211,7 @@ struct inode *gfs2_ip2v(struct gfs2_inode *ip) ...@@ -207,7 +211,7 @@ struct inode *gfs2_ip2v(struct gfs2_inode *ip)
static int iget_test(struct inode *inode, void *opaque) static int iget_test(struct inode *inode, void *opaque)
{ {
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
struct gfs2_inum *inum = (struct gfs2_inum *)opaque; struct gfs2_inum *inum = (struct gfs2_inum *)opaque;
if (ip && ip->i_num.no_addr == inum->no_addr) if (ip && ip->i_num.no_addr == inum->no_addr)
...@@ -320,11 +324,11 @@ static int inode_create(struct gfs2_glock *i_gl, struct gfs2_inum *inum, ...@@ -320,11 +324,11 @@ static int inode_create(struct gfs2_glock *i_gl, struct gfs2_inum *inum,
spin_lock(&io_gl->gl_spin); spin_lock(&io_gl->gl_spin);
gfs2_glock_hold(i_gl); gfs2_glock_hold(i_gl);
set_gl2gl(io_gl, i_gl); io_gl->gl_object = i_gl;
spin_unlock(&io_gl->gl_spin); spin_unlock(&io_gl->gl_spin);
gfs2_glock_hold(i_gl); gfs2_glock_hold(i_gl);
set_gl2ip(i_gl, ip); i_gl->gl_object = ip;
atomic_inc(&sdp->sd_inode_count); atomic_inc(&sdp->sd_inode_count);
...@@ -359,7 +363,7 @@ int gfs2_inode_get(struct gfs2_glock *i_gl, struct gfs2_inum *inum, int create, ...@@ -359,7 +363,7 @@ int gfs2_inode_get(struct gfs2_glock *i_gl, struct gfs2_inum *inum, int create,
gfs2_glmutex_lock(i_gl); gfs2_glmutex_lock(i_gl);
*ipp = get_gl2ip(i_gl); *ipp = i_gl->gl_object;
if (*ipp) { if (*ipp) {
error = -ESTALE; error = -ESTALE;
if ((*ipp)->i_num.no_formal_ino != inum->no_formal_ino) if ((*ipp)->i_num.no_formal_ino != inum->no_formal_ino)
...@@ -404,10 +408,10 @@ void gfs2_inode_destroy(struct gfs2_inode *ip) ...@@ -404,10 +408,10 @@ void gfs2_inode_destroy(struct gfs2_inode *ip)
struct gfs2_glock *i_gl = ip->i_gl; struct gfs2_glock *i_gl = ip->i_gl;
gfs2_assert_warn(sdp, !atomic_read(&ip->i_count)); gfs2_assert_warn(sdp, !atomic_read(&ip->i_count));
gfs2_assert(sdp, get_gl2gl(io_gl) == i_gl); gfs2_assert(sdp, io_gl->gl_object == i_gl);
spin_lock(&io_gl->gl_spin); spin_lock(&io_gl->gl_spin);
set_gl2gl(io_gl, NULL); io_gl->gl_object = NULL;
gfs2_glock_put(i_gl); gfs2_glock_put(i_gl);
spin_unlock(&io_gl->gl_spin); spin_unlock(&io_gl->gl_spin);
...@@ -416,7 +420,7 @@ void gfs2_inode_destroy(struct gfs2_inode *ip) ...@@ -416,7 +420,7 @@ void gfs2_inode_destroy(struct gfs2_inode *ip)
gfs2_meta_cache_flush(ip); gfs2_meta_cache_flush(ip);
kmem_cache_free(gfs2_inode_cachep, ip); kmem_cache_free(gfs2_inode_cachep, ip);
set_gl2ip(i_gl, NULL); i_gl->gl_object = NULL;
gfs2_glock_put(i_gl); gfs2_glock_put(i_gl);
atomic_dec(&sdp->sd_inode_count); atomic_dec(&sdp->sd_inode_count);
...@@ -524,7 +528,7 @@ static int inode_dealloc(struct gfs2_sbd *sdp, struct gfs2_unlinked *ul, ...@@ -524,7 +528,7 @@ static int inode_dealloc(struct gfs2_sbd *sdp, struct gfs2_unlinked *ul,
goto out; goto out;
} }
gfs2_assert_warn(sdp, !get_gl2ip(i_gh.gh_gl)); gfs2_assert_warn(sdp, !i_gh.gh_gl->gl_object);
error = inode_create(i_gh.gh_gl, &ul->ul_ut.ut_inum, io_gh->gh_gl, error = inode_create(i_gh.gh_gl, &ul->ul_ut.ut_inum, io_gh->gh_gl,
LM_ST_EXCLUSIVE, &ip); LM_ST_EXCLUSIVE, &ip);
...@@ -715,7 +719,7 @@ int gfs2_lookupi(struct inode *dir, struct qstr *name, int is_root, ...@@ -715,7 +719,7 @@ int gfs2_lookupi(struct inode *dir, struct qstr *name, int is_root,
struct inode **inodep) struct inode **inodep)
{ {
struct gfs2_inode *ipp; struct gfs2_inode *ipp;
struct gfs2_inode *dip = get_v2ip(dir); struct gfs2_inode *dip = dir->u.generic_ip;
struct gfs2_sbd *sdp = dip->i_sbd; struct gfs2_sbd *sdp = dip->i_sbd;
struct gfs2_holder d_gh; struct gfs2_holder d_gh;
struct gfs2_inum inum; struct gfs2_inum inum;
...@@ -774,7 +778,7 @@ int gfs2_lookupi(struct inode *dir, struct qstr *name, int is_root, ...@@ -774,7 +778,7 @@ int gfs2_lookupi(struct inode *dir, struct qstr *name, int is_root,
static int pick_formal_ino_1(struct gfs2_sbd *sdp, uint64_t *formal_ino) static int pick_formal_ino_1(struct gfs2_sbd *sdp, uint64_t *formal_ino)
{ {
struct gfs2_inode *ip = get_v2ip(sdp->sd_ir_inode); struct gfs2_inode *ip = sdp->sd_ir_inode->u.generic_ip;
struct buffer_head *bh; struct buffer_head *bh;
struct gfs2_inum_range ir; struct gfs2_inum_range ir;
int error; int error;
...@@ -815,8 +819,8 @@ static int pick_formal_ino_1(struct gfs2_sbd *sdp, uint64_t *formal_ino) ...@@ -815,8 +819,8 @@ static int pick_formal_ino_1(struct gfs2_sbd *sdp, uint64_t *formal_ino)
static int pick_formal_ino_2(struct gfs2_sbd *sdp, uint64_t *formal_ino) static int pick_formal_ino_2(struct gfs2_sbd *sdp, uint64_t *formal_ino)
{ {
struct gfs2_inode *ip = get_v2ip(sdp->sd_ir_inode); struct gfs2_inode *ip = sdp->sd_ir_inode->u.generic_ip;
struct gfs2_inode *m_ip = get_v2ip(sdp->sd_inum_inode); struct gfs2_inode *m_ip = sdp->sd_inum_inode->u.generic_ip;
struct gfs2_holder gh; struct gfs2_holder gh;
struct buffer_head *bh; struct buffer_head *bh;
struct gfs2_inum_range ir; struct gfs2_inum_range ir;
...@@ -1194,7 +1198,7 @@ struct inode *gfs2_createi(struct gfs2_holder *ghs, struct qstr *name, ...@@ -1194,7 +1198,7 @@ struct inode *gfs2_createi(struct gfs2_holder *ghs, struct qstr *name,
unsigned int mode) unsigned int mode)
{ {
struct inode *inode; struct inode *inode;
struct gfs2_inode *dip = get_gl2ip(ghs->gh_gl); struct gfs2_inode *dip = ghs->gh_gl->gl_object;
struct gfs2_sbd *sdp = dip->i_sbd; struct gfs2_sbd *sdp = dip->i_sbd;
struct gfs2_unlinked *ul; struct gfs2_unlinked *ul;
struct gfs2_inode *ip; struct gfs2_inode *ip;
...@@ -1570,7 +1574,7 @@ int gfs2_glock_nq_atime(struct gfs2_holder *gh) ...@@ -1570,7 +1574,7 @@ int gfs2_glock_nq_atime(struct gfs2_holder *gh)
{ {
struct gfs2_glock *gl = gh->gh_gl; struct gfs2_glock *gl = gh->gh_gl;
struct gfs2_sbd *sdp = gl->gl_sbd; struct gfs2_sbd *sdp = gl->gl_sbd;
struct gfs2_inode *ip = get_gl2ip(gl); struct gfs2_inode *ip = gl->gl_object;
int64_t curtime, quantum = gfs2_tune_get(sdp, gt_atime_quantum); int64_t curtime, quantum = gfs2_tune_get(sdp, gt_atime_quantum);
unsigned int state; unsigned int state;
int flags; int flags;
...@@ -1817,7 +1821,7 @@ int gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr) ...@@ -1817,7 +1821,7 @@ int gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr)
{ {
int error; int error;
if (get_transaction) if (current->journal_info)
return __gfs2_setattr_simple(ip, attr); return __gfs2_setattr_simple(ip, attr);
error = gfs2_trans_begin(ip->i_sbd, RES_DINODE, 0); error = gfs2_trans_begin(ip->i_sbd, RES_DINODE, 0);
......
...@@ -13,12 +13,17 @@ ...@@ -13,12 +13,17 @@
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "glock.h" #include "glock.h"
#include "lm.h" #include "lm.h"
#include "super.h" #include "super.h"
#include "util.h"
#include "lvb.h"
/** /**
* gfs2_lm_mount - mount a locking protocol * gfs2_lm_mount - mount a locking protocol
......
...@@ -12,14 +12,18 @@ ...@@ -12,14 +12,18 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "bmap.h" #include "bmap.h"
#include "glock.h" #include "glock.h"
#include "log.h" #include "log.h"
#include "lops.h" #include "lops.h"
#include "meta_io.h" #include "meta_io.h"
#include "util.h"
#define PULL 1 #define PULL 1
...@@ -80,7 +84,7 @@ unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct, ...@@ -80,7 +84,7 @@ unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct,
if (nstruct > first) { if (nstruct > first) {
second = (sdp->sd_sb.sb_bsize - second = (sdp->sd_sb.sb_bsize -
sizeof(struct gfs2_meta_header)) / ssize; sizeof(struct gfs2_meta_header)) / ssize;
blks += DIV_RU(nstruct - first, second); blks += DIV_ROUND_UP(nstruct - first, second);
} }
return blks; return blks;
...@@ -257,7 +261,7 @@ static uint64_t log_bmap(struct gfs2_sbd *sdp, unsigned int lbn) ...@@ -257,7 +261,7 @@ static uint64_t log_bmap(struct gfs2_sbd *sdp, unsigned int lbn)
uint64_t dbn; uint64_t dbn;
int error; int error;
error = gfs2_block_map(get_v2ip(sdp->sd_jdesc->jd_inode), error = gfs2_block_map(sdp->sd_jdesc->jd_inode->u.generic_ip,
lbn, &new, &dbn, NULL); lbn, &new, &dbn, NULL);
gfs2_assert_withdraw(sdp, !error && dbn); gfs2_assert_withdraw(sdp, !error && dbn);
......
...@@ -12,9 +12,12 @@ ...@@ -12,9 +12,12 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "glock.h" #include "glock.h"
#include "log.h" #include "log.h"
#include "lops.h" #include "lops.h"
...@@ -22,12 +25,14 @@ ...@@ -22,12 +25,14 @@
#include "recovery.h" #include "recovery.h"
#include "rgrp.h" #include "rgrp.h"
#include "trans.h" #include "trans.h"
#include "util.h"
static void glock_lo_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le) static void glock_lo_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le)
{ {
struct gfs2_glock *gl; struct gfs2_glock *gl;
struct gfs2_trans *tr = current->journal_info;
get_transaction->tr_touched = 1; tr->tr_touched = 1;
if (!list_empty(&le->le_list)) if (!list_empty(&le->le_list))
return; return;
...@@ -68,7 +73,7 @@ static void buf_lo_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le) ...@@ -68,7 +73,7 @@ static void buf_lo_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le)
if (!list_empty(&bd->bd_list_tr)) if (!list_empty(&bd->bd_list_tr))
return; return;
tr = get_transaction; tr = current->journal_info;
tr->tr_touched = 1; tr->tr_touched = 1;
tr->tr_num_buf++; tr->tr_num_buf++;
list_add(&bd->bd_list_tr, &tr->tr_list_buf); list_add(&bd->bd_list_tr, &tr->tr_list_buf);
...@@ -179,7 +184,8 @@ static void buf_lo_after_commit(struct gfs2_sbd *sdp, struct gfs2_ail *ai) ...@@ -179,7 +184,8 @@ static void buf_lo_after_commit(struct gfs2_sbd *sdp, struct gfs2_ail *ai)
static void buf_lo_before_scan(struct gfs2_jdesc *jd, static void buf_lo_before_scan(struct gfs2_jdesc *jd,
struct gfs2_log_header *head, int pass) struct gfs2_log_header *head, int pass)
{ {
struct gfs2_sbd *sdp = get_v2ip(jd->jd_inode)->i_sbd; struct gfs2_inode *ip = jd->jd_inode->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd;
if (pass != 0) if (pass != 0)
return; return;
...@@ -192,8 +198,9 @@ static int buf_lo_scan_elements(struct gfs2_jdesc *jd, unsigned int start, ...@@ -192,8 +198,9 @@ static int buf_lo_scan_elements(struct gfs2_jdesc *jd, unsigned int start,
struct gfs2_log_descriptor *ld, __be64 *ptr, struct gfs2_log_descriptor *ld, __be64 *ptr,
int pass) int pass)
{ {
struct gfs2_sbd *sdp = get_v2ip(jd->jd_inode)->i_sbd; struct gfs2_inode *ip = jd->jd_inode->u.generic_ip;
struct gfs2_glock *gl = get_v2ip(jd->jd_inode)->i_gl; struct gfs2_sbd *sdp = ip->i_sbd;
struct gfs2_glock *gl = ip->i_gl;
unsigned int blks = be32_to_cpu(ld->ld_data1); unsigned int blks = be32_to_cpu(ld->ld_data1);
struct buffer_head *bh_log, *bh_ip; struct buffer_head *bh_log, *bh_ip;
uint64_t blkno; uint64_t blkno;
...@@ -238,17 +245,18 @@ static int buf_lo_scan_elements(struct gfs2_jdesc *jd, unsigned int start, ...@@ -238,17 +245,18 @@ static int buf_lo_scan_elements(struct gfs2_jdesc *jd, unsigned int start,
static void buf_lo_after_scan(struct gfs2_jdesc *jd, int error, int pass) static void buf_lo_after_scan(struct gfs2_jdesc *jd, int error, int pass)
{ {
struct gfs2_sbd *sdp = get_v2ip(jd->jd_inode)->i_sbd; struct gfs2_inode *ip = jd->jd_inode->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd;
if (error) { if (error) {
gfs2_meta_sync(get_v2ip(jd->jd_inode)->i_gl, gfs2_meta_sync(ip->i_gl,
DIO_START | DIO_WAIT); DIO_START | DIO_WAIT);
return; return;
} }
if (pass != 1) if (pass != 1)
return; return;
gfs2_meta_sync(get_v2ip(jd->jd_inode)->i_gl, DIO_START | DIO_WAIT); gfs2_meta_sync(ip->i_gl, DIO_START | DIO_WAIT);
fs_info(sdp, "jid=%u: Replayed %u of %u blocks\n", fs_info(sdp, "jid=%u: Replayed %u of %u blocks\n",
jd->jd_jid, sdp->sd_replayed_blocks, sdp->sd_found_blocks); jd->jd_jid, sdp->sd_replayed_blocks, sdp->sd_found_blocks);
...@@ -258,7 +266,7 @@ static void revoke_lo_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le) ...@@ -258,7 +266,7 @@ static void revoke_lo_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le)
{ {
struct gfs2_trans *tr; struct gfs2_trans *tr;
tr = get_transaction; tr = current->journal_info;
tr->tr_touched = 1; tr->tr_touched = 1;
tr->tr_num_revoke++; tr->tr_num_revoke++;
...@@ -324,7 +332,8 @@ static void revoke_lo_before_commit(struct gfs2_sbd *sdp) ...@@ -324,7 +332,8 @@ static void revoke_lo_before_commit(struct gfs2_sbd *sdp)
static void revoke_lo_before_scan(struct gfs2_jdesc *jd, static void revoke_lo_before_scan(struct gfs2_jdesc *jd,
struct gfs2_log_header *head, int pass) struct gfs2_log_header *head, int pass)
{ {
struct gfs2_sbd *sdp = get_v2ip(jd->jd_inode)->i_sbd; struct gfs2_inode *ip = jd->jd_inode->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd;
if (pass != 0) if (pass != 0)
return; return;
...@@ -337,7 +346,8 @@ static int revoke_lo_scan_elements(struct gfs2_jdesc *jd, unsigned int start, ...@@ -337,7 +346,8 @@ static int revoke_lo_scan_elements(struct gfs2_jdesc *jd, unsigned int start,
struct gfs2_log_descriptor *ld, __be64 *ptr, struct gfs2_log_descriptor *ld, __be64 *ptr,
int pass) int pass)
{ {
struct gfs2_sbd *sdp = get_v2ip(jd->jd_inode)->i_sbd; struct gfs2_inode *ip = jd->jd_inode->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd;
unsigned int blks = be32_to_cpu(ld->ld_length); unsigned int blks = be32_to_cpu(ld->ld_length);
unsigned int revokes = be32_to_cpu(ld->ld_data1); unsigned int revokes = be32_to_cpu(ld->ld_data1);
struct buffer_head *bh; struct buffer_head *bh;
...@@ -383,7 +393,8 @@ static int revoke_lo_scan_elements(struct gfs2_jdesc *jd, unsigned int start, ...@@ -383,7 +393,8 @@ static int revoke_lo_scan_elements(struct gfs2_jdesc *jd, unsigned int start,
static void revoke_lo_after_scan(struct gfs2_jdesc *jd, int error, int pass) static void revoke_lo_after_scan(struct gfs2_jdesc *jd, int error, int pass)
{ {
struct gfs2_sbd *sdp = get_v2ip(jd->jd_inode)->i_sbd; struct gfs2_inode *ip = jd->jd_inode->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd;
if (error) { if (error) {
gfs2_revoke_clean(sdp); gfs2_revoke_clean(sdp);
...@@ -401,8 +412,9 @@ static void revoke_lo_after_scan(struct gfs2_jdesc *jd, int error, int pass) ...@@ -401,8 +412,9 @@ static void revoke_lo_after_scan(struct gfs2_jdesc *jd, int error, int pass)
static void rg_lo_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le) static void rg_lo_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le)
{ {
struct gfs2_rgrpd *rgd; struct gfs2_rgrpd *rgd;
struct gfs2_trans *tr = current->journal_info;
get_transaction->tr_touched = 1; tr->tr_touched = 1;
if (!list_empty(&le->le_list)) if (!list_empty(&le->le_list))
return; return;
...@@ -451,9 +463,9 @@ static void rg_lo_after_commit(struct gfs2_sbd *sdp, struct gfs2_ail *ai) ...@@ -451,9 +463,9 @@ static void rg_lo_after_commit(struct gfs2_sbd *sdp, struct gfs2_ail *ai)
static void databuf_lo_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le) static void databuf_lo_add(struct gfs2_sbd *sdp, struct gfs2_log_element *le)
{ {
struct gfs2_bufdata *bd = container_of(le, struct gfs2_bufdata, bd_le); struct gfs2_bufdata *bd = container_of(le, struct gfs2_bufdata, bd_le);
struct gfs2_trans *tr = get_transaction; struct gfs2_trans *tr = current->journal_info;
struct address_space *mapping = bd->bd_bh->b_page->mapping; struct address_space *mapping = bd->bd_bh->b_page->mapping;
struct gfs2_inode *ip = get_v2ip(mapping->host); struct gfs2_inode *ip = mapping->host->u.generic_ip;
tr->tr_touched = 1; tr->tr_touched = 1;
if (!list_empty(&bd->bd_list_tr) && if (!list_empty(&bd->bd_list_tr) &&
...@@ -633,7 +645,7 @@ static void databuf_lo_before_commit(struct gfs2_sbd *sdp) ...@@ -633,7 +645,7 @@ static void databuf_lo_before_commit(struct gfs2_sbd *sdp)
bh = bd1->bd_bh; bh = bd1->bd_bh;
if (bh) { if (bh) {
set_v2bd(bh, NULL); bh->b_private = NULL;
gfs2_log_unlock(sdp); gfs2_log_unlock(sdp);
wait_on_buffer(bh); wait_on_buffer(bh);
brelse(bh); brelse(bh);
...@@ -651,8 +663,9 @@ static int databuf_lo_scan_elements(struct gfs2_jdesc *jd, unsigned int start, ...@@ -651,8 +663,9 @@ static int databuf_lo_scan_elements(struct gfs2_jdesc *jd, unsigned int start,
struct gfs2_log_descriptor *ld, struct gfs2_log_descriptor *ld,
__be64 *ptr, int pass) __be64 *ptr, int pass)
{ {
struct gfs2_sbd *sdp = get_v2ip(jd->jd_inode)->i_sbd; struct gfs2_inode *ip = jd->jd_inode->u.generic_ip;
struct gfs2_glock *gl = get_v2ip(jd->jd_inode)->i_gl; struct gfs2_sbd *sdp = ip->i_sbd;
struct gfs2_glock *gl = ip->i_gl;
unsigned int blks = be32_to_cpu(ld->ld_data1); unsigned int blks = be32_to_cpu(ld->ld_data1);
struct buffer_head *bh_log, *bh_ip; struct buffer_head *bh_log, *bh_ip;
uint64_t blkno; uint64_t blkno;
...@@ -701,10 +714,11 @@ static int databuf_lo_scan_elements(struct gfs2_jdesc *jd, unsigned int start, ...@@ -701,10 +714,11 @@ static int databuf_lo_scan_elements(struct gfs2_jdesc *jd, unsigned int start,
static void databuf_lo_after_scan(struct gfs2_jdesc *jd, int error, int pass) static void databuf_lo_after_scan(struct gfs2_jdesc *jd, int error, int pass)
{ {
struct gfs2_sbd *sdp = get_v2ip(jd->jd_inode)->i_sbd; struct gfs2_inode *ip = jd->jd_inode->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd;
if (error) { if (error) {
gfs2_meta_sync(get_v2ip(jd->jd_inode)->i_gl, gfs2_meta_sync(ip->i_gl,
DIO_START | DIO_WAIT); DIO_START | DIO_WAIT);
return; return;
} }
...@@ -712,7 +726,7 @@ static void databuf_lo_after_scan(struct gfs2_jdesc *jd, int error, int pass) ...@@ -712,7 +726,7 @@ static void databuf_lo_after_scan(struct gfs2_jdesc *jd, int error, int pass)
return; return;
/* data sync? */ /* data sync? */
gfs2_meta_sync(get_v2ip(jd->jd_inode)->i_gl, DIO_START | DIO_WAIT); gfs2_meta_sync(ip->i_gl, DIO_START | DIO_WAIT);
fs_info(sdp, "jid=%u: Replayed %u of %u data blocks\n", fs_info(sdp, "jid=%u: Replayed %u of %u data blocks\n",
jd->jd_jid, sdp->sd_replayed_blocks, sdp->sd_found_blocks); jd->jd_jid, sdp->sd_replayed_blocks, sdp->sd_found_blocks);
......
...@@ -12,9 +12,13 @@ ...@@ -12,9 +12,13 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "lvb.h"
#define pv(struct, member, fmt) printk(KERN_INFO " "#member" = "fmt"\n", \ #define pv(struct, member, fmt) printk(KERN_INFO " "#member" = "fmt"\n", \
struct->member); struct->member);
......
...@@ -12,14 +12,6 @@ ...@@ -12,14 +12,6 @@
#define GFS2_MIN_LVB_SIZE 32 #define GFS2_MIN_LVB_SIZE 32
struct gfs2_quota_lvb {
uint32_t qb_magic;
uint32_t __pad;
uint64_t qb_limit; /* Hard limit of # blocks to alloc */
uint64_t qb_warn; /* Warn user when alloc is above this # */
int64_t qb_value; /* Current # blocks allocated */
};
void gfs2_quota_lvb_in(struct gfs2_quota_lvb *qb, char *lvb); void gfs2_quota_lvb_in(struct gfs2_quota_lvb *qb, char *lvb);
void gfs2_quota_lvb_out(struct gfs2_quota_lvb *qb, char *lvb); void gfs2_quota_lvb_out(struct gfs2_quota_lvb *qb, char *lvb);
void gfs2_quota_lvb_print(struct gfs2_quota_lvb *qb); void gfs2_quota_lvb_print(struct gfs2_quota_lvb *qb);
......
...@@ -14,11 +14,15 @@ ...@@ -14,11 +14,15 @@
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "ops_fstype.h" #include "ops_fstype.h"
#include "sys.h" #include "sys.h"
#include "util.h"
/** /**
* init_gfs2_fs - Register GFS2 as a filesystem * init_gfs2_fs - Register GFS2 as a filesystem
......
...@@ -17,9 +17,12 @@ ...@@ -17,9 +17,12 @@
#include <linux/writeback.h> #include <linux/writeback.h>
#include <linux/swap.h> #include <linux/swap.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "glock.h" #include "glock.h"
#include "glops.h" #include "glops.h"
#include "inode.h" #include "inode.h"
...@@ -28,6 +31,7 @@ ...@@ -28,6 +31,7 @@
#include "meta_io.h" #include "meta_io.h"
#include "rgrp.h" #include "rgrp.h"
#include "trans.h" #include "trans.h"
#include "util.h"
#define buffer_busy(bh) \ #define buffer_busy(bh) \
((bh)->b_state & ((1ul << BH_Dirty) | (1ul << BH_Lock) | (1ul << BH_Pinned))) ((bh)->b_state & ((1ul << BH_Dirty) | (1ul << BH_Lock) | (1ul << BH_Pinned)))
...@@ -37,7 +41,7 @@ ...@@ -37,7 +41,7 @@
static int aspace_get_block(struct inode *inode, sector_t lblock, static int aspace_get_block(struct inode *inode, sector_t lblock,
struct buffer_head *bh_result, int create) struct buffer_head *bh_result, int create)
{ {
gfs2_assert_warn(get_v2sdp(inode->i_sb), 0); gfs2_assert_warn(inode->i_sb->s_fs_info, 0);
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
...@@ -55,15 +59,15 @@ static int gfs2_aspace_writepage(struct page *page, ...@@ -55,15 +59,15 @@ static int gfs2_aspace_writepage(struct page *page,
static void stuck_releasepage(struct buffer_head *bh) static void stuck_releasepage(struct buffer_head *bh)
{ {
struct gfs2_sbd *sdp = get_v2sdp(bh->b_page->mapping->host->i_sb); struct gfs2_sbd *sdp = bh->b_page->mapping->host->i_sb->s_fs_info;
struct gfs2_bufdata *bd = get_v2bd(bh); struct gfs2_bufdata *bd = bh->b_private;
struct gfs2_glock *gl; struct gfs2_glock *gl;
fs_warn(sdp, "stuck in gfs2_releasepage()\n"); fs_warn(sdp, "stuck in gfs2_releasepage()\n");
fs_warn(sdp, "blkno = %llu, bh->b_count = %d\n", fs_warn(sdp, "blkno = %llu, bh->b_count = %d\n",
(uint64_t)bh->b_blocknr, atomic_read(&bh->b_count)); (uint64_t)bh->b_blocknr, atomic_read(&bh->b_count));
fs_warn(sdp, "pinned = %u\n", buffer_pinned(bh)); fs_warn(sdp, "pinned = %u\n", buffer_pinned(bh));
fs_warn(sdp, "get_v2bd(bh) = %s\n", (bd) ? "!NULL" : "NULL"); fs_warn(sdp, "bh->b_private = %s\n", (bd) ? "!NULL" : "NULL");
if (!bd) if (!bd)
return; return;
...@@ -78,7 +82,7 @@ static void stuck_releasepage(struct buffer_head *bh) ...@@ -78,7 +82,7 @@ static void stuck_releasepage(struct buffer_head *bh)
(list_empty(&bd->bd_le.le_list)) ? "no" : "yes"); (list_empty(&bd->bd_le.le_list)) ? "no" : "yes");
if (gl->gl_ops == &gfs2_inode_glops) { if (gl->gl_ops == &gfs2_inode_glops) {
struct gfs2_inode *ip = get_gl2ip(gl); struct gfs2_inode *ip = gl->gl_object;
unsigned int x; unsigned int x;
if (!ip) if (!ip)
...@@ -110,7 +114,7 @@ static void stuck_releasepage(struct buffer_head *bh) ...@@ -110,7 +114,7 @@ static void stuck_releasepage(struct buffer_head *bh)
static int gfs2_aspace_releasepage(struct page *page, gfp_t gfp_mask) static int gfs2_aspace_releasepage(struct page *page, gfp_t gfp_mask)
{ {
struct inode *aspace = page->mapping->host; struct inode *aspace = page->mapping->host;
struct gfs2_sbd *sdp = get_v2sdp(aspace->i_sb); struct gfs2_sbd *sdp = aspace->i_sb->s_fs_info;
struct buffer_head *bh, *head; struct buffer_head *bh, *head;
struct gfs2_bufdata *bd; struct gfs2_bufdata *bd;
unsigned long t; unsigned long t;
...@@ -139,14 +143,14 @@ static int gfs2_aspace_releasepage(struct page *page, gfp_t gfp_mask) ...@@ -139,14 +143,14 @@ static int gfs2_aspace_releasepage(struct page *page, gfp_t gfp_mask)
gfs2_assert_warn(sdp, !buffer_pinned(bh)); gfs2_assert_warn(sdp, !buffer_pinned(bh));
bd = get_v2bd(bh); bd = bh->b_private;
if (bd) { if (bd) {
gfs2_assert_warn(sdp, bd->bd_bh == bh); gfs2_assert_warn(sdp, bd->bd_bh == bh);
gfs2_assert_warn(sdp, list_empty(&bd->bd_list_tr)); gfs2_assert_warn(sdp, list_empty(&bd->bd_list_tr));
gfs2_assert_warn(sdp, list_empty(&bd->bd_le.le_list)); gfs2_assert_warn(sdp, list_empty(&bd->bd_le.le_list));
gfs2_assert_warn(sdp, !bd->bd_ail); gfs2_assert_warn(sdp, !bd->bd_ail);
kmem_cache_free(gfs2_bufdata_cachep, bd); kmem_cache_free(gfs2_bufdata_cachep, bd);
set_v2bd(bh, NULL); bh->b_private = NULL;
} }
bh = bh->b_this_page; bh = bh->b_this_page;
...@@ -184,7 +188,7 @@ struct inode *gfs2_aspace_get(struct gfs2_sbd *sdp) ...@@ -184,7 +188,7 @@ struct inode *gfs2_aspace_get(struct gfs2_sbd *sdp)
mapping_set_gfp_mask(aspace->i_mapping, GFP_KERNEL); mapping_set_gfp_mask(aspace->i_mapping, GFP_KERNEL);
aspace->i_mapping->a_ops = &aspace_aops; aspace->i_mapping->a_ops = &aspace_aops;
aspace->i_size = ~0ULL; aspace->i_size = ~0ULL;
set_v2ip(aspace, NULL); aspace->u.generic_ip = NULL;
insert_inode_hash(aspace); insert_inode_hash(aspace);
} }
...@@ -523,7 +527,7 @@ int gfs2_meta_reread(struct gfs2_sbd *sdp, struct buffer_head *bh, int flags) ...@@ -523,7 +527,7 @@ int gfs2_meta_reread(struct gfs2_sbd *sdp, struct buffer_head *bh, int flags)
wait_on_buffer(bh); wait_on_buffer(bh);
if (!buffer_uptodate(bh)) { if (!buffer_uptodate(bh)) {
struct gfs2_trans *tr = get_transaction; struct gfs2_trans *tr = current->journal_info;
if (tr && tr->tr_touched) if (tr && tr->tr_touched)
gfs2_io_error_bh(sdp, bh); gfs2_io_error_bh(sdp, bh);
return -EIO; return -EIO;
...@@ -550,7 +554,7 @@ void gfs2_attach_bufdata(struct gfs2_glock *gl, struct buffer_head *bh, ...@@ -550,7 +554,7 @@ void gfs2_attach_bufdata(struct gfs2_glock *gl, struct buffer_head *bh,
if (meta) if (meta)
lock_page(bh->b_page); lock_page(bh->b_page);
if (get_v2bd(bh)) { if (bh->b_private) {
if (meta) if (meta)
unlock_page(bh->b_page); unlock_page(bh->b_page);
return; return;
...@@ -569,7 +573,7 @@ void gfs2_attach_bufdata(struct gfs2_glock *gl, struct buffer_head *bh, ...@@ -569,7 +573,7 @@ void gfs2_attach_bufdata(struct gfs2_glock *gl, struct buffer_head *bh,
lops_init_le(&bd->bd_le, &gfs2_databuf_lops); lops_init_le(&bd->bd_le, &gfs2_databuf_lops);
get_bh(bh); get_bh(bh);
} }
set_v2bd(bh, bd); bh->b_private = bd;
if (meta) if (meta)
unlock_page(bh->b_page); unlock_page(bh->b_page);
...@@ -584,7 +588,7 @@ void gfs2_attach_bufdata(struct gfs2_glock *gl, struct buffer_head *bh, ...@@ -584,7 +588,7 @@ void gfs2_attach_bufdata(struct gfs2_glock *gl, struct buffer_head *bh,
void gfs2_pin(struct gfs2_sbd *sdp, struct buffer_head *bh) void gfs2_pin(struct gfs2_sbd *sdp, struct buffer_head *bh)
{ {
struct gfs2_bufdata *bd = get_v2bd(bh); struct gfs2_bufdata *bd = bh->b_private;
gfs2_assert_withdraw(sdp, test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags)); gfs2_assert_withdraw(sdp, test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags));
...@@ -621,7 +625,7 @@ void gfs2_pin(struct gfs2_sbd *sdp, struct buffer_head *bh) ...@@ -621,7 +625,7 @@ void gfs2_pin(struct gfs2_sbd *sdp, struct buffer_head *bh)
void gfs2_unpin(struct gfs2_sbd *sdp, struct buffer_head *bh, void gfs2_unpin(struct gfs2_sbd *sdp, struct buffer_head *bh,
struct gfs2_ail *ai) struct gfs2_ail *ai)
{ {
struct gfs2_bufdata *bd = get_v2bd(bh); struct gfs2_bufdata *bd = bh->b_private;
gfs2_assert_withdraw(sdp, buffer_uptodate(bh)); gfs2_assert_withdraw(sdp, buffer_uptodate(bh));
...@@ -662,15 +666,16 @@ void gfs2_meta_wipe(struct gfs2_inode *ip, uint64_t bstart, uint32_t blen) ...@@ -662,15 +666,16 @@ void gfs2_meta_wipe(struct gfs2_inode *ip, uint64_t bstart, uint32_t blen)
while (blen) { while (blen) {
bh = getbuf(sdp, aspace, bstart, NO_CREATE); bh = getbuf(sdp, aspace, bstart, NO_CREATE);
if (bh) { if (bh) {
struct gfs2_bufdata *bd = get_v2bd(bh); struct gfs2_bufdata *bd = bh->b_private;
if (test_clear_buffer_pinned(bh)) { if (test_clear_buffer_pinned(bh)) {
struct gfs2_trans *tr = current->journal_info;
gfs2_log_lock(sdp); gfs2_log_lock(sdp);
list_del_init(&bd->bd_le.le_list); list_del_init(&bd->bd_le.le_list);
gfs2_assert_warn(sdp, sdp->sd_log_num_buf); gfs2_assert_warn(sdp, sdp->sd_log_num_buf);
sdp->sd_log_num_buf--; sdp->sd_log_num_buf--;
gfs2_log_unlock(sdp); gfs2_log_unlock(sdp);
get_transaction->tr_num_buf_rm++; tr->tr_num_buf_rm++;
brelse(bh); brelse(bh);
} }
if (bd) { if (bd) {
......
...@@ -12,11 +12,15 @@ ...@@ -12,11 +12,15 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "mount.h" #include "mount.h"
#include "sys.h" #include "sys.h"
#include "util.h"
/** /**
* gfs2_mount_args - Parse mount options * gfs2_mount_args - Parse mount options
......
...@@ -15,9 +15,12 @@ ...@@ -15,9 +15,12 @@
#include <linux/pagemap.h> #include <linux/pagemap.h>
#include <linux/mpage.h> #include <linux/mpage.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "bmap.h" #include "bmap.h"
#include "glock.h" #include "glock.h"
#include "inode.h" #include "inode.h"
...@@ -29,6 +32,7 @@ ...@@ -29,6 +32,7 @@
#include "trans.h" #include "trans.h"
#include "rgrp.h" #include "rgrp.h"
#include "ops_file.h" #include "ops_file.h"
#include "util.h"
/** /**
* gfs2_get_block - Fills in a buffer head with details about a block * gfs2_get_block - Fills in a buffer head with details about a block
...@@ -43,7 +47,7 @@ ...@@ -43,7 +47,7 @@
int gfs2_get_block(struct inode *inode, sector_t lblock, int gfs2_get_block(struct inode *inode, sector_t lblock,
struct buffer_head *bh_result, int create) struct buffer_head *bh_result, int create)
{ {
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
int new = create; int new = create;
uint64_t dblock; uint64_t dblock;
int error; int error;
...@@ -75,7 +79,7 @@ int gfs2_get_block(struct inode *inode, sector_t lblock, ...@@ -75,7 +79,7 @@ int gfs2_get_block(struct inode *inode, sector_t lblock,
static int get_block_noalloc(struct inode *inode, sector_t lblock, static int get_block_noalloc(struct inode *inode, sector_t lblock,
struct buffer_head *bh_result, int create) struct buffer_head *bh_result, int create)
{ {
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
int new = 0; int new = 0;
uint64_t dblock; uint64_t dblock;
int error; int error;
...@@ -96,7 +100,7 @@ static int get_blocks(struct inode *inode, sector_t lblock, ...@@ -96,7 +100,7 @@ static int get_blocks(struct inode *inode, sector_t lblock,
unsigned long max_blocks, struct buffer_head *bh_result, unsigned long max_blocks, struct buffer_head *bh_result,
int create) int create)
{ {
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
int new = create; int new = create;
uint64_t dblock; uint64_t dblock;
uint32_t extlen; uint32_t extlen;
...@@ -124,7 +128,7 @@ static int get_blocks_noalloc(struct inode *inode, sector_t lblock, ...@@ -124,7 +128,7 @@ static int get_blocks_noalloc(struct inode *inode, sector_t lblock,
unsigned long max_blocks, unsigned long max_blocks,
struct buffer_head *bh_result, int create) struct buffer_head *bh_result, int create)
{ {
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
int new = 0; int new = 0;
uint64_t dblock; uint64_t dblock;
uint32_t extlen; uint32_t extlen;
...@@ -158,7 +162,7 @@ static int get_blocks_noalloc(struct inode *inode, sector_t lblock, ...@@ -158,7 +162,7 @@ static int get_blocks_noalloc(struct inode *inode, sector_t lblock,
static int gfs2_writepage(struct page *page, struct writeback_control *wbc) static int gfs2_writepage(struct page *page, struct writeback_control *wbc)
{ {
struct inode *inode = page->mapping->host; struct inode *inode = page->mapping->host;
struct gfs2_inode *ip = get_v2ip(page->mapping->host); struct gfs2_inode *ip = page->mapping->host->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd; struct gfs2_sbd *sdp = ip->i_sbd;
loff_t i_size = i_size_read(inode); loff_t i_size = i_size_read(inode);
pgoff_t end_index = i_size >> PAGE_CACHE_SHIFT; pgoff_t end_index = i_size >> PAGE_CACHE_SHIFT;
...@@ -170,7 +174,7 @@ static int gfs2_writepage(struct page *page, struct writeback_control *wbc) ...@@ -170,7 +174,7 @@ static int gfs2_writepage(struct page *page, struct writeback_control *wbc)
unlock_page(page); unlock_page(page);
return -EIO; return -EIO;
} }
if (get_transaction) if (current->journal_info)
goto out_ignore; goto out_ignore;
/* Is the page fully outside i_size? (truncate in progress) */ /* Is the page fully outside i_size? (truncate in progress) */
...@@ -259,7 +263,7 @@ static int zero_readpage(struct page *page) ...@@ -259,7 +263,7 @@ static int zero_readpage(struct page *page)
static int gfs2_readpage(struct file *file, struct page *page) static int gfs2_readpage(struct file *file, struct page *page)
{ {
struct gfs2_inode *ip = get_v2ip(page->mapping->host); struct gfs2_inode *ip = page->mapping->host->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd; struct gfs2_sbd *sdp = ip->i_sbd;
struct gfs2_holder gh; struct gfs2_holder gh;
int error; int error;
...@@ -307,7 +311,7 @@ static int gfs2_readpage(struct file *file, struct page *page) ...@@ -307,7 +311,7 @@ static int gfs2_readpage(struct file *file, struct page *page)
static int gfs2_prepare_write(struct file *file, struct page *page, static int gfs2_prepare_write(struct file *file, struct page *page,
unsigned from, unsigned to) unsigned from, unsigned to)
{ {
struct gfs2_inode *ip = get_v2ip(page->mapping->host); struct gfs2_inode *ip = page->mapping->host->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd; struct gfs2_sbd *sdp = ip->i_sbd;
unsigned int data_blocks, ind_blocks, rblocks; unsigned int data_blocks, ind_blocks, rblocks;
int alloc_required; int alloc_required;
...@@ -402,7 +406,7 @@ static int gfs2_commit_write(struct file *file, struct page *page, ...@@ -402,7 +406,7 @@ static int gfs2_commit_write(struct file *file, struct page *page,
unsigned from, unsigned to) unsigned from, unsigned to)
{ {
struct inode *inode = page->mapping->host; struct inode *inode = page->mapping->host;
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd; struct gfs2_sbd *sdp = ip->i_sbd;
int error = -EOPNOTSUPP; int error = -EOPNOTSUPP;
struct buffer_head *dibh; struct buffer_head *dibh;
...@@ -482,7 +486,7 @@ static int gfs2_commit_write(struct file *file, struct page *page, ...@@ -482,7 +486,7 @@ static int gfs2_commit_write(struct file *file, struct page *page,
static sector_t gfs2_bmap(struct address_space *mapping, sector_t lblock) static sector_t gfs2_bmap(struct address_space *mapping, sector_t lblock)
{ {
struct gfs2_inode *ip = get_v2ip(mapping->host); struct gfs2_inode *ip = mapping->host->u.generic_ip;
struct gfs2_holder i_gh; struct gfs2_holder i_gh;
sector_t dblock = 0; sector_t dblock = 0;
int error; int error;
...@@ -504,10 +508,10 @@ static void discard_buffer(struct gfs2_sbd *sdp, struct buffer_head *bh) ...@@ -504,10 +508,10 @@ static void discard_buffer(struct gfs2_sbd *sdp, struct buffer_head *bh)
struct gfs2_bufdata *bd; struct gfs2_bufdata *bd;
gfs2_log_lock(sdp); gfs2_log_lock(sdp);
bd = get_v2bd(bh); bd = bh->b_private;
if (bd) { if (bd) {
bd->bd_bh = NULL; bd->bd_bh = NULL;
set_v2bd(bh, NULL); bh->b_private = NULL;
gfs2_log_unlock(sdp); gfs2_log_unlock(sdp);
brelse(bh); brelse(bh);
} else } else
...@@ -525,7 +529,7 @@ static void discard_buffer(struct gfs2_sbd *sdp, struct buffer_head *bh) ...@@ -525,7 +529,7 @@ static void discard_buffer(struct gfs2_sbd *sdp, struct buffer_head *bh)
static int gfs2_invalidatepage(struct page *page, unsigned long offset) static int gfs2_invalidatepage(struct page *page, unsigned long offset)
{ {
struct gfs2_sbd *sdp = get_v2sdp(page->mapping->host->i_sb); struct gfs2_sbd *sdp = page->mapping->host->i_sb->s_fs_info;
struct buffer_head *head, *bh, *next; struct buffer_head *head, *bh, *next;
unsigned int curr_off = 0; unsigned int curr_off = 0;
int ret = 1; int ret = 1;
...@@ -557,7 +561,7 @@ static ssize_t gfs2_direct_IO_write(struct kiocb *iocb, const struct iovec *iov, ...@@ -557,7 +561,7 @@ static ssize_t gfs2_direct_IO_write(struct kiocb *iocb, const struct iovec *iov,
{ {
struct file *file = iocb->ki_filp; struct file *file = iocb->ki_filp;
struct inode *inode = file->f_mapping->host; struct inode *inode = file->f_mapping->host;
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
struct gfs2_holder gh; struct gfs2_holder gh;
int rv; int rv;
...@@ -604,7 +608,7 @@ static ssize_t gfs2_direct_IO(int rw, struct kiocb *iocb, ...@@ -604,7 +608,7 @@ static ssize_t gfs2_direct_IO(int rw, struct kiocb *iocb,
{ {
struct file *file = iocb->ki_filp; struct file *file = iocb->ki_filp;
struct inode *inode = file->f_mapping->host; struct inode *inode = file->f_mapping->host;
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd; struct gfs2_sbd *sdp = ip->i_sbd;
if (rw == WRITE) if (rw == WRITE)
......
...@@ -13,12 +13,16 @@ ...@@ -13,12 +13,16 @@
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "dir.h" #include "dir.h"
#include "glock.h" #include "glock.h"
#include "ops_dentry.h" #include "ops_dentry.h"
#include "util.h"
/** /**
* gfs2_drevalidate - Check directory lookup consistency * gfs2_drevalidate - Check directory lookup consistency
...@@ -34,7 +38,7 @@ ...@@ -34,7 +38,7 @@
static int gfs2_drevalidate(struct dentry *dentry, struct nameidata *nd) static int gfs2_drevalidate(struct dentry *dentry, struct nameidata *nd)
{ {
struct dentry *parent = dget_parent(dentry); struct dentry *parent = dget_parent(dentry);
struct gfs2_inode *dip = get_v2ip(parent->d_inode); struct gfs2_inode *dip = parent->d_inode->u.generic_ip;
struct inode *inode; struct inode *inode;
struct gfs2_holder d_gh; struct gfs2_holder d_gh;
struct gfs2_inode *ip; struct gfs2_inode *ip;
...@@ -66,7 +70,7 @@ static int gfs2_drevalidate(struct dentry *dentry, struct nameidata *nd) ...@@ -66,7 +70,7 @@ static int gfs2_drevalidate(struct dentry *dentry, struct nameidata *nd)
goto fail_gunlock; goto fail_gunlock;
} }
ip = get_v2ip(inode); ip = inode->u.generic_ip;
if (!gfs2_inum_equal(&ip->i_num, &inum)) if (!gfs2_inum_equal(&ip->i_num, &inum))
goto invalid_gunlock; goto invalid_gunlock;
......
...@@ -12,9 +12,12 @@ ...@@ -12,9 +12,12 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "dir.h" #include "dir.h"
#include "glock.h" #include "glock.h"
#include "glops.h" #include "glops.h"
...@@ -61,7 +64,7 @@ static int gfs2_encode_fh(struct dentry *dentry, __u32 *fh, int *len, ...@@ -61,7 +64,7 @@ static int gfs2_encode_fh(struct dentry *dentry, __u32 *fh, int *len,
int connectable) int connectable)
{ {
struct inode *inode = dentry->d_inode; struct inode *inode = dentry->d_inode;
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd; struct gfs2_sbd *sdp = ip->i_sbd;
if (*len < 4 || (connectable && *len < 8)) if (*len < 4 || (connectable && *len < 8))
...@@ -77,12 +80,12 @@ static int gfs2_encode_fh(struct dentry *dentry, __u32 *fh, int *len, ...@@ -77,12 +80,12 @@ static int gfs2_encode_fh(struct dentry *dentry, __u32 *fh, int *len,
fh[3] = cpu_to_be32(fh[3]); fh[3] = cpu_to_be32(fh[3]);
*len = 4; *len = 4;
if (!connectable || ip == get_v2ip(sdp->sd_root_dir)) if (!connectable || ip == sdp->sd_root_dir->u.generic_ip)
return *len; return *len;
spin_lock(&dentry->d_lock); spin_lock(&dentry->d_lock);
inode = dentry->d_parent->d_inode; inode = dentry->d_parent->d_inode;
ip = get_v2ip(inode); ip = inode->u.generic_ip;
gfs2_inode_hold(ip); gfs2_inode_hold(ip);
spin_unlock(&dentry->d_lock); spin_unlock(&dentry->d_lock);
...@@ -138,8 +141,8 @@ static int gfs2_get_name(struct dentry *parent, char *name, ...@@ -138,8 +141,8 @@ static int gfs2_get_name(struct dentry *parent, char *name,
if (!S_ISDIR(dir->i_mode) || !inode) if (!S_ISDIR(dir->i_mode) || !inode)
return -EINVAL; return -EINVAL;
dip = get_v2ip(dir); dip = dir->u.generic_ip;
ip = get_v2ip(inode); ip = inode->u.generic_ip;
*name = 0; *name = 0;
gnfd.inum = ip->i_num; gnfd.inum = ip->i_num;
...@@ -181,7 +184,7 @@ static struct dentry *gfs2_get_parent(struct dentry *child) ...@@ -181,7 +184,7 @@ static struct dentry *gfs2_get_parent(struct dentry *child)
static struct dentry *gfs2_get_dentry(struct super_block *sb, void *inum_p) static struct dentry *gfs2_get_dentry(struct super_block *sb, void *inum_p)
{ {
struct gfs2_sbd *sdp = get_v2sdp(sb); struct gfs2_sbd *sdp = sb->s_fs_info;
struct gfs2_inum *inum = (struct gfs2_inum *)inum_p; struct gfs2_inum *inum = (struct gfs2_inum *)inum_p;
struct gfs2_holder i_gh, ri_gh, rgd_gh; struct gfs2_holder i_gh, ri_gh, rgd_gh;
struct gfs2_rgrpd *rgd; struct gfs2_rgrpd *rgd;
...@@ -194,7 +197,7 @@ static struct dentry *gfs2_get_dentry(struct super_block *sb, void *inum_p) ...@@ -194,7 +197,7 @@ static struct dentry *gfs2_get_dentry(struct super_block *sb, void *inum_p)
inode = gfs2_iget(sb, inum); inode = gfs2_iget(sb, inum);
if (inode) { if (inode) {
ip = get_v2ip(inode); ip = inode->u.generic_ip;
if (ip->i_num.no_formal_ino != inum->no_formal_ino) { if (ip->i_num.no_formal_ino != inum->no_formal_ino) {
iput(inode); iput(inode);
return ERR_PTR(-ESTALE); return ERR_PTR(-ESTALE);
......
...@@ -19,10 +19,13 @@ ...@@ -19,10 +19,13 @@
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/gfs2_ioctl.h> #include <linux/gfs2_ioctl.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "bmap.h" #include "bmap.h"
#include "dir.h" #include "dir.h"
#include "glock.h" #include "glock.h"
...@@ -36,6 +39,7 @@ ...@@ -36,6 +39,7 @@
#include "quota.h" #include "quota.h"
#include "rgrp.h" #include "rgrp.h"
#include "trans.h" #include "trans.h"
#include "util.h"
/* "bad" is for NFS support */ /* "bad" is for NFS support */
struct filldir_bad_entry { struct filldir_bad_entry {
...@@ -125,7 +129,7 @@ int gfs2_internal_read(struct gfs2_inode *ip, struct file_ra_state *ra_state, ...@@ -125,7 +129,7 @@ int gfs2_internal_read(struct gfs2_inode *ip, struct file_ra_state *ra_state,
static loff_t gfs2_llseek(struct file *file, loff_t offset, int origin) static loff_t gfs2_llseek(struct file *file, loff_t offset, int origin)
{ {
struct gfs2_inode *ip = get_v2ip(file->f_mapping->host); struct gfs2_inode *ip = file->f_mapping->host->u.generic_ip;
struct gfs2_holder i_gh; struct gfs2_holder i_gh;
loff_t error; loff_t error;
...@@ -172,7 +176,7 @@ static ssize_t __gfs2_file_aio_read(struct kiocb *iocb, ...@@ -172,7 +176,7 @@ static ssize_t __gfs2_file_aio_read(struct kiocb *iocb,
unsigned long nr_segs, loff_t *ppos) unsigned long nr_segs, loff_t *ppos)
{ {
struct file *filp = iocb->ki_filp; struct file *filp = iocb->ki_filp;
struct gfs2_inode *ip = get_v2ip(filp->f_mapping->host); struct gfs2_inode *ip = filp->f_mapping->host->u.generic_ip;
struct gfs2_holder gh; struct gfs2_holder gh;
ssize_t retval; ssize_t retval;
unsigned long seg; unsigned long seg;
...@@ -354,7 +358,7 @@ static int filldir_reg_func(void *opaque, const char *name, unsigned int length, ...@@ -354,7 +358,7 @@ static int filldir_reg_func(void *opaque, const char *name, unsigned int length,
static int readdir_reg(struct file *file, void *dirent, filldir_t filldir) static int readdir_reg(struct file *file, void *dirent, filldir_t filldir)
{ {
struct gfs2_inode *dip = get_v2ip(file->f_mapping->host); struct gfs2_inode *dip = file->f_mapping->host->u.generic_ip;
struct filldir_reg fdr; struct filldir_reg fdr;
struct gfs2_holder d_gh; struct gfs2_holder d_gh;
uint64_t offset = file->f_pos; uint64_t offset = file->f_pos;
...@@ -443,7 +447,7 @@ static int filldir_bad_func(void *opaque, const char *name, unsigned int length, ...@@ -443,7 +447,7 @@ static int filldir_bad_func(void *opaque, const char *name, unsigned int length,
static int readdir_bad(struct file *file, void *dirent, filldir_t filldir) static int readdir_bad(struct file *file, void *dirent, filldir_t filldir)
{ {
struct gfs2_inode *dip = get_v2ip(file->f_mapping->host); struct gfs2_inode *dip = file->f_mapping->host->u.generic_ip;
struct gfs2_sbd *sdp = dip->i_sbd; struct gfs2_sbd *sdp = dip->i_sbd;
struct filldir_reg fdr; struct filldir_reg fdr;
unsigned int entries, size; unsigned int entries, size;
...@@ -608,7 +612,7 @@ static int gfs2_ioctl_flags(struct gfs2_inode *ip, unsigned int cmd, ...@@ -608,7 +612,7 @@ static int gfs2_ioctl_flags(struct gfs2_inode *ip, unsigned int cmd,
static int gfs2_ioctl(struct inode *inode, struct file *file, unsigned int cmd, static int gfs2_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
unsigned long arg) unsigned long arg)
{ {
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
switch (cmd) { switch (cmd) {
case GFS2_IOCTL_SETFLAGS: case GFS2_IOCTL_SETFLAGS:
...@@ -630,7 +634,7 @@ static int gfs2_ioctl(struct inode *inode, struct file *file, unsigned int cmd, ...@@ -630,7 +634,7 @@ static int gfs2_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
static int gfs2_mmap(struct file *file, struct vm_area_struct *vma) static int gfs2_mmap(struct file *file, struct vm_area_struct *vma)
{ {
struct gfs2_inode *ip = get_v2ip(file->f_mapping->host); struct gfs2_inode *ip = file->f_mapping->host->u.generic_ip;
struct gfs2_holder i_gh; struct gfs2_holder i_gh;
int error; int error;
...@@ -665,7 +669,7 @@ static int gfs2_mmap(struct file *file, struct vm_area_struct *vma) ...@@ -665,7 +669,7 @@ static int gfs2_mmap(struct file *file, struct vm_area_struct *vma)
static int gfs2_open(struct inode *inode, struct file *file) static int gfs2_open(struct inode *inode, struct file *file)
{ {
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
struct gfs2_holder i_gh; struct gfs2_holder i_gh;
struct gfs2_file *fp; struct gfs2_file *fp;
int error; int error;
...@@ -679,8 +683,8 @@ static int gfs2_open(struct inode *inode, struct file *file) ...@@ -679,8 +683,8 @@ static int gfs2_open(struct inode *inode, struct file *file)
fp->f_inode = ip; fp->f_inode = ip;
fp->f_vfile = file; fp->f_vfile = file;
gfs2_assert_warn(ip->i_sbd, !get_v2fp(file)); gfs2_assert_warn(ip->i_sbd, !file->private_data);
set_v2fp(file, fp); file->private_data = fp;
if (S_ISREG(ip->i_di.di_mode)) { if (S_ISREG(ip->i_di.di_mode)) {
error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY,
...@@ -708,7 +712,7 @@ static int gfs2_open(struct inode *inode, struct file *file) ...@@ -708,7 +712,7 @@ static int gfs2_open(struct inode *inode, struct file *file)
gfs2_glock_dq_uninit(&i_gh); gfs2_glock_dq_uninit(&i_gh);
fail: fail:
set_v2fp(file, NULL); file->private_data = NULL;
kfree(fp); kfree(fp);
return error; return error;
...@@ -724,11 +728,11 @@ static int gfs2_open(struct inode *inode, struct file *file) ...@@ -724,11 +728,11 @@ static int gfs2_open(struct inode *inode, struct file *file)
static int gfs2_close(struct inode *inode, struct file *file) static int gfs2_close(struct inode *inode, struct file *file)
{ {
struct gfs2_sbd *sdp = get_v2sdp(inode->i_sb); struct gfs2_sbd *sdp = inode->i_sb->s_fs_info;
struct gfs2_file *fp; struct gfs2_file *fp;
fp = get_v2fp(file); fp = file->private_data;
set_v2fp(file, NULL); file->private_data = NULL;
if (gfs2_assert_warn(sdp, fp)) if (gfs2_assert_warn(sdp, fp))
return -EIO; return -EIO;
...@@ -748,7 +752,7 @@ static int gfs2_close(struct inode *inode, struct file *file) ...@@ -748,7 +752,7 @@ static int gfs2_close(struct inode *inode, struct file *file)
static int gfs2_fsync(struct file *file, struct dentry *dentry, int datasync) static int gfs2_fsync(struct file *file, struct dentry *dentry, int datasync)
{ {
struct gfs2_inode *ip = get_v2ip(dentry->d_inode); struct gfs2_inode *ip = dentry->d_inode->u.generic_ip;
gfs2_log_flush_glock(ip->i_gl); gfs2_log_flush_glock(ip->i_gl);
...@@ -766,7 +770,7 @@ static int gfs2_fsync(struct file *file, struct dentry *dentry, int datasync) ...@@ -766,7 +770,7 @@ static int gfs2_fsync(struct file *file, struct dentry *dentry, int datasync)
static int gfs2_lock(struct file *file, int cmd, struct file_lock *fl) static int gfs2_lock(struct file *file, int cmd, struct file_lock *fl)
{ {
struct gfs2_inode *ip = get_v2ip(file->f_mapping->host); struct gfs2_inode *ip = file->f_mapping->host->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd; struct gfs2_sbd *sdp = ip->i_sbd;
struct lm_lockname name = struct lm_lockname name =
{ .ln_number = ip->i_num.no_addr, { .ln_number = ip->i_num.no_addr,
...@@ -824,7 +828,7 @@ static ssize_t gfs2_sendfile(struct file *in_file, loff_t *offset, size_t count, ...@@ -824,7 +828,7 @@ static ssize_t gfs2_sendfile(struct file *in_file, loff_t *offset, size_t count,
static int do_flock(struct file *file, int cmd, struct file_lock *fl) static int do_flock(struct file *file, int cmd, struct file_lock *fl)
{ {
struct gfs2_file *fp = get_v2fp(file); struct gfs2_file *fp = file->private_data;
struct gfs2_holder *fl_gh = &fp->f_fl_gh; struct gfs2_holder *fl_gh = &fp->f_fl_gh;
struct gfs2_inode *ip = fp->f_inode; struct gfs2_inode *ip = fp->f_inode;
struct gfs2_glock *gl; struct gfs2_glock *gl;
...@@ -874,7 +878,7 @@ static int do_flock(struct file *file, int cmd, struct file_lock *fl) ...@@ -874,7 +878,7 @@ static int do_flock(struct file *file, int cmd, struct file_lock *fl)
static void do_unflock(struct file *file, struct file_lock *fl) static void do_unflock(struct file *file, struct file_lock *fl)
{ {
struct gfs2_file *fp = get_v2fp(file); struct gfs2_file *fp = file->private_data;
struct gfs2_holder *fl_gh = &fp->f_fl_gh; struct gfs2_holder *fl_gh = &fp->f_fl_gh;
mutex_lock(&fp->f_fl_mutex); mutex_lock(&fp->f_fl_mutex);
...@@ -895,7 +899,7 @@ static void do_unflock(struct file *file, struct file_lock *fl) ...@@ -895,7 +899,7 @@ static void do_unflock(struct file *file, struct file_lock *fl)
static int gfs2_flock(struct file *file, int cmd, struct file_lock *fl) static int gfs2_flock(struct file *file, int cmd, struct file_lock *fl)
{ {
struct gfs2_inode *ip = get_v2ip(file->f_mapping->host); struct gfs2_inode *ip = file->f_mapping->host->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd; struct gfs2_sbd *sdp = ip->i_sbd;
if (!(fl->fl_flags & FL_FLOCK)) if (!(fl->fl_flags & FL_FLOCK))
......
...@@ -15,9 +15,12 @@ ...@@ -15,9 +15,12 @@
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
#include <linux/blkdev.h> #include <linux/blkdev.h>
#include <linux/kthread.h> #include <linux/kthread.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "daemon.h" #include "daemon.h"
#include "glock.h" #include "glock.h"
#include "glops.h" #include "glops.h"
...@@ -32,6 +35,7 @@ ...@@ -32,6 +35,7 @@
#include "super.h" #include "super.h"
#include "unlinked.h" #include "unlinked.h"
#include "sys.h" #include "sys.h"
#include "util.h"
#define DO 0 #define DO 0
#define UNDO 1 #define UNDO 1
...@@ -47,7 +51,7 @@ static struct gfs2_sbd *init_sbd(struct super_block *sb) ...@@ -47,7 +51,7 @@ static struct gfs2_sbd *init_sbd(struct super_block *sb)
memset(sdp, 0, sizeof(struct gfs2_sbd)); memset(sdp, 0, sizeof(struct gfs2_sbd));
set_v2sdp(sb, sdp); sb->s_fs_info = sdp;
sdp->sd_vfs = sb; sdp->sd_vfs = sb;
gfs2_tune_init(&sdp->sd_tune); gfs2_tune_init(&sdp->sd_tune);
...@@ -382,6 +386,7 @@ static int init_journal(struct gfs2_sbd *sdp, int undo) ...@@ -382,6 +386,7 @@ static int init_journal(struct gfs2_sbd *sdp, int undo)
{ {
struct gfs2_holder ji_gh; struct gfs2_holder ji_gh;
struct task_struct *p; struct task_struct *p;
struct gfs2_inode *ip;
int jindex = 1; int jindex = 1;
int error = 0; int error = 0;
...@@ -396,7 +401,8 @@ static int init_journal(struct gfs2_sbd *sdp, int undo) ...@@ -396,7 +401,8 @@ static int init_journal(struct gfs2_sbd *sdp, int undo)
fs_err(sdp, "can't lookup journal index: %d\n", error); fs_err(sdp, "can't lookup journal index: %d\n", error);
return error; return error;
} }
set_bit(GLF_STICKY, &get_v2ip(sdp->sd_jindex)->i_gl->gl_flags); ip = sdp->sd_jindex->u.generic_ip;
set_bit(GLF_STICKY, &ip->i_gl->gl_flags);
/* Load in the journal index special file */ /* Load in the journal index special file */
...@@ -436,8 +442,8 @@ static int init_journal(struct gfs2_sbd *sdp, int undo) ...@@ -436,8 +442,8 @@ static int init_journal(struct gfs2_sbd *sdp, int undo)
goto fail_jindex; goto fail_jindex;
} }
error = gfs2_glock_nq_init( ip = sdp->sd_jdesc->jd_inode->u.generic_ip;
get_v2ip(sdp->sd_jdesc->jd_inode)->i_gl, error = gfs2_glock_nq_init(ip->i_gl,
LM_ST_SHARED, LM_ST_SHARED,
LM_FLAG_NOEXP | GL_EXACT, LM_FLAG_NOEXP | GL_EXACT,
&sdp->sd_jinode_gh); &sdp->sd_jinode_gh);
...@@ -522,6 +528,7 @@ static int init_journal(struct gfs2_sbd *sdp, int undo) ...@@ -522,6 +528,7 @@ static int init_journal(struct gfs2_sbd *sdp, int undo)
static int init_inodes(struct gfs2_sbd *sdp, int undo) static int init_inodes(struct gfs2_sbd *sdp, int undo)
{ {
int error = 0; int error = 0;
struct gfs2_inode *ip;
if (undo) if (undo)
goto fail_qinode; goto fail_qinode;
...@@ -560,8 +567,9 @@ static int init_inodes(struct gfs2_sbd *sdp, int undo) ...@@ -560,8 +567,9 @@ static int init_inodes(struct gfs2_sbd *sdp, int undo)
fs_err(sdp, "can't get resource index inode: %d\n", error); fs_err(sdp, "can't get resource index inode: %d\n", error);
goto fail_statfs; goto fail_statfs;
} }
set_bit(GLF_STICKY, &get_v2ip(sdp->sd_rindex)->i_gl->gl_flags); ip = sdp->sd_rindex->u.generic_ip;
sdp->sd_rindex_vn = get_v2ip(sdp->sd_rindex)->i_gl->gl_vn - 1; set_bit(GLF_STICKY, &ip->i_gl->gl_flags);
sdp->sd_rindex_vn = ip->i_gl->gl_vn - 1;
/* Read in the quota inode */ /* Read in the quota inode */
error = gfs2_lookup_simple(sdp->sd_master_dir, "quota", error = gfs2_lookup_simple(sdp->sd_master_dir, "quota",
...@@ -597,6 +605,7 @@ static int init_per_node(struct gfs2_sbd *sdp, int undo) ...@@ -597,6 +605,7 @@ static int init_per_node(struct gfs2_sbd *sdp, int undo)
struct inode *pn = NULL; struct inode *pn = NULL;
char buf[30]; char buf[30];
int error = 0; int error = 0;
struct gfs2_inode *ip;
if (sdp->sd_args.ar_spectator) if (sdp->sd_args.ar_spectator)
return 0; return 0;
...@@ -641,7 +650,8 @@ static int init_per_node(struct gfs2_sbd *sdp, int undo) ...@@ -641,7 +650,8 @@ static int init_per_node(struct gfs2_sbd *sdp, int undo)
iput(pn); iput(pn);
pn = NULL; pn = NULL;
error = gfs2_glock_nq_init(get_v2ip(sdp->sd_ir_inode)->i_gl, ip = sdp->sd_ir_inode->u.generic_ip;
error = gfs2_glock_nq_init(ip->i_gl,
LM_ST_EXCLUSIVE, GL_NEVER_RECURSE, LM_ST_EXCLUSIVE, GL_NEVER_RECURSE,
&sdp->sd_ir_gh); &sdp->sd_ir_gh);
if (error) { if (error) {
...@@ -649,7 +659,8 @@ static int init_per_node(struct gfs2_sbd *sdp, int undo) ...@@ -649,7 +659,8 @@ static int init_per_node(struct gfs2_sbd *sdp, int undo)
goto fail_qc_i; goto fail_qc_i;
} }
error = gfs2_glock_nq_init(get_v2ip(sdp->sd_sc_inode)->i_gl, ip = sdp->sd_sc_inode->u.generic_ip;
error = gfs2_glock_nq_init(ip->i_gl,
LM_ST_EXCLUSIVE, GL_NEVER_RECURSE, LM_ST_EXCLUSIVE, GL_NEVER_RECURSE,
&sdp->sd_sc_gh); &sdp->sd_sc_gh);
if (error) { if (error) {
...@@ -657,7 +668,8 @@ static int init_per_node(struct gfs2_sbd *sdp, int undo) ...@@ -657,7 +668,8 @@ static int init_per_node(struct gfs2_sbd *sdp, int undo)
goto fail_ir_gh; goto fail_ir_gh;
} }
error = gfs2_glock_nq_init(get_v2ip(sdp->sd_ut_inode)->i_gl, ip = sdp->sd_ut_inode->u.generic_ip;
error = gfs2_glock_nq_init(ip->i_gl,
LM_ST_EXCLUSIVE, GL_NEVER_RECURSE, LM_ST_EXCLUSIVE, GL_NEVER_RECURSE,
&sdp->sd_ut_gh); &sdp->sd_ut_gh);
if (error) { if (error) {
...@@ -665,7 +677,8 @@ static int init_per_node(struct gfs2_sbd *sdp, int undo) ...@@ -665,7 +677,8 @@ static int init_per_node(struct gfs2_sbd *sdp, int undo)
goto fail_sc_gh; goto fail_sc_gh;
} }
error = gfs2_glock_nq_init(get_v2ip(sdp->sd_qc_inode)->i_gl, ip = sdp->sd_qc_inode->u.generic_ip;
error = gfs2_glock_nq_init(ip->i_gl,
LM_ST_EXCLUSIVE, GL_NEVER_RECURSE, LM_ST_EXCLUSIVE, GL_NEVER_RECURSE,
&sdp->sd_qc_gh); &sdp->sd_qc_gh);
if (error) { if (error) {
...@@ -862,7 +875,7 @@ static int fill_super(struct super_block *sb, void *data, int silent) ...@@ -862,7 +875,7 @@ static int fill_super(struct super_block *sb, void *data, int silent)
fail: fail:
vfree(sdp); vfree(sdp);
set_v2sdp(sb, NULL); sb->s_fs_info = NULL;
return error; return error;
} }
......
...@@ -17,10 +17,13 @@ ...@@ -17,10 +17,13 @@
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/xattr.h> #include <linux/xattr.h>
#include <linux/posix_acl.h> #include <linux/posix_acl.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "acl.h" #include "acl.h"
#include "bmap.h" #include "bmap.h"
#include "dir.h" #include "dir.h"
...@@ -36,6 +39,7 @@ ...@@ -36,6 +39,7 @@
#include "rgrp.h" #include "rgrp.h"
#include "trans.h" #include "trans.h"
#include "unlinked.h" #include "unlinked.h"
#include "util.h"
/** /**
* gfs2_create - Create a file * gfs2_create - Create a file
...@@ -49,7 +53,7 @@ ...@@ -49,7 +53,7 @@
static int gfs2_create(struct inode *dir, struct dentry *dentry, static int gfs2_create(struct inode *dir, struct dentry *dentry,
int mode, struct nameidata *nd) int mode, struct nameidata *nd)
{ {
struct gfs2_inode *dip = get_v2ip(dir); struct gfs2_inode *dip = dir->u.generic_ip;
struct gfs2_sbd *sdp = dip->i_sbd; struct gfs2_sbd *sdp = dip->i_sbd;
struct gfs2_holder ghs[2]; struct gfs2_holder ghs[2];
struct inode *inode; struct inode *inode;
...@@ -106,7 +110,7 @@ static int gfs2_create(struct inode *dir, struct dentry *dentry, ...@@ -106,7 +110,7 @@ static int gfs2_create(struct inode *dir, struct dentry *dentry,
static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry, static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry,
struct nameidata *nd) struct nameidata *nd)
{ {
struct gfs2_inode *dip = get_v2ip(dir); struct gfs2_inode *dip = dir->u.generic_ip;
struct gfs2_sbd *sdp = dip->i_sbd; struct gfs2_sbd *sdp = dip->i_sbd;
struct inode *inode = NULL; struct inode *inode = NULL;
int error; int error;
...@@ -140,10 +144,10 @@ static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry, ...@@ -140,10 +144,10 @@ static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry,
static int gfs2_link(struct dentry *old_dentry, struct inode *dir, static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
struct dentry *dentry) struct dentry *dentry)
{ {
struct gfs2_inode *dip = get_v2ip(dir); struct gfs2_inode *dip = dir->u.generic_ip;
struct gfs2_sbd *sdp = dip->i_sbd; struct gfs2_sbd *sdp = dip->i_sbd;
struct inode *inode = old_dentry->d_inode; struct inode *inode = old_dentry->d_inode;
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
struct gfs2_holder ghs[2]; struct gfs2_holder ghs[2];
int alloc_required; int alloc_required;
int error; int error;
...@@ -274,9 +278,9 @@ static int gfs2_link(struct dentry *old_dentry, struct inode *dir, ...@@ -274,9 +278,9 @@ static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
static int gfs2_unlink(struct inode *dir, struct dentry *dentry) static int gfs2_unlink(struct inode *dir, struct dentry *dentry)
{ {
struct gfs2_inode *dip = get_v2ip(dir); struct gfs2_inode *dip = dir->u.generic_ip;
struct gfs2_sbd *sdp = dip->i_sbd; struct gfs2_sbd *sdp = dip->i_sbd;
struct gfs2_inode *ip = get_v2ip(dentry->d_inode); struct gfs2_inode *ip = dentry->d_inode->u.generic_ip;
struct gfs2_unlinked *ul; struct gfs2_unlinked *ul;
struct gfs2_holder ghs[2]; struct gfs2_holder ghs[2];
int error; int error;
...@@ -329,7 +333,7 @@ static int gfs2_unlink(struct inode *dir, struct dentry *dentry) ...@@ -329,7 +333,7 @@ static int gfs2_unlink(struct inode *dir, struct dentry *dentry)
static int gfs2_symlink(struct inode *dir, struct dentry *dentry, static int gfs2_symlink(struct inode *dir, struct dentry *dentry,
const char *symname) const char *symname)
{ {
struct gfs2_inode *dip = get_v2ip(dir), *ip; struct gfs2_inode *dip = dir->u.generic_ip, *ip;
struct gfs2_sbd *sdp = dip->i_sbd; struct gfs2_sbd *sdp = dip->i_sbd;
struct gfs2_holder ghs[2]; struct gfs2_holder ghs[2];
struct inode *inode; struct inode *inode;
...@@ -350,7 +354,7 @@ static int gfs2_symlink(struct inode *dir, struct dentry *dentry, ...@@ -350,7 +354,7 @@ static int gfs2_symlink(struct inode *dir, struct dentry *dentry,
return PTR_ERR(inode); return PTR_ERR(inode);
} }
ip = get_gl2ip(ghs[1].gh_gl); ip = ghs[1].gh_gl->gl_object;
ip->i_di.di_size = size; ip->i_di.di_size = size;
...@@ -388,7 +392,7 @@ static int gfs2_symlink(struct inode *dir, struct dentry *dentry, ...@@ -388,7 +392,7 @@ static int gfs2_symlink(struct inode *dir, struct dentry *dentry,
static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, int mode) static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, int mode)
{ {
struct gfs2_inode *dip = get_v2ip(dir), *ip; struct gfs2_inode *dip = dir->u.generic_ip, *ip;
struct gfs2_sbd *sdp = dip->i_sbd; struct gfs2_sbd *sdp = dip->i_sbd;
struct gfs2_holder ghs[2]; struct gfs2_holder ghs[2];
struct inode *inode; struct inode *inode;
...@@ -403,7 +407,7 @@ static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, int mode) ...@@ -403,7 +407,7 @@ static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, int mode)
return PTR_ERR(inode); return PTR_ERR(inode);
} }
ip = get_gl2ip(ghs[1].gh_gl); ip = ghs[1].gh_gl->gl_object;
ip->i_di.di_nlink = 2; ip->i_di.di_nlink = 2;
ip->i_di.di_size = sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode); ip->i_di.di_size = sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode);
...@@ -468,9 +472,9 @@ static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, int mode) ...@@ -468,9 +472,9 @@ static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, int mode)
static int gfs2_rmdir(struct inode *dir, struct dentry *dentry) static int gfs2_rmdir(struct inode *dir, struct dentry *dentry)
{ {
struct gfs2_inode *dip = get_v2ip(dir); struct gfs2_inode *dip = dir->u.generic_ip;
struct gfs2_sbd *sdp = dip->i_sbd; struct gfs2_sbd *sdp = dip->i_sbd;
struct gfs2_inode *ip = get_v2ip(dentry->d_inode); struct gfs2_inode *ip = dentry->d_inode->u.generic_ip;
struct gfs2_unlinked *ul; struct gfs2_unlinked *ul;
struct gfs2_holder ghs[2]; struct gfs2_holder ghs[2];
int error; int error;
...@@ -534,7 +538,7 @@ static int gfs2_rmdir(struct inode *dir, struct dentry *dentry) ...@@ -534,7 +538,7 @@ static int gfs2_rmdir(struct inode *dir, struct dentry *dentry)
static int gfs2_mknod(struct inode *dir, struct dentry *dentry, int mode, static int gfs2_mknod(struct inode *dir, struct dentry *dentry, int mode,
dev_t dev) dev_t dev)
{ {
struct gfs2_inode *dip = get_v2ip(dir), *ip; struct gfs2_inode *dip = dir->u.generic_ip, *ip;
struct gfs2_sbd *sdp = dip->i_sbd; struct gfs2_sbd *sdp = dip->i_sbd;
struct gfs2_holder ghs[2]; struct gfs2_holder ghs[2];
struct inode *inode; struct inode *inode;
...@@ -563,7 +567,7 @@ static int gfs2_mknod(struct inode *dir, struct dentry *dentry, int mode, ...@@ -563,7 +567,7 @@ static int gfs2_mknod(struct inode *dir, struct dentry *dentry, int mode,
return PTR_ERR(inode); return PTR_ERR(inode);
} }
ip = get_gl2ip(ghs[1].gh_gl); ip = ghs[1].gh_gl->gl_object;
ip->i_di.di_major = major; ip->i_di.di_major = major;
ip->i_di.di_minor = minor; ip->i_di.di_minor = minor;
...@@ -602,9 +606,9 @@ static int gfs2_mknod(struct inode *dir, struct dentry *dentry, int mode, ...@@ -602,9 +606,9 @@ static int gfs2_mknod(struct inode *dir, struct dentry *dentry, int mode,
static int gfs2_rename(struct inode *odir, struct dentry *odentry, static int gfs2_rename(struct inode *odir, struct dentry *odentry,
struct inode *ndir, struct dentry *ndentry) struct inode *ndir, struct dentry *ndentry)
{ {
struct gfs2_inode *odip = get_v2ip(odir); struct gfs2_inode *odip = odir->u.generic_ip;
struct gfs2_inode *ndip = get_v2ip(ndir); struct gfs2_inode *ndip = ndir->u.generic_ip;
struct gfs2_inode *ip = get_v2ip(odentry->d_inode); struct gfs2_inode *ip = odentry->d_inode->u.generic_ip;
struct gfs2_inode *nip = NULL; struct gfs2_inode *nip = NULL;
struct gfs2_sbd *sdp = odip->i_sbd; struct gfs2_sbd *sdp = odip->i_sbd;
struct gfs2_unlinked *ul; struct gfs2_unlinked *ul;
...@@ -616,7 +620,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry, ...@@ -616,7 +620,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
int error; int error;
if (ndentry->d_inode) { if (ndentry->d_inode) {
nip = get_v2ip(ndentry->d_inode); nip = ndentry->d_inode->u.generic_ip;
if (ip == nip) if (ip == nip)
return 0; return 0;
} }
...@@ -848,7 +852,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry, ...@@ -848,7 +852,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
static int gfs2_readlink(struct dentry *dentry, char __user *user_buf, static int gfs2_readlink(struct dentry *dentry, char __user *user_buf,
int user_size) int user_size)
{ {
struct gfs2_inode *ip = get_v2ip(dentry->d_inode); struct gfs2_inode *ip = dentry->d_inode->u.generic_ip;
char array[GFS2_FAST_NAME_SIZE], *buf = array; char array[GFS2_FAST_NAME_SIZE], *buf = array;
unsigned int len = GFS2_FAST_NAME_SIZE; unsigned int len = GFS2_FAST_NAME_SIZE;
int error; int error;
...@@ -884,7 +888,7 @@ static int gfs2_readlink(struct dentry *dentry, char __user *user_buf, ...@@ -884,7 +888,7 @@ static int gfs2_readlink(struct dentry *dentry, char __user *user_buf,
static void *gfs2_follow_link(struct dentry *dentry, struct nameidata *nd) static void *gfs2_follow_link(struct dentry *dentry, struct nameidata *nd)
{ {
struct gfs2_inode *ip = get_v2ip(dentry->d_inode); struct gfs2_inode *ip = dentry->d_inode->u.generic_ip;
char array[GFS2_FAST_NAME_SIZE], *buf = array; char array[GFS2_FAST_NAME_SIZE], *buf = array;
unsigned int len = GFS2_FAST_NAME_SIZE; unsigned int len = GFS2_FAST_NAME_SIZE;
int error; int error;
...@@ -910,7 +914,7 @@ static void *gfs2_follow_link(struct dentry *dentry, struct nameidata *nd) ...@@ -910,7 +914,7 @@ static void *gfs2_follow_link(struct dentry *dentry, struct nameidata *nd)
static int gfs2_permission(struct inode *inode, int mask, struct nameidata *nd) static int gfs2_permission(struct inode *inode, int mask, struct nameidata *nd)
{ {
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
struct gfs2_holder i_gh; struct gfs2_holder i_gh;
int error; int error;
...@@ -930,7 +934,7 @@ static int gfs2_permission(struct inode *inode, int mask, struct nameidata *nd) ...@@ -930,7 +934,7 @@ static int gfs2_permission(struct inode *inode, int mask, struct nameidata *nd)
static int setattr_size(struct inode *inode, struct iattr *attr) static int setattr_size(struct inode *inode, struct iattr *attr)
{ {
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
int error; int error;
if (attr->ia_size != ip->i_di.di_size) { if (attr->ia_size != ip->i_di.di_size) {
...@@ -948,7 +952,7 @@ static int setattr_size(struct inode *inode, struct iattr *attr) ...@@ -948,7 +952,7 @@ static int setattr_size(struct inode *inode, struct iattr *attr)
static int setattr_chown(struct inode *inode, struct iattr *attr) static int setattr_chown(struct inode *inode, struct iattr *attr)
{ {
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd; struct gfs2_sbd *sdp = ip->i_sbd;
struct buffer_head *dibh; struct buffer_head *dibh;
uint32_t ouid, ogid, nuid, ngid; uint32_t ouid, ogid, nuid, ngid;
...@@ -1025,7 +1029,7 @@ static int setattr_chown(struct inode *inode, struct iattr *attr) ...@@ -1025,7 +1029,7 @@ static int setattr_chown(struct inode *inode, struct iattr *attr)
static int gfs2_setattr(struct dentry *dentry, struct iattr *attr) static int gfs2_setattr(struct dentry *dentry, struct iattr *attr)
{ {
struct inode *inode = dentry->d_inode; struct inode *inode = dentry->d_inode;
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
struct gfs2_holder i_gh; struct gfs2_holder i_gh;
int error; int error;
...@@ -1072,7 +1076,7 @@ static int gfs2_getattr(struct vfsmount *mnt, struct dentry *dentry, ...@@ -1072,7 +1076,7 @@ static int gfs2_getattr(struct vfsmount *mnt, struct dentry *dentry,
struct kstat *stat) struct kstat *stat)
{ {
struct inode *inode = dentry->d_inode; struct inode *inode = dentry->d_inode;
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
struct gfs2_holder gh; struct gfs2_holder gh;
int error; int error;
...@@ -1088,7 +1092,7 @@ static int gfs2_getattr(struct vfsmount *mnt, struct dentry *dentry, ...@@ -1088,7 +1092,7 @@ static int gfs2_getattr(struct vfsmount *mnt, struct dentry *dentry,
static int gfs2_setxattr(struct dentry *dentry, const char *name, static int gfs2_setxattr(struct dentry *dentry, const char *name,
const void *data, size_t size, int flags) const void *data, size_t size, int flags)
{ {
struct gfs2_inode *ip = get_v2ip(dentry->d_inode); struct gfs2_inode *ip = dentry->d_inode->u.generic_ip;
struct gfs2_ea_request er; struct gfs2_ea_request er;
memset(&er, 0, sizeof(struct gfs2_ea_request)); memset(&er, 0, sizeof(struct gfs2_ea_request));
...@@ -1118,7 +1122,7 @@ static ssize_t gfs2_getxattr(struct dentry *dentry, const char *name, ...@@ -1118,7 +1122,7 @@ static ssize_t gfs2_getxattr(struct dentry *dentry, const char *name,
er.er_name_len = strlen(er.er_name); er.er_name_len = strlen(er.er_name);
er.er_data_len = size; er.er_data_len = size;
return gfs2_ea_get(get_v2ip(dentry->d_inode), &er); return gfs2_ea_get(dentry->d_inode->u.generic_ip, &er);
} }
static ssize_t gfs2_listxattr(struct dentry *dentry, char *buffer, size_t size) static ssize_t gfs2_listxattr(struct dentry *dentry, char *buffer, size_t size)
...@@ -1129,7 +1133,7 @@ static ssize_t gfs2_listxattr(struct dentry *dentry, char *buffer, size_t size) ...@@ -1129,7 +1133,7 @@ static ssize_t gfs2_listxattr(struct dentry *dentry, char *buffer, size_t size)
er.er_data = (size) ? buffer : NULL; er.er_data = (size) ? buffer : NULL;
er.er_data_len = size; er.er_data_len = size;
return gfs2_ea_list(get_v2ip(dentry->d_inode), &er); return gfs2_ea_list(dentry->d_inode->u.generic_ip, &er);
} }
static int gfs2_removexattr(struct dentry *dentry, const char *name) static int gfs2_removexattr(struct dentry *dentry, const char *name)
...@@ -1142,7 +1146,7 @@ static int gfs2_removexattr(struct dentry *dentry, const char *name) ...@@ -1142,7 +1146,7 @@ static int gfs2_removexattr(struct dentry *dentry, const char *name)
return -EOPNOTSUPP; return -EOPNOTSUPP;
er.er_name_len = strlen(er.er_name); er.er_name_len = strlen(er.er_name);
return gfs2_ea_remove(get_v2ip(dentry->d_inode), &er); return gfs2_ea_remove(dentry->d_inode->u.generic_ip, &er);
} }
struct inode_operations gfs2_file_iops = { struct inode_operations gfs2_file_iops = {
......
...@@ -18,9 +18,12 @@ ...@@ -18,9 +18,12 @@
#include <linux/mount.h> #include <linux/mount.h>
#include <linux/kthread.h> #include <linux/kthread.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "glock.h" #include "glock.h"
#include "inode.h" #include "inode.h"
#include "lm.h" #include "lm.h"
...@@ -33,6 +36,7 @@ ...@@ -33,6 +36,7 @@
#include "rgrp.h" #include "rgrp.h"
#include "super.h" #include "super.h"
#include "sys.h" #include "sys.h"
#include "util.h"
/** /**
* gfs2_write_inode - Make sure the inode is stable on the disk * gfs2_write_inode - Make sure the inode is stable on the disk
...@@ -44,7 +48,7 @@ ...@@ -44,7 +48,7 @@
static int gfs2_write_inode(struct inode *inode, int sync) static int gfs2_write_inode(struct inode *inode, int sync)
{ {
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
if (current->flags & PF_MEMALLOC) if (current->flags & PF_MEMALLOC)
return 0; return 0;
...@@ -62,7 +66,7 @@ static int gfs2_write_inode(struct inode *inode, int sync) ...@@ -62,7 +66,7 @@ static int gfs2_write_inode(struct inode *inode, int sync)
static void gfs2_put_super(struct super_block *sb) static void gfs2_put_super(struct super_block *sb)
{ {
struct gfs2_sbd *sdp = get_v2sdp(sb); struct gfs2_sbd *sdp = sb->s_fs_info;
int error; int error;
if (!sdp) if (!sdp)
...@@ -138,7 +142,7 @@ static void gfs2_put_super(struct super_block *sb) ...@@ -138,7 +142,7 @@ static void gfs2_put_super(struct super_block *sb)
vfree(sdp); vfree(sdp);
set_v2sdp(sb, NULL); sb->s_fs_info = NULL;
} }
/** /**
...@@ -151,7 +155,7 @@ static void gfs2_put_super(struct super_block *sb) ...@@ -151,7 +155,7 @@ static void gfs2_put_super(struct super_block *sb)
static void gfs2_write_super(struct super_block *sb) static void gfs2_write_super(struct super_block *sb)
{ {
struct gfs2_sbd *sdp = get_v2sdp(sb); struct gfs2_sbd *sdp = sb->s_fs_info;
gfs2_log_flush(sdp); gfs2_log_flush(sdp);
} }
...@@ -163,7 +167,7 @@ static void gfs2_write_super(struct super_block *sb) ...@@ -163,7 +167,7 @@ static void gfs2_write_super(struct super_block *sb)
static void gfs2_write_super_lockfs(struct super_block *sb) static void gfs2_write_super_lockfs(struct super_block *sb)
{ {
struct gfs2_sbd *sdp = get_v2sdp(sb); struct gfs2_sbd *sdp = sb->s_fs_info;
int error; int error;
for (;;) { for (;;) {
...@@ -194,7 +198,7 @@ static void gfs2_write_super_lockfs(struct super_block *sb) ...@@ -194,7 +198,7 @@ static void gfs2_write_super_lockfs(struct super_block *sb)
static void gfs2_unlockfs(struct super_block *sb) static void gfs2_unlockfs(struct super_block *sb)
{ {
struct gfs2_sbd *sdp = get_v2sdp(sb); struct gfs2_sbd *sdp = sb->s_fs_info;
gfs2_unfreeze_fs(sdp); gfs2_unfreeze_fs(sdp);
} }
...@@ -208,7 +212,7 @@ static void gfs2_unlockfs(struct super_block *sb) ...@@ -208,7 +212,7 @@ static void gfs2_unlockfs(struct super_block *sb)
static int gfs2_statfs(struct super_block *sb, struct kstatfs *buf) static int gfs2_statfs(struct super_block *sb, struct kstatfs *buf)
{ {
struct gfs2_sbd *sdp = get_v2sdp(sb); struct gfs2_sbd *sdp = sb->s_fs_info;
struct gfs2_statfs_change sc; struct gfs2_statfs_change sc;
int error; int error;
...@@ -245,7 +249,7 @@ static int gfs2_statfs(struct super_block *sb, struct kstatfs *buf) ...@@ -245,7 +249,7 @@ static int gfs2_statfs(struct super_block *sb, struct kstatfs *buf)
static int gfs2_remount_fs(struct super_block *sb, int *flags, char *data) static int gfs2_remount_fs(struct super_block *sb, int *flags, char *data)
{ {
struct gfs2_sbd *sdp = get_v2sdp(sb); struct gfs2_sbd *sdp = sb->s_fs_info;
int error; int error;
error = gfs2_mount_args(sdp, data, 1); error = gfs2_mount_args(sdp, data, 1);
...@@ -283,12 +287,12 @@ static int gfs2_remount_fs(struct super_block *sb, int *flags, char *data) ...@@ -283,12 +287,12 @@ static int gfs2_remount_fs(struct super_block *sb, int *flags, char *data)
static void gfs2_clear_inode(struct inode *inode) static void gfs2_clear_inode(struct inode *inode)
{ {
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
if (ip) { if (ip) {
spin_lock(&ip->i_spin); spin_lock(&ip->i_spin);
ip->i_vnode = NULL; ip->i_vnode = NULL;
set_v2ip(inode, NULL); inode->u.generic_ip = NULL;
spin_unlock(&ip->i_spin); spin_unlock(&ip->i_spin);
gfs2_glock_schedule_for_reclaim(ip->i_gl); gfs2_glock_schedule_for_reclaim(ip->i_gl);
...@@ -306,7 +310,7 @@ static void gfs2_clear_inode(struct inode *inode) ...@@ -306,7 +310,7 @@ static void gfs2_clear_inode(struct inode *inode)
static int gfs2_show_options(struct seq_file *s, struct vfsmount *mnt) static int gfs2_show_options(struct seq_file *s, struct vfsmount *mnt)
{ {
struct gfs2_sbd *sdp = get_v2sdp(mnt->mnt_sb); struct gfs2_sbd *sdp = mnt->mnt_sb->s_fs_info;
struct gfs2_args *args = &sdp->sd_args; struct gfs2_args *args = &sdp->sd_args;
if (args->ar_lockproto[0]) if (args->ar_lockproto[0])
......
...@@ -14,9 +14,12 @@ ...@@ -14,9 +14,12 @@
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/pagemap.h> #include <linux/pagemap.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "bmap.h" #include "bmap.h"
#include "glock.h" #include "glock.h"
#include "inode.h" #include "inode.h"
...@@ -25,6 +28,7 @@ ...@@ -25,6 +28,7 @@
#include "quota.h" #include "quota.h"
#include "rgrp.h" #include "rgrp.h"
#include "trans.h" #include "trans.h"
#include "util.h"
static void pfault_be_greedy(struct gfs2_inode *ip) static void pfault_be_greedy(struct gfs2_inode *ip)
{ {
...@@ -43,7 +47,7 @@ static void pfault_be_greedy(struct gfs2_inode *ip) ...@@ -43,7 +47,7 @@ static void pfault_be_greedy(struct gfs2_inode *ip)
static struct page *gfs2_private_nopage(struct vm_area_struct *area, static struct page *gfs2_private_nopage(struct vm_area_struct *area,
unsigned long address, int *type) unsigned long address, int *type)
{ {
struct gfs2_inode *ip = get_v2ip(area->vm_file->f_mapping->host); struct gfs2_inode *ip = area->vm_file->f_mapping->host->u.generic_ip;
struct gfs2_holder i_gh; struct gfs2_holder i_gh;
struct page *result; struct page *result;
int error; int error;
...@@ -141,7 +145,7 @@ static int alloc_page_backing(struct gfs2_inode *ip, struct page *page) ...@@ -141,7 +145,7 @@ static int alloc_page_backing(struct gfs2_inode *ip, struct page *page)
static struct page *gfs2_sharewrite_nopage(struct vm_area_struct *area, static struct page *gfs2_sharewrite_nopage(struct vm_area_struct *area,
unsigned long address, int *type) unsigned long address, int *type)
{ {
struct gfs2_inode *ip = get_v2ip(area->vm_file->f_mapping->host); struct gfs2_inode *ip = area->vm_file->f_mapping->host->u.generic_ip;
struct gfs2_holder i_gh; struct gfs2_holder i_gh;
struct page *result = NULL; struct page *result = NULL;
unsigned long index = ((address - area->vm_start) >> PAGE_CACHE_SHIFT) + unsigned long index = ((address - area->vm_start) >> PAGE_CACHE_SHIFT) +
......
...@@ -14,14 +14,18 @@ ...@@ -14,14 +14,18 @@
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/pagemap.h> #include <linux/pagemap.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "bmap.h" #include "bmap.h"
#include "inode.h" #include "inode.h"
#include "page.h" #include "page.h"
#include "trans.h" #include "trans.h"
#include "ops_address.h" #include "ops_address.h"
#include "util.h"
/** /**
* gfs2_pte_inval - Sync and invalidate all PTEs associated with a glock * gfs2_pte_inval - Sync and invalidate all PTEs associated with a glock
...@@ -34,7 +38,7 @@ void gfs2_pte_inval(struct gfs2_glock *gl) ...@@ -34,7 +38,7 @@ void gfs2_pte_inval(struct gfs2_glock *gl)
struct gfs2_inode *ip; struct gfs2_inode *ip;
struct inode *inode; struct inode *inode;
ip = get_gl2ip(gl); ip = gl->gl_object;
if (!ip || !S_ISREG(ip->i_di.di_mode)) if (!ip || !S_ISREG(ip->i_di.di_mode))
return; return;
...@@ -64,7 +68,7 @@ void gfs2_page_inval(struct gfs2_glock *gl) ...@@ -64,7 +68,7 @@ void gfs2_page_inval(struct gfs2_glock *gl)
struct gfs2_inode *ip; struct gfs2_inode *ip;
struct inode *inode; struct inode *inode;
ip = get_gl2ip(gl); ip = gl->gl_object;
if (!ip || !S_ISREG(ip->i_di.di_mode)) if (!ip || !S_ISREG(ip->i_di.di_mode))
return; return;
...@@ -95,7 +99,7 @@ void gfs2_page_sync(struct gfs2_glock *gl, int flags) ...@@ -95,7 +99,7 @@ void gfs2_page_sync(struct gfs2_glock *gl, int flags)
struct gfs2_inode *ip; struct gfs2_inode *ip;
struct inode *inode; struct inode *inode;
ip = get_gl2ip(gl); ip = gl->gl_object;
if (!ip || !S_ISREG(ip->i_di.di_mode)) if (!ip || !S_ISREG(ip->i_di.di_mode))
return; return;
...@@ -192,7 +196,7 @@ int gfs2_unstuffer_page(struct gfs2_inode *ip, struct buffer_head *dibh, ...@@ -192,7 +196,7 @@ int gfs2_unstuffer_page(struct gfs2_inode *ip, struct buffer_head *dibh,
int gfs2_block_truncate_page(struct address_space *mapping) int gfs2_block_truncate_page(struct address_space *mapping)
{ {
struct inode *inode = mapping->host; struct inode *inode = mapping->host;
struct gfs2_inode *ip = get_v2ip(inode); struct gfs2_inode *ip = inode->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd; struct gfs2_sbd *sdp = ip->i_sbd;
loff_t from = inode->i_size; loff_t from = inode->i_size;
unsigned long index = from >> PAGE_CACHE_SHIFT; unsigned long index = from >> PAGE_CACHE_SHIFT;
......
...@@ -44,13 +44,17 @@ ...@@ -44,13 +44,17 @@
#include <linux/tty.h> #include <linux/tty.h>
#include <linux/sort.h> #include <linux/sort.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "bmap.h" #include "bmap.h"
#include "glock.h" #include "glock.h"
#include "glops.h" #include "glops.h"
#include "log.h" #include "log.h"
#include "lvb.h"
#include "meta_io.h" #include "meta_io.h"
#include "quota.h" #include "quota.h"
#include "rgrp.h" #include "rgrp.h"
...@@ -59,6 +63,7 @@ ...@@ -59,6 +63,7 @@
#include "inode.h" #include "inode.h"
#include "ops_file.h" #include "ops_file.h"
#include "ops_address.h" #include "ops_address.h"
#include "util.h"
#define QUOTA_USER 1 #define QUOTA_USER 1
#define QUOTA_GROUP 0 #define QUOTA_GROUP 0
...@@ -244,7 +249,7 @@ static void slot_put(struct gfs2_quota_data *qd) ...@@ -244,7 +249,7 @@ static void slot_put(struct gfs2_quota_data *qd)
static int bh_get(struct gfs2_quota_data *qd) static int bh_get(struct gfs2_quota_data *qd)
{ {
struct gfs2_sbd *sdp = qd->qd_gl->gl_sbd; struct gfs2_sbd *sdp = qd->qd_gl->gl_sbd;
struct gfs2_inode *ip = get_v2ip(sdp->sd_qc_inode); struct gfs2_inode *ip = sdp->sd_qc_inode->u.generic_ip;
unsigned int block, offset; unsigned int block, offset;
uint64_t dblock; uint64_t dblock;
int new = 0; int new = 0;
...@@ -526,7 +531,7 @@ static int sort_qd(const void *a, const void *b) ...@@ -526,7 +531,7 @@ static int sort_qd(const void *a, const void *b)
static void do_qc(struct gfs2_quota_data *qd, int64_t change) static void do_qc(struct gfs2_quota_data *qd, int64_t change)
{ {
struct gfs2_sbd *sdp = qd->qd_gl->gl_sbd; struct gfs2_sbd *sdp = qd->qd_gl->gl_sbd;
struct gfs2_inode *ip = get_v2ip(sdp->sd_qc_inode); struct gfs2_inode *ip = sdp->sd_qc_inode->u.generic_ip;
struct gfs2_quota_change *qc = qd->qd_bh_qc; struct gfs2_quota_change *qc = qd->qd_bh_qc;
int64_t x; int64_t x;
...@@ -642,7 +647,7 @@ static int gfs2_adjust_quota(struct gfs2_inode *ip, loff_t loc, ...@@ -642,7 +647,7 @@ static int gfs2_adjust_quota(struct gfs2_inode *ip, loff_t loc,
static int do_sync(unsigned int num_qd, struct gfs2_quota_data **qda) static int do_sync(unsigned int num_qd, struct gfs2_quota_data **qda)
{ {
struct gfs2_sbd *sdp = (*qda)->qd_gl->gl_sbd; struct gfs2_sbd *sdp = (*qda)->qd_gl->gl_sbd;
struct gfs2_inode *ip = get_v2ip(sdp->sd_quota_inode); struct gfs2_inode *ip = sdp->sd_quota_inode->u.generic_ip;
unsigned int data_blocks, ind_blocks; unsigned int data_blocks, ind_blocks;
struct file_ra_state ra_state; struct file_ra_state ra_state;
struct gfs2_holder *ghs, i_gh; struct gfs2_holder *ghs, i_gh;
...@@ -753,6 +758,7 @@ static int do_glock(struct gfs2_quota_data *qd, int force_refresh, ...@@ -753,6 +758,7 @@ static int do_glock(struct gfs2_quota_data *qd, int force_refresh,
struct gfs2_holder *q_gh) struct gfs2_holder *q_gh)
{ {
struct gfs2_sbd *sdp = qd->qd_gl->gl_sbd; struct gfs2_sbd *sdp = qd->qd_gl->gl_sbd;
struct gfs2_inode *ip = sdp->sd_quota_inode->u.generic_ip;
struct gfs2_holder i_gh; struct gfs2_holder i_gh;
struct gfs2_quota q; struct gfs2_quota q;
char buf[sizeof(struct gfs2_quota)]; char buf[sizeof(struct gfs2_quota)];
...@@ -776,7 +782,7 @@ static int do_glock(struct gfs2_quota_data *qd, int force_refresh, ...@@ -776,7 +782,7 @@ static int do_glock(struct gfs2_quota_data *qd, int force_refresh,
if (error) if (error)
return error; return error;
error = gfs2_glock_nq_init(get_v2ip(sdp->sd_quota_inode)->i_gl, error = gfs2_glock_nq_init(ip->i_gl,
LM_ST_SHARED, 0, LM_ST_SHARED, 0,
&i_gh); &i_gh);
if (error) if (error)
...@@ -784,7 +790,7 @@ static int do_glock(struct gfs2_quota_data *qd, int force_refresh, ...@@ -784,7 +790,7 @@ static int do_glock(struct gfs2_quota_data *qd, int force_refresh,
memset(buf, 0, sizeof(struct gfs2_quota)); memset(buf, 0, sizeof(struct gfs2_quota));
pos = qd2offset(qd); pos = qd2offset(qd);
error = gfs2_internal_read(get_v2ip(sdp->sd_quota_inode), error = gfs2_internal_read(ip,
&ra_state, buf, &ra_state, buf,
&pos, &pos,
sizeof(struct gfs2_quota)); sizeof(struct gfs2_quota));
...@@ -1118,7 +1124,7 @@ int gfs2_quota_read(struct gfs2_sbd *sdp, int user, uint32_t id, ...@@ -1118,7 +1124,7 @@ int gfs2_quota_read(struct gfs2_sbd *sdp, int user, uint32_t id,
int gfs2_quota_init(struct gfs2_sbd *sdp) int gfs2_quota_init(struct gfs2_sbd *sdp)
{ {
struct gfs2_inode *ip = get_v2ip(sdp->sd_qc_inode); struct gfs2_inode *ip = sdp->sd_qc_inode->u.generic_ip;
unsigned int blocks = ip->i_di.di_size >> sdp->sd_sb.sb_bsize_shift; unsigned int blocks = ip->i_di.di_size >> sdp->sd_sb.sb_bsize_shift;
unsigned int x, slot = 0; unsigned int x, slot = 0;
unsigned int found = 0; unsigned int found = 0;
...@@ -1133,7 +1139,7 @@ int gfs2_quota_init(struct gfs2_sbd *sdp) ...@@ -1133,7 +1139,7 @@ int gfs2_quota_init(struct gfs2_sbd *sdp)
return -EIO; return -EIO;
} }
sdp->sd_quota_slots = blocks * sdp->sd_qc_per_block; sdp->sd_quota_slots = blocks * sdp->sd_qc_per_block;
sdp->sd_quota_chunks = DIV_RU(sdp->sd_quota_slots, 8 * PAGE_SIZE); sdp->sd_quota_chunks = DIV_ROUND_UP(sdp->sd_quota_slots, 8 * PAGE_SIZE);
error = -ENOMEM; error = -ENOMEM;
......
...@@ -12,9 +12,12 @@ ...@@ -12,9 +12,12 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "bmap.h" #include "bmap.h"
#include "glock.h" #include "glock.h"
#include "glops.h" #include "glops.h"
...@@ -23,22 +26,24 @@ ...@@ -23,22 +26,24 @@
#include "meta_io.h" #include "meta_io.h"
#include "recovery.h" #include "recovery.h"
#include "super.h" #include "super.h"
#include "util.h"
int gfs2_replay_read_block(struct gfs2_jdesc *jd, unsigned int blk, int gfs2_replay_read_block(struct gfs2_jdesc *jd, unsigned int blk,
struct buffer_head **bh) struct buffer_head **bh)
{ {
struct gfs2_glock *gl = get_v2ip(jd->jd_inode)->i_gl; struct gfs2_inode *ip = jd->jd_inode->u.generic_ip;
struct gfs2_glock *gl = ip->i_gl;
int new = 0; int new = 0;
uint64_t dblock; uint64_t dblock;
uint32_t extlen; uint32_t extlen;
int error; int error;
error = gfs2_block_map(get_v2ip(jd->jd_inode), blk, &new, &dblock, error = gfs2_block_map(ip, blk, &new, &dblock,
&extlen); &extlen);
if (error) if (error)
return error; return error;
if (!dblock) { if (!dblock) {
gfs2_consist_inode(get_v2ip(jd->jd_inode)); gfs2_consist_inode(ip);
return -EIO; return -EIO;
} }
...@@ -185,7 +190,7 @@ static int find_good_lh(struct gfs2_jdesc *jd, unsigned int *blk, ...@@ -185,7 +190,7 @@ static int find_good_lh(struct gfs2_jdesc *jd, unsigned int *blk,
*blk = 0; *blk = 0;
if (*blk == orig_blk) { if (*blk == orig_blk) {
gfs2_consist_inode(get_v2ip(jd->jd_inode)); gfs2_consist_inode(jd->jd_inode->u.generic_ip);
return -EIO; return -EIO;
} }
} }
...@@ -219,7 +224,7 @@ static int jhead_scan(struct gfs2_jdesc *jd, struct gfs2_log_header *head) ...@@ -219,7 +224,7 @@ static int jhead_scan(struct gfs2_jdesc *jd, struct gfs2_log_header *head)
continue; continue;
if (lh.lh_sequence == head->lh_sequence) { if (lh.lh_sequence == head->lh_sequence) {
gfs2_consist_inode(get_v2ip(jd->jd_inode)); gfs2_consist_inode(jd->jd_inode->u.generic_ip);
return -EIO; return -EIO;
} }
if (lh.lh_sequence < head->lh_sequence) if (lh.lh_sequence < head->lh_sequence)
...@@ -295,7 +300,8 @@ int gfs2_find_jhead(struct gfs2_jdesc *jd, struct gfs2_log_header *head) ...@@ -295,7 +300,8 @@ int gfs2_find_jhead(struct gfs2_jdesc *jd, struct gfs2_log_header *head)
static int foreach_descriptor(struct gfs2_jdesc *jd, unsigned int start, static int foreach_descriptor(struct gfs2_jdesc *jd, unsigned int start,
unsigned int end, int pass) unsigned int end, int pass)
{ {
struct gfs2_sbd *sdp = get_v2ip(jd->jd_inode)->i_sbd; struct gfs2_inode *ip = jd->jd_inode->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd;
struct buffer_head *bh; struct buffer_head *bh;
struct gfs2_log_descriptor *ld; struct gfs2_log_descriptor *ld;
int error = 0; int error = 0;
...@@ -324,7 +330,7 @@ static int foreach_descriptor(struct gfs2_jdesc *jd, unsigned int start, ...@@ -324,7 +330,7 @@ static int foreach_descriptor(struct gfs2_jdesc *jd, unsigned int start,
continue; continue;
} }
if (error == 1) { if (error == 1) {
gfs2_consist_inode(get_v2ip(jd->jd_inode)); gfs2_consist_inode(jd->jd_inode->u.generic_ip);
error = -EIO; error = -EIO;
} }
brelse(bh); brelse(bh);
...@@ -361,7 +367,7 @@ static int foreach_descriptor(struct gfs2_jdesc *jd, unsigned int start, ...@@ -361,7 +367,7 @@ static int foreach_descriptor(struct gfs2_jdesc *jd, unsigned int start,
static int clean_journal(struct gfs2_jdesc *jd, struct gfs2_log_header *head) static int clean_journal(struct gfs2_jdesc *jd, struct gfs2_log_header *head)
{ {
struct gfs2_inode *ip = get_v2ip(jd->jd_inode); struct gfs2_inode *ip = jd->jd_inode->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd; struct gfs2_sbd *sdp = ip->i_sbd;
unsigned int lblock; unsigned int lblock;
int new = 0; int new = 0;
...@@ -420,7 +426,8 @@ static int clean_journal(struct gfs2_jdesc *jd, struct gfs2_log_header *head) ...@@ -420,7 +426,8 @@ static int clean_journal(struct gfs2_jdesc *jd, struct gfs2_log_header *head)
int gfs2_recover_journal(struct gfs2_jdesc *jd, int wait) int gfs2_recover_journal(struct gfs2_jdesc *jd, int wait)
{ {
struct gfs2_sbd *sdp = get_v2ip(jd->jd_inode)->i_sbd; struct gfs2_inode *ip = jd->jd_inode->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd;
struct gfs2_log_header head; struct gfs2_log_header head;
struct gfs2_holder j_gh, ji_gh, t_gh; struct gfs2_holder j_gh, ji_gh, t_gh;
unsigned long t; unsigned long t;
...@@ -450,7 +457,7 @@ int gfs2_recover_journal(struct gfs2_jdesc *jd, int wait) ...@@ -450,7 +457,7 @@ int gfs2_recover_journal(struct gfs2_jdesc *jd, int wait)
goto fail; goto fail;
}; };
error = gfs2_glock_nq_init(get_v2ip(jd->jd_inode)->i_gl, LM_ST_SHARED, error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED,
LM_FLAG_NOEXP, &ji_gh); LM_FLAG_NOEXP, &ji_gh);
if (error) if (error)
goto fail_gunlock_j; goto fail_gunlock_j;
...@@ -516,7 +523,7 @@ int gfs2_recover_journal(struct gfs2_jdesc *jd, int wait) ...@@ -516,7 +523,7 @@ int gfs2_recover_journal(struct gfs2_jdesc *jd, int wait)
gfs2_glock_dq_uninit(&t_gh); gfs2_glock_dq_uninit(&t_gh);
t = DIV_RU(jiffies - t, HZ); t = DIV_ROUND_UP(jiffies - t, HZ);
fs_info(sdp, "jid=%u: Journal replayed in %lus\n", fs_info(sdp, "jid=%u: Journal replayed in %lus\n",
jd->jd_jid, t); jd->jd_jid, t);
......
...@@ -13,9 +13,12 @@ ...@@ -13,9 +13,12 @@
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/fs.h> #include <linux/fs.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "bits.h" #include "bits.h"
#include "glock.h" #include "glock.h"
#include "glops.h" #include "glops.h"
...@@ -26,6 +29,7 @@ ...@@ -26,6 +29,7 @@
#include "super.h" #include "super.h"
#include "trans.h" #include "trans.h"
#include "ops_file.h" #include "ops_file.h"
#include "util.h"
/** /**
* gfs2_rgrp_verify - Verify that a resource group is consistent * gfs2_rgrp_verify - Verify that a resource group is consistent
...@@ -171,7 +175,7 @@ static void clear_rgrpdi(struct gfs2_sbd *sdp) ...@@ -171,7 +175,7 @@ static void clear_rgrpdi(struct gfs2_sbd *sdp)
list_del(&rgd->rd_list_mru); list_del(&rgd->rd_list_mru);
if (gl) { if (gl) {
set_gl2rgd(gl, NULL); gl->gl_object = NULL;
gfs2_glock_put(gl); gfs2_glock_put(gl);
} }
...@@ -320,7 +324,7 @@ static int gfs2_ri_update(struct gfs2_inode *ip) ...@@ -320,7 +324,7 @@ static int gfs2_ri_update(struct gfs2_inode *ip)
if (error) if (error)
goto fail; goto fail;
set_gl2rgd(rgd->rd_gl, rgd); rgd->rd_gl->gl_object = rgd;
rgd->rd_rg_vn = rgd->rd_gl->gl_vn - 1; rgd->rd_rg_vn = rgd->rd_gl->gl_vn - 1;
} }
...@@ -354,7 +358,7 @@ static int gfs2_ri_update(struct gfs2_inode *ip) ...@@ -354,7 +358,7 @@ static int gfs2_ri_update(struct gfs2_inode *ip)
int gfs2_rindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ri_gh) int gfs2_rindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ri_gh)
{ {
struct gfs2_inode *ip = get_v2ip(sdp->sd_rindex); struct gfs2_inode *ip = sdp->sd_rindex->u.generic_ip;
struct gfs2_glock *gl = ip->i_gl; struct gfs2_glock *gl = ip->i_gl;
int error; int error;
......
...@@ -12,9 +12,12 @@ ...@@ -12,9 +12,12 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "bmap.h" #include "bmap.h"
#include "dir.h" #include "dir.h"
#include "format.h" #include "format.h"
...@@ -29,6 +32,7 @@ ...@@ -29,6 +32,7 @@
#include "super.h" #include "super.h"
#include "trans.h" #include "trans.h"
#include "unlinked.h" #include "unlinked.h"
#include "util.h"
/** /**
* gfs2_tune_init - Fill a gfs2_tune structure with default values * gfs2_tune_init - Fill a gfs2_tune structure with default values
...@@ -207,12 +211,12 @@ int gfs2_read_sb(struct gfs2_sbd *sdp, struct gfs2_glock *gl, int silent) ...@@ -207,12 +211,12 @@ int gfs2_read_sb(struct gfs2_sbd *sdp, struct gfs2_glock *gl, int silent)
/* Compute maximum reservation required to add a entry to a directory */ /* Compute maximum reservation required to add a entry to a directory */
hash_blocks = DIV_RU(sizeof(uint64_t) * (1 << GFS2_DIR_MAX_DEPTH), hash_blocks = DIV_ROUND_UP(sizeof(uint64_t) * (1 << GFS2_DIR_MAX_DEPTH),
sdp->sd_jbsize); sdp->sd_jbsize);
ind_blocks = 0; ind_blocks = 0;
for (tmp_blocks = hash_blocks; tmp_blocks > sdp->sd_diptrs;) { for (tmp_blocks = hash_blocks; tmp_blocks > sdp->sd_diptrs;) {
tmp_blocks = DIV_RU(tmp_blocks, sdp->sd_inptrs); tmp_blocks = DIV_ROUND_UP(tmp_blocks, sdp->sd_inptrs);
ind_blocks += tmp_blocks; ind_blocks += tmp_blocks;
} }
...@@ -278,7 +282,7 @@ int gfs2_do_upgrade(struct gfs2_sbd *sdp, struct gfs2_glock *sb_gl) ...@@ -278,7 +282,7 @@ int gfs2_do_upgrade(struct gfs2_sbd *sdp, struct gfs2_glock *sb_gl)
int gfs2_jindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ji_gh) int gfs2_jindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ji_gh)
{ {
struct gfs2_inode *dip = get_v2ip(sdp->sd_jindex); struct gfs2_inode *dip = sdp->sd_jindex->u.generic_ip;
struct qstr name; struct qstr name;
char buf[20]; char buf[20];
struct gfs2_jdesc *jd; struct gfs2_jdesc *jd;
...@@ -296,7 +300,7 @@ int gfs2_jindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ji_gh) ...@@ -296,7 +300,7 @@ int gfs2_jindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ji_gh)
name.len = sprintf(buf, "journal%u", sdp->sd_journals); name.len = sprintf(buf, "journal%u", sdp->sd_journals);
error = gfs2_dir_search(get_v2ip(sdp->sd_jindex), error = gfs2_dir_search(sdp->sd_jindex->u.generic_ip,
&name, NULL, NULL); &name, NULL, NULL);
if (error == -ENOENT) { if (error == -ENOENT) {
error = 0; error = 0;
...@@ -419,7 +423,7 @@ struct gfs2_jdesc *gfs2_jdesc_find_dirty(struct gfs2_sbd *sdp) ...@@ -419,7 +423,7 @@ struct gfs2_jdesc *gfs2_jdesc_find_dirty(struct gfs2_sbd *sdp)
int gfs2_jdesc_check(struct gfs2_jdesc *jd) int gfs2_jdesc_check(struct gfs2_jdesc *jd)
{ {
struct gfs2_inode *ip = get_v2ip(jd->jd_inode); struct gfs2_inode *ip = jd->jd_inode->u.generic_ip;
struct gfs2_sbd *sdp = ip->i_sbd; struct gfs2_sbd *sdp = ip->i_sbd;
int ar; int ar;
int error; int error;
...@@ -471,7 +475,8 @@ int gfs2_lookup_master_dir(struct gfs2_sbd *sdp) ...@@ -471,7 +475,8 @@ int gfs2_lookup_master_dir(struct gfs2_sbd *sdp)
int gfs2_make_fs_rw(struct gfs2_sbd *sdp) int gfs2_make_fs_rw(struct gfs2_sbd *sdp)
{ {
struct gfs2_glock *j_gl = get_v2ip(sdp->sd_jdesc->jd_inode)->i_gl; struct gfs2_inode *ip = sdp->sd_jdesc->jd_inode->u.generic_ip;
struct gfs2_glock *j_gl = ip->i_gl;
struct gfs2_holder t_gh; struct gfs2_holder t_gh;
struct gfs2_log_header head; struct gfs2_log_header head;
int error; int error;
...@@ -481,7 +486,7 @@ int gfs2_make_fs_rw(struct gfs2_sbd *sdp) ...@@ -481,7 +486,7 @@ int gfs2_make_fs_rw(struct gfs2_sbd *sdp)
if (error) if (error)
return error; return error;
gfs2_meta_cache_flush(get_v2ip(sdp->sd_jdesc->jd_inode)); gfs2_meta_cache_flush(ip);
j_gl->gl_ops->go_inval(j_gl, DIO_METADATA | DIO_DATA); j_gl->gl_ops->go_inval(j_gl, DIO_METADATA | DIO_DATA);
error = gfs2_find_jhead(sdp->sd_jdesc, &head); error = gfs2_find_jhead(sdp->sd_jdesc, &head);
...@@ -559,9 +564,9 @@ int gfs2_make_fs_ro(struct gfs2_sbd *sdp) ...@@ -559,9 +564,9 @@ int gfs2_make_fs_ro(struct gfs2_sbd *sdp)
int gfs2_statfs_init(struct gfs2_sbd *sdp) int gfs2_statfs_init(struct gfs2_sbd *sdp)
{ {
struct gfs2_inode *m_ip = get_v2ip(sdp->sd_statfs_inode); struct gfs2_inode *m_ip = sdp->sd_statfs_inode->u.generic_ip;
struct gfs2_statfs_change *m_sc = &sdp->sd_statfs_master; struct gfs2_statfs_change *m_sc = &sdp->sd_statfs_master;
struct gfs2_inode *l_ip = get_v2ip(sdp->sd_sc_inode); struct gfs2_inode *l_ip = sdp->sd_sc_inode->u.generic_ip;
struct gfs2_statfs_change *l_sc = &sdp->sd_statfs_local; struct gfs2_statfs_change *l_sc = &sdp->sd_statfs_local;
struct buffer_head *m_bh, *l_bh; struct buffer_head *m_bh, *l_bh;
struct gfs2_holder gh; struct gfs2_holder gh;
...@@ -608,7 +613,7 @@ int gfs2_statfs_init(struct gfs2_sbd *sdp) ...@@ -608,7 +613,7 @@ int gfs2_statfs_init(struct gfs2_sbd *sdp)
void gfs2_statfs_change(struct gfs2_sbd *sdp, int64_t total, int64_t free, void gfs2_statfs_change(struct gfs2_sbd *sdp, int64_t total, int64_t free,
int64_t dinodes) int64_t dinodes)
{ {
struct gfs2_inode *l_ip = get_v2ip(sdp->sd_sc_inode); struct gfs2_inode *l_ip = sdp->sd_sc_inode->u.generic_ip;
struct gfs2_statfs_change *l_sc = &sdp->sd_statfs_local; struct gfs2_statfs_change *l_sc = &sdp->sd_statfs_local;
struct buffer_head *l_bh; struct buffer_head *l_bh;
int error; int error;
...@@ -634,8 +639,8 @@ void gfs2_statfs_change(struct gfs2_sbd *sdp, int64_t total, int64_t free, ...@@ -634,8 +639,8 @@ void gfs2_statfs_change(struct gfs2_sbd *sdp, int64_t total, int64_t free,
int gfs2_statfs_sync(struct gfs2_sbd *sdp) int gfs2_statfs_sync(struct gfs2_sbd *sdp)
{ {
struct gfs2_inode *m_ip = get_v2ip(sdp->sd_statfs_inode); struct gfs2_inode *m_ip = sdp->sd_statfs_inode->u.generic_ip;
struct gfs2_inode *l_ip = get_v2ip(sdp->sd_sc_inode); struct gfs2_inode *l_ip = sdp->sd_sc_inode->u.generic_ip;
struct gfs2_statfs_change *m_sc = &sdp->sd_statfs_master; struct gfs2_statfs_change *m_sc = &sdp->sd_statfs_master;
struct gfs2_statfs_change *l_sc = &sdp->sd_statfs_local; struct gfs2_statfs_change *l_sc = &sdp->sd_statfs_local;
struct gfs2_holder gh; struct gfs2_holder gh;
...@@ -795,7 +800,8 @@ int gfs2_statfs_slow(struct gfs2_sbd *sdp, struct gfs2_statfs_change *sc) ...@@ -795,7 +800,8 @@ int gfs2_statfs_slow(struct gfs2_sbd *sdp, struct gfs2_statfs_change *sc)
error = err; error = err;
} else { } else {
if (!error) if (!error)
error = statfs_slow_fill(get_gl2rgd(gh->gh_gl), sc); error = statfs_slow_fill(
gh->gh_gl->gl_object, sc);
gfs2_glock_dq_uninit(gh); gfs2_glock_dq_uninit(gh);
} }
} }
...@@ -846,6 +852,7 @@ struct lfcc { ...@@ -846,6 +852,7 @@ struct lfcc {
int gfs2_lock_fs_check_clean(struct gfs2_sbd *sdp, struct gfs2_holder *t_gh) int gfs2_lock_fs_check_clean(struct gfs2_sbd *sdp, struct gfs2_holder *t_gh)
{ {
struct gfs2_inode *ip;
struct gfs2_holder ji_gh; struct gfs2_holder ji_gh;
struct gfs2_jdesc *jd; struct gfs2_jdesc *jd;
struct lfcc *lfcc; struct lfcc *lfcc;
...@@ -863,7 +870,8 @@ int gfs2_lock_fs_check_clean(struct gfs2_sbd *sdp, struct gfs2_holder *t_gh) ...@@ -863,7 +870,8 @@ int gfs2_lock_fs_check_clean(struct gfs2_sbd *sdp, struct gfs2_holder *t_gh)
error = -ENOMEM; error = -ENOMEM;
goto out; goto out;
} }
error = gfs2_glock_nq_init(get_v2ip(jd->jd_inode)->i_gl, ip = jd->jd_inode->u.generic_ip;
error = gfs2_glock_nq_init(ip->i_gl,
LM_ST_SHARED, 0, LM_ST_SHARED, 0,
&lfcc->gh); &lfcc->gh);
if (error) { if (error) {
......
...@@ -14,15 +14,19 @@ ...@@ -14,15 +14,19 @@
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/kobject.h> #include <linux/kobject.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "lm.h" #include "lm.h"
#include "sys.h" #include "sys.h"
#include "super.h" #include "super.h"
#include "glock.h" #include "glock.h"
#include "quota.h" #include "quota.h"
#include "util.h"
char *gfs2_sys_margs; char *gfs2_sys_margs;
spinlock_t gfs2_sys_margs_lock; spinlock_t gfs2_sys_margs_lock;
......
...@@ -12,14 +12,18 @@ ...@@ -12,14 +12,18 @@
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "glock.h" #include "glock.h"
#include "log.h" #include "log.h"
#include "lops.h" #include "lops.h"
#include "meta_io.h" #include "meta_io.h"
#include "trans.h" #include "trans.h"
#include "util.h"
int gfs2_trans_begin_i(struct gfs2_sbd *sdp, unsigned int blocks, int gfs2_trans_begin_i(struct gfs2_sbd *sdp, unsigned int blocks,
unsigned int revokes, char *file, unsigned int line) unsigned int revokes, char *file, unsigned int line)
...@@ -27,7 +31,7 @@ int gfs2_trans_begin_i(struct gfs2_sbd *sdp, unsigned int blocks, ...@@ -27,7 +31,7 @@ int gfs2_trans_begin_i(struct gfs2_sbd *sdp, unsigned int blocks,
struct gfs2_trans *tr; struct gfs2_trans *tr;
int error; int error;
if (gfs2_assert_warn(sdp, !get_transaction) || if (gfs2_assert_warn(sdp, !current->journal_info) ||
gfs2_assert_warn(sdp, blocks || revokes)) { gfs2_assert_warn(sdp, blocks || revokes)) {
fs_warn(sdp, "(%s, %u)\n", file, line); fs_warn(sdp, "(%s, %u)\n", file, line);
return -EINVAL; return -EINVAL;
...@@ -69,7 +73,7 @@ int gfs2_trans_begin_i(struct gfs2_sbd *sdp, unsigned int blocks, ...@@ -69,7 +73,7 @@ int gfs2_trans_begin_i(struct gfs2_sbd *sdp, unsigned int blocks,
if (error) if (error)
goto fail_gunlock; goto fail_gunlock;
set_transaction(tr); current->journal_info = tr;
return 0; return 0;
...@@ -90,8 +94,8 @@ void gfs2_trans_end(struct gfs2_sbd *sdp) ...@@ -90,8 +94,8 @@ void gfs2_trans_end(struct gfs2_sbd *sdp)
struct gfs2_trans *tr; struct gfs2_trans *tr;
struct gfs2_holder *t_gh; struct gfs2_holder *t_gh;
tr = get_transaction; tr = current->journal_info;
set_transaction(NULL); current->journal_info = NULL;
if (gfs2_assert_warn(sdp, tr)) if (gfs2_assert_warn(sdp, tr))
return; return;
...@@ -147,12 +151,12 @@ void gfs2_trans_add_bh(struct gfs2_glock *gl, struct buffer_head *bh, int meta) ...@@ -147,12 +151,12 @@ void gfs2_trans_add_bh(struct gfs2_glock *gl, struct buffer_head *bh, int meta)
struct gfs2_sbd *sdp = gl->gl_sbd; struct gfs2_sbd *sdp = gl->gl_sbd;
struct gfs2_bufdata *bd; struct gfs2_bufdata *bd;
bd = get_v2bd(bh); bd = bh->b_private;
if (bd) if (bd)
gfs2_assert(sdp, bd->bd_gl == gl); gfs2_assert(sdp, bd->bd_gl == gl);
else { else {
gfs2_attach_bufdata(gl, bh, meta); gfs2_attach_bufdata(gl, bh, meta);
bd = get_v2bd(bh); bd = bh->b_private;
} }
lops_add(sdp, &bd->bd_le); lops_add(sdp, &bd->bd_le);
} }
...@@ -186,8 +190,9 @@ void gfs2_trans_add_unrevoke(struct gfs2_sbd *sdp, uint64_t blkno) ...@@ -186,8 +190,9 @@ void gfs2_trans_add_unrevoke(struct gfs2_sbd *sdp, uint64_t blkno)
gfs2_log_unlock(sdp); gfs2_log_unlock(sdp);
if (found) { if (found) {
struct gfs2_trans *tr = current->journal_info;
kfree(rv); kfree(rv);
get_transaction->tr_num_revoke_rm++; tr->tr_num_revoke_rm++;
} }
} }
......
...@@ -13,19 +13,23 @@ ...@@ -13,19 +13,23 @@
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/kthread.h> #include <linux/kthread.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "bmap.h" #include "bmap.h"
#include "inode.h" #include "inode.h"
#include "meta_io.h" #include "meta_io.h"
#include "trans.h" #include "trans.h"
#include "unlinked.h" #include "unlinked.h"
#include "util.h"
static int munge_ondisk(struct gfs2_sbd *sdp, unsigned int slot, static int munge_ondisk(struct gfs2_sbd *sdp, unsigned int slot,
struct gfs2_unlinked_tag *ut) struct gfs2_unlinked_tag *ut)
{ {
struct gfs2_inode *ip = get_v2ip(sdp->sd_ut_inode); struct gfs2_inode *ip = sdp->sd_ut_inode->u.generic_ip;
unsigned int block, offset; unsigned int block, offset;
uint64_t dblock; uint64_t dblock;
int new = 0; int new = 0;
...@@ -312,7 +316,7 @@ int gfs2_unlinked_dealloc(struct gfs2_sbd *sdp) ...@@ -312,7 +316,7 @@ int gfs2_unlinked_dealloc(struct gfs2_sbd *sdp)
int gfs2_unlinked_init(struct gfs2_sbd *sdp) int gfs2_unlinked_init(struct gfs2_sbd *sdp)
{ {
struct gfs2_inode *ip = get_v2ip(sdp->sd_ut_inode); struct gfs2_inode *ip = sdp->sd_ut_inode->u.generic_ip;
unsigned int blocks = ip->i_di.di_size >> sdp->sd_sb.sb_bsize_shift; unsigned int blocks = ip->i_di.di_size >> sdp->sd_sb.sb_bsize_shift;
unsigned int x, slot = 0; unsigned int x, slot = 0;
unsigned int found = 0; unsigned int found = 0;
...@@ -327,7 +331,8 @@ int gfs2_unlinked_init(struct gfs2_sbd *sdp) ...@@ -327,7 +331,8 @@ int gfs2_unlinked_init(struct gfs2_sbd *sdp)
return -EIO; return -EIO;
} }
sdp->sd_unlinked_slots = blocks * sdp->sd_ut_per_block; sdp->sd_unlinked_slots = blocks * sdp->sd_ut_per_block;
sdp->sd_unlinked_chunks = DIV_RU(sdp->sd_unlinked_slots, 8 * PAGE_SIZE); sdp->sd_unlinked_chunks = DIV_ROUND_UP(sdp->sd_unlinked_slots,
8 * PAGE_SIZE);
error = -ENOMEM; error = -ENOMEM;
......
...@@ -13,12 +13,16 @@ ...@@ -13,12 +13,16 @@
#include <linux/completion.h> #include <linux/completion.h>
#include <linux/buffer_head.h> #include <linux/buffer_head.h>
#include <linux/crc32.h> #include <linux/crc32.h>
#include <linux/gfs2_ondisk.h>
#include <asm/semaphore.h> #include <asm/semaphore.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include "gfs2.h" #include "gfs2.h"
#include "lm_interface.h"
#include "incore.h"
#include "glock.h" #include "glock.h"
#include "lm.h" #include "lm.h"
#include "util.h"
kmem_cache_t *gfs2_glock_cachep __read_mostly; kmem_cache_t *gfs2_glock_cachep __read_mostly;
kmem_cache_t *gfs2_inode_cachep __read_mostly; kmem_cache_t *gfs2_inode_cachep __read_mostly;
......
...@@ -50,15 +50,18 @@ ...@@ -50,15 +50,18 @@
* An on-disk inode number * An on-disk inode number
*/ */
#define gfs2_inum_equal(ino1, ino2) \
(((ino1)->no_formal_ino == (ino2)->no_formal_ino) && \
((ino1)->no_addr == (ino2)->no_addr))
struct gfs2_inum { struct gfs2_inum {
__be64 no_formal_ino; __be64 no_formal_ino;
__be64 no_addr; __be64 no_addr;
}; };
static inline int gfs2_inum_equal(const struct gfs2_inum *ino1,
const struct gfs2_inum *ino2)
{
return ino1->no_formal_ino == ino2->no_formal_ino &&
ino1->no_addr == ino2->no_addr;
}
/* /*
* Generic metadata head structure * Generic metadata head structure
* Every inplace buffer logged in the journal must start with this. * Every inplace buffer logged in the journal must start with this.
......
...@@ -29,6 +29,7 @@ extern const char linux_banner[]; ...@@ -29,6 +29,7 @@ extern const char linux_banner[];
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
#define ALIGN(x,a) (((x)+(a)-1)&~((a)-1)) #define ALIGN(x,a) (((x)+(a)-1)&~((a)-1))
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
#define KERN_EMERG "<0>" /* system is unusable */ #define KERN_EMERG "<0>" /* system is unusable */
#define KERN_ALERT "<1>" /* action must be taken immediately */ #define KERN_ALERT "<1>" /* action must be taken immediately */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment