+++ /dev/null
-Index: linux-stage/fs/ext4/super.c
-===================================================================
---- linux-stage.orig/fs/ext4/super.c
-+++ linux-stage/fs/ext4/super.c
-@@ -1117,9 +1117,53 @@ static ssize_t ext4_quota_read(struct su
- static ssize_t ext4_quota_write(struct super_block *sb, int type,
- const char *data, size_t len, loff_t off);
-
-+static int ext4_dquot_initialize(struct inode *inode, int type)
-+{
-+ handle_t *handle;
-+ int ret, err;
-+
-+ if (IS_NOQUOTA(inode))
-+ return 0;
-+
-+ /* We may create quota structure so we need to reserve enough blocks */
-+ handle = ext4_journal_start(inode, 2*EXT4_QUOTA_INIT_BLOCKS(inode->i_sb));
-+ if (IS_ERR(handle))
-+ return PTR_ERR(handle);
-+ ret = dquot_initialize(inode, type);
-+ err = ext4_journal_stop(handle);
-+ if (!ret)
-+ ret = err;
-+ return ret;
-+}
-+
-+static int ext4_dquot_drop(struct inode *inode)
-+{
-+ handle_t *handle;
-+ int ret, err;
-+
-+ if (IS_NOQUOTA(inode))
-+ return 0;
-+
-+ /* We may delete quota structure so we need to reserve enough blocks */
-+ handle = ext4_journal_start(inode, 2*EXT4_QUOTA_DEL_BLOCKS(inode->i_sb));
-+ if (IS_ERR(handle)) {
-+ /*
-+ * We call dquot_drop() anyway to at least release references
-+ * to quota structures so that umount does not hang.
-+ */
-+ dquot_drop(inode);
-+ return PTR_ERR(handle);
-+ }
-+ ret = dquot_drop(inode);
-+ err = ext4_journal_stop(handle);
-+ if (!ret)
-+ ret = err;
-+ return ret;
-+}
-+
- static const struct dquot_operations ext4_quota_operations = {
-- .initialize = dquot_initialize,
-- .drop = dquot_drop,
-+ .initialize = ext4_dquot_initialize,
-+ .drop = ext4_dquot_drop,
- .alloc_space = dquot_alloc_space,
- .reserve_space = dquot_reserve_space,
- .claim_space = dquot_claim_space,