#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>
*/
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);
ei->i_file_acl = 0;
ei->i_dir_acl = 0;
ei->i_dtime = 0;
- ei->i_rsv_window.rsv_start = 0;
- ei->i_rsv_window.rsv_end = 0;
- atomic_set(&ei->i_rsv_window.rsv_goal_size, EXT3_DEFAULT_RESERVE_BLOCKS);
- ei->i_rsv_window.rsv_alloc_hit = 0;
- INIT_LIST_HEAD(&ei->i_rsv_window.rsv_list);
+#ifdef EXT3_PREALLOCATE
+ ei->i_prealloc_block = 0;
+ ei->i_prealloc_count = 0;
+#endif
ei->i_block_group = group;
ext3_set_inode_flags(inode);
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);