#include <linux/quotaops.h>
#include <linux/buffer_head.h>
#include <linux/random.h>
+#include <linux/vs_dlimit.h>
#include <asm/bitops.h>
#include <asm/byteorder.h>
if (!bh)
ext3_error(sb, "read_inode_bitmap",
"Cannot read inode bitmap - "
- "block_group = %lu, inode_bitmap = %lu",
- block_group, (unsigned long) desc->bg_inode_bitmap);
+ "block_group = %lu, inode_bitmap = %u",
+ block_group, le32_to_cpu(desc->bg_inode_bitmap));
error_out:
return bh;
}
unsigned long bit;
struct ext3_group_desc * gdp;
struct ext3_super_block * es;
- struct ext3_sb_info *sbi = EXT3_SB(sb);
+ struct ext3_sb_info *sbi;
int fatal = 0, err;
if (atomic_read(&inode->i_count) > 1) {
printk("ext3_free_inode: inode on nonexistent device\n");
return;
}
+ sbi = EXT3_SB(sb);
ino = inode->i_ino;
ext3_debug ("freeing inode %lu\n", ino);
*/
DQUOT_INIT(inode);
ext3_xattr_delete_inode(handle, inode);
+ DLIMIT_FREE_INODE(sb, inode->i_xid);
DQUOT_FREE_INODE(inode);
DQUOT_DROP(inode);
inode = new_inode(sb);
if (!inode)
return ERR_PTR(-ENOMEM);
+
+ if (sb->s_flags & MS_TAGXID)
+ inode->i_xid = current->xid;
+ else
+ inode->i_xid = 0;
+
+ if (DLIMIT_ALLOC_INODE(sb, inode->i_xid)) {
+ err = -ENOSPC;
+ goto out;
+ }
ei = EXT3_I(inode);
sbi = EXT3_SB(sb);
ext3_debug("allocating inode %lu\n", inode->i_ino);
goto really_out;
fail:
+ DLIMIT_FREE_INODE(sb, inode->i_xid);
ext3_std_error(sb, err);
out:
iput(inode);
return ret;
fail2:
+ DLIMIT_FREE_INODE(sb, inode->i_xid);
inode->i_flags |= S_NOQUOTA;
inode->i_nlink = 0;
iput(inode);