summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'vserver-sources/old/2.0-r1/4913_vs2.0-dlimit-fix01.patch')
-rw-r--r--vserver-sources/old/2.0-r1/4913_vs2.0-dlimit-fix01.patch116
1 files changed, 116 insertions, 0 deletions
diff --git a/vserver-sources/old/2.0-r1/4913_vs2.0-dlimit-fix01.patch b/vserver-sources/old/2.0-r1/4913_vs2.0-dlimit-fix01.patch
new file mode 100644
index 0000000..c62e096
--- /dev/null
+++ b/vserver-sources/old/2.0-r1/4913_vs2.0-dlimit-fix01.patch
@@ -0,0 +1,116 @@
+diff -NurpP --minimal linux-2.6.12.3-vs2.0.0.1/fs/ext2/ialloc.c linux-2.6.12.3-vs2.0.0.2/fs/ext2/ialloc.c
+--- linux-2.6.12.3-vs2.0.0.1/fs/ext2/ialloc.c 2005-08-17 23:29:16 +0200
++++ linux-2.6.12.3-vs2.0.0.2/fs/ext2/ialloc.c 2005-08-18 00:28:04 +0200
+@@ -126,9 +126,9 @@ void ext2_free_inode (struct inode * ino
+ if (!is_bad_inode(inode)) {
+ /* Quota is already initialized in iput() */
+ ext2_xattr_delete_inode(inode);
+- DLIMIT_FREE_INODE(inode);
+ DQUOT_FREE_INODE(inode);
+ DQUOT_DROP(inode);
++ DLIMIT_FREE_INODE(inode);
+ }
+
+ es = EXT2_SB(sb)->s_es;
+diff -NurpP --minimal linux-2.6.12.3-vs2.0.0.1/fs/ext3/ialloc.c linux-2.6.12.3-vs2.0.0.2/fs/ext3/ialloc.c
+--- linux-2.6.12.3-vs2.0.0.1/fs/ext3/ialloc.c 2005-08-17 23:26:01 +0200
++++ linux-2.6.12.3-vs2.0.0.2/fs/ext3/ialloc.c 2005-08-18 00:27:03 +0200
+@@ -127,9 +127,9 @@ void ext3_free_inode (handle_t *handle,
+ */
+ DQUOT_INIT(inode);
+ ext3_xattr_delete_inode(handle, inode);
+- DLIMIT_FREE_INODE(inode);
+ DQUOT_FREE_INODE(inode);
+ DQUOT_DROP(inode);
++ DLIMIT_FREE_INODE(inode);
+
+ is_directory = S_ISDIR(inode->i_mode);
+
+@@ -450,7 +450,7 @@ struct inode *ext3_new_inode(handle_t *h
+ inode->i_xid = vx_current_fsxid(sb);
+ if (DLIMIT_ALLOC_INODE(inode)) {
+ err = -ENOSPC;
+- goto out;
++ goto out_dlimit;
+ }
+ ei = EXT3_I(inode);
+
+@@ -623,9 +623,10 @@ got:
+ ext3_debug("allocating inode %lu\n", inode->i_ino);
+ goto really_out;
+ fail:
+- DLIMIT_FREE_INODE(inode);
+ ext3_std_error(sb, err);
+ out:
++ DLIMIT_FREE_INODE(inode);
++out_dlimit:
+ iput(inode);
+ ret = ERR_PTR(err);
+ really_out:
+diff -NurpP --minimal linux-2.6.12.3-vs2.0.0.1/fs/jfs/inode.c linux-2.6.12.3-vs2.0.0.2/fs/jfs/inode.c
+--- linux-2.6.12.3-vs2.0.0.1/fs/jfs/inode.c 2005-06-22 02:38:36 +0200
++++ linux-2.6.12.3-vs2.0.0.2/fs/jfs/inode.c 2005-08-18 00:54:20 +0200
+@@ -22,6 +22,7 @@
+ #include <linux/buffer_head.h>
+ #include <linux/pagemap.h>
+ #include <linux/quotaops.h>
++#include <linux/vs_dlimit.h>
+ #include "jfs_incore.h"
+ #include "jfs_filsys.h"
+ #include "jfs_imap.h"
+@@ -146,6 +147,7 @@ void jfs_delete_inode(struct inode *inod
+ DQUOT_INIT(inode);
+ DQUOT_FREE_INODE(inode);
+ DQUOT_DROP(inode);
++ DLIMIT_FREE_INODE(inode);
+
+ clear_inode(inode);
+ }
+diff -NurpP --minimal linux-2.6.12.3-vs2.0.0.1/fs/reiserfs/inode.c linux-2.6.12.3-vs2.0.0.2/fs/reiserfs/inode.c
+--- linux-2.6.12.3-vs2.0.0.1/fs/reiserfs/inode.c 2005-08-17 23:49:12 +0200
++++ linux-2.6.12.3-vs2.0.0.2/fs/reiserfs/inode.c 2005-08-18 00:22:52 +0200
+@@ -55,8 +55,8 @@ void reiserfs_delete_inode (struct inode
+ /* Do quota update inside a transaction for journaled quotas. We must do that
+ * after delete_object so that quota updates go into the same transaction as
+ * stat data deletion */
+- DLIMIT_FREE_INODE(inode);
+ DQUOT_FREE_INODE(inode);
++ DLIMIT_FREE_INODE(inode);
+
+ if (journal_end(&th, inode->i_sb, jbegin_count)) {
+ up (&inode->i_sem);
+@@ -1699,14 +1699,14 @@ int reiserfs_new_inode (struct reiserfs_
+
+ BUG_ON (!th->t_trans_id);
+
+- if (DQUOT_ALLOC_INODE(inode)) {
+- err = -EDQUOT;
+- goto out_end_trans;
+- }
+ if (DLIMIT_ALLOC_INODE(inode)) {
+ err = -ENOSPC;
+ goto out_bad_dlimit;
+ }
++ if (DQUOT_ALLOC_INODE(inode)) {
++ err = -EDQUOT;
++ goto out_end_trans;
++ }
+ if (!dir || !dir->i_nlink) {
+ err = -EPERM;
+ goto out_bad_inode;
+@@ -1877,12 +1877,13 @@ out_bad_inode:
+ /* Invalidate the object, nothing was inserted yet */
+ INODE_PKEY(inode)->k_objectid = 0;
+
+- DLIMIT_FREE_INODE(inode);
+-out_bad_dlimit:
+ /* Quota change must be inside a transaction for journaling */
+ DQUOT_FREE_INODE(inode);
+
+ out_end_trans:
++ DLIMIT_FREE_INODE(inode);
++
++out_bad_dlimit:
+ journal_end(th, th->t_super, th->t_blocks_allocated) ;
+ /* Drop can be outside and it needs more credits so it's better to have it outside */
+ DQUOT_DROP(inode);