]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
GFS2: Move "entries" into "proper" inode
authorSteven Whitehouse <swhiteho@redhat.com>
Mon, 3 Nov 2008 13:59:19 +0000 (13:59 +0000)
committerSteven Whitehouse <swhiteho@redhat.com>
Mon, 5 Jan 2009 07:38:56 +0000 (07:38 +0000)
This moves the directory entry count into the proper inode.
Potentially we could get this to share the space used by
something else in the future, but this is one more step
on the way to removing the gfs2_dinode_host structure.

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
fs/gfs2/dir.c
fs/gfs2/incore.h
fs/gfs2/inode.c
fs/gfs2/ops_inode.c

index eed040d8ba3abc407496689af3a909030ae647fe..830cf48184e31565b4b2dc1fbf5c8a56782edebc 100644 (file)
@@ -858,8 +858,8 @@ static int dir_make_exhash(struct inode *inode)
                return -ENOSPC;
        bn = bh->b_blocknr;
 
-       gfs2_assert(sdp, dip->i_di.di_entries < (1 << 16));
-       leaf->lf_entries = cpu_to_be16(dip->i_di.di_entries);
+       gfs2_assert(sdp, dip->i_entries < (1 << 16));
+       leaf->lf_entries = cpu_to_be16(dip->i_entries);
 
        /*  Copy dirents  */
 
@@ -1426,7 +1426,7 @@ int gfs2_dir_read(struct inode *inode, u64 *offset, void *opaque,
        int copied = 0;
        int error;
 
-       if (!dip->i_di.di_entries)
+       if (!dip->i_entries)
                return 0;
 
        if (dip->i_di.di_flags & GFS2_DIF_EXHASH)
@@ -1453,17 +1453,17 @@ int gfs2_dir_read(struct inode *inode, u64 *offset, void *opaque,
                        error = PTR_ERR(dent);
                        goto out;
                }
-               if (dip->i_di.di_entries != g.offset) {
+               if (dip->i_entries != g.offset) {
                        fs_warn(sdp, "Number of entries corrupt in dir %llu, "
-                               "ip->i_di.di_entries (%u) != g.offset (%u)\n",
+                               "ip->i_entries (%u) != g.offset (%u)\n",
                                (unsigned long long)dip->i_no_addr,
-                               dip->i_di.di_entries,
+                               dip->i_entries,
                                g.offset);
                        error = -EIO;
                        goto out;
                }
                error = do_filldir_main(dip, offset, opaque, filldir, darr,
-                                       dip->i_di.di_entries, &copied);
+                                       dip->i_entries, &copied);
 out:
                kfree(darr);
        }
@@ -1621,7 +1621,7 @@ int gfs2_dir_add(struct inode *inode, const struct qstr *name,
                        if (error)
                                break;
                        gfs2_trans_add_bh(ip->i_gl, bh, 1);
-                       ip->i_di.di_entries++;
+                       ip->i_entries++;
                        ip->i_inode.i_mtime = ip->i_inode.i_ctime = CURRENT_TIME;
                        gfs2_dinode_out(ip, bh->b_data);
                        brelse(bh);
@@ -1704,10 +1704,10 @@ int gfs2_dir_del(struct gfs2_inode *dip, const struct qstr *name)
        if (error)
                return error;
 
-       if (!dip->i_di.di_entries)
+       if (!dip->i_entries)
                gfs2_consist_inode(dip);
        gfs2_trans_add_bh(dip->i_gl, bh, 1);
-       dip->i_di.di_entries--;
+       dip->i_entries--;
        dip->i_inode.i_mtime = dip->i_inode.i_ctime = CURRENT_TIME;
        gfs2_dinode_out(dip, bh->b_data);
        brelse(bh);
index 4ff1d7ecd98ac67c24d31a0d666275cf80a25b34..15ca3a75cf12f184958564dbd4d14793220e7469 100644 (file)
@@ -236,8 +236,6 @@ enum {
 struct gfs2_dinode_host {
        u64 di_size;            /* number of bytes in file */
        u32 di_flags;           /* GFS2_DIF_... */
-       /* These only apply to directories  */
-       u32 di_entries;         /* The number of entries in the directory */
        u64 di_eattr;           /* extended attribute block number */
 };
 
@@ -256,6 +254,7 @@ struct gfs2_inode {
        struct gfs2_alloc *i_alloc;
        u64 i_goal;     /* goal block for allocations */
        struct rw_semaphore i_rw_mutex;
+       u32 i_entries;
        u8 i_height;
        u8 i_depth;
 };
index 9d97f699c81aee2b137c88aafc3fc285088a8e93..015d4c007086dae46ecef6b51970dd9e3604c643 100644 (file)
@@ -299,7 +299,7 @@ static int gfs2_dinode_in(struct gfs2_inode *ip, const void *buf)
        if (unlikely(depth > GFS2_DIR_MAX_DEPTH))
                goto corrupt;
        ip->i_depth = (u8)depth;
-       di->di_entries = be32_to_cpu(str->di_entries);
+       ip->i_entries = be32_to_cpu(str->di_entries);
 
        di->di_eattr = be64_to_cpu(str->di_eattr);
        if (S_ISREG(ip->i_inode.i_mode))
@@ -689,7 +689,7 @@ static int create_ok(struct gfs2_inode *dip, const struct qstr *name,
                return error;
        }
 
-       if (dip->i_di.di_entries == (u32)-1)
+       if (dip->i_entries == (u32)-1)
                return -EFBIG;
        if (S_ISDIR(mode) && dip->i_inode.i_nlink == (u32)-1)
                return -EMLINK;
@@ -1067,7 +1067,7 @@ int gfs2_rmdiri(struct gfs2_inode *dip, const struct qstr *name,
        struct qstr dotname;
        int error;
 
-       if (ip->i_di.di_entries != 2) {
+       if (ip->i_entries != 2) {
                if (gfs2_consist_inode(ip))
                        gfs2_dinode_print(ip);
                return -EIO;
@@ -1271,7 +1271,7 @@ void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf)
                                             !(ip->i_di.di_flags & GFS2_DIF_EXHASH) ?
                                             GFS2_FORMAT_DE : 0);
        str->di_depth = cpu_to_be16(ip->i_depth);
-       str->di_entries = cpu_to_be32(di->di_entries);
+       str->di_entries = cpu_to_be32(ip->i_entries);
 
        str->di_eattr = cpu_to_be64(di->di_eattr);
        str->di_atime_nsec = cpu_to_be32(ip->i_inode.i_atime.tv_nsec);
@@ -1295,7 +1295,7 @@ void gfs2_dinode_print(const struct gfs2_inode *ip)
        printk(KERN_INFO "  di_flags = 0x%.8X\n", di->di_flags);
        printk(KERN_INFO "  i_height = %u\n", ip->i_height);
        printk(KERN_INFO "  i_depth = %u\n", ip->i_depth);
-       printk(KERN_INFO "  di_entries = %u\n", di->di_entries);
+       printk(KERN_INFO "  i_entries = %u\n", ip->i_entries);
        printk(KERN_INFO "  di_eattr = %llu\n",
               (unsigned long long)di->di_eattr);
 }
index 98440fef01cf2794a36b44d0ac5baedf21dda2ef..48468f48d7bf99aca6252d597016fef7821ccde4 100644 (file)
@@ -185,7 +185,7 @@ static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
        if (!dip->i_inode.i_nlink)
                goto out_gunlock;
        error = -EFBIG;
-       if (dip->i_di.di_entries == (u32)-1)
+       if (dip->i_entries == (u32)-1)
                goto out_gunlock;
        error = -EPERM;
        if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
@@ -427,7 +427,7 @@ static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, int mode)
        ip->i_inode.i_nlink = 2;
        ip->i_di.di_size = sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode);
        ip->i_di.di_flags |= GFS2_DIF_JDATA;
-       ip->i_di.di_entries = 2;
+       ip->i_entries = 2;
 
        error = gfs2_meta_inode_buffer(ip, &dibh);
 
@@ -517,13 +517,13 @@ static int gfs2_rmdir(struct inode *dir, struct dentry *dentry)
        if (error)
                goto out_gunlock;
 
-       if (ip->i_di.di_entries < 2) {
+       if (ip->i_entries < 2) {
                if (gfs2_consist_inode(ip))
                        gfs2_dinode_print(ip);
                error = -EIO;
                goto out_gunlock;
        }
-       if (ip->i_di.di_entries > 2) {
+       if (ip->i_entries > 2) {
                error = -ENOTEMPTY;
                goto out_gunlock;
        }
@@ -726,13 +726,13 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
                        goto out_gunlock;
 
                if (S_ISDIR(nip->i_inode.i_mode)) {
-                       if (nip->i_di.di_entries < 2) {
+                       if (nip->i_entries < 2) {
                                if (gfs2_consist_inode(nip))
                                        gfs2_dinode_print(nip);
                                error = -EIO;
                                goto out_gunlock;
                        }
-                       if (nip->i_di.di_entries > 2) {
+                       if (nip->i_entries > 2) {
                                error = -ENOTEMPTY;
                                goto out_gunlock;
                        }
@@ -758,7 +758,7 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
                                error = -EINVAL;
                                goto out_gunlock;
                        }
-                       if (ndip->i_di.di_entries == (u32)-1) {
+                       if (ndip->i_entries == (u32)-1) {
                                error = -EFBIG;
                                goto out_gunlock;
                        }