]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.suse/ocfs2-Assign-feature-bits-and-system-inodes-to-quot.patch
Imported linux-2.6.27.39 suse/xen patches.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.suse / ocfs2-Assign-feature-bits-and-system-inodes-to-quot.patch
diff --git a/src/patches/suse-2.6.27.31/patches.suse/ocfs2-Assign-feature-bits-and-system-inodes-to-quot.patch b/src/patches/suse-2.6.27.31/patches.suse/ocfs2-Assign-feature-bits-and-system-inodes-to-quot.patch
deleted file mode 100644 (file)
index 77c25c1..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-From: Jan Kara <jack@suse.cz>
-References: fate#302681
-Subject: [PATCH 22/28] ocfs2: Assign feature bits and system inodes to quota feature and quota files
-Patch-mainline: 2.6.29?
-
-Signed-off-by: Jan Kara <jack@suse.cz>
----
- fs/ocfs2/inode.c    |    2 ++
- fs/ocfs2/ocfs2_fs.h |   23 ++++++++++++++++++++---
- fs/ocfs2/super.c    |   17 +++++++++++++++++
- 3 files changed, 39 insertions(+), 3 deletions(-)
-
---- a/fs/ocfs2/inode.c
-+++ b/fs/ocfs2/inode.c
-@@ -292,6 +292,8 @@ int ocfs2_populate_inode(struct inode *i
-               mlog(0, "local alloc inode: i_ino=%lu\n", inode->i_ino);
-       } else if (fe->i_flags & cpu_to_le32(OCFS2_BITMAP_FL)) {
-               OCFS2_I(inode)->ip_flags |= OCFS2_INODE_BITMAP;
-+      } else if (fe->i_flags & cpu_to_le32(OCFS2_QUOTA_FL)) {
-+              inode->i_flags |= S_NOQUOTA;
-       } else if (fe->i_flags & cpu_to_le32(OCFS2_SUPER_BLOCK_FL)) {
-               mlog(0, "superblock inode: i_ino=%lu\n", inode->i_ino);
-               /* we can't actually hit this as read_inode can't
---- a/fs/ocfs2/ocfs2_fs.h
-+++ b/fs/ocfs2/ocfs2_fs.h
-@@ -94,7 +94,9 @@
-                                        | OCFS2_FEATURE_INCOMPAT_EXTENDED_SLOT_MAP \
-                                        | OCFS2_FEATURE_INCOMPAT_USERSPACE_STACK \
-                                        | OCFS2_FEATURE_INCOMPAT_XATTR)
--#define OCFS2_FEATURE_RO_COMPAT_SUPP  OCFS2_FEATURE_RO_COMPAT_UNWRITTEN
-+#define OCFS2_FEATURE_RO_COMPAT_SUPP  (OCFS2_FEATURE_RO_COMPAT_UNWRITTEN \
-+                                       | OCFS2_FEATURE_RO_COMPAT_USRQUOTA \
-+                                       | OCFS2_FEATURE_RO_COMPAT_GRPQUOTA)
- /*
-  * Heartbeat-only devices are missing journals and other files.  The
-@@ -163,6 +165,12 @@
-  */
- #define OCFS2_FEATURE_RO_COMPAT_UNWRITTEN     0x0001
-+/*
-+ * Maintain quota information for this filesystem
-+ */
-+#define OCFS2_FEATURE_RO_COMPAT_USRQUOTA      0x0002
-+#define OCFS2_FEATURE_RO_COMPAT_GRPQUOTA      0x0004
-+
- /* The byte offset of the first backup block will be 1G.
-  * The following will be 4G, 16G, 64G, 256G and 1T.
-  */
-@@ -192,6 +200,7 @@
- #define OCFS2_HEARTBEAT_FL    (0x00000200)    /* Heartbeat area */
- #define OCFS2_CHAIN_FL                (0x00000400)    /* Chain allocator */
- #define OCFS2_DEALLOC_FL      (0x00000800)    /* Truncate log */
-+#define OCFS2_QUOTA_FL                (0x00001000)    /* Quota file */
- /*
-  * Flags on ocfs2_dinode.i_dyn_features
-@@ -329,13 +338,17 @@ enum {
- #define OCFS2_FIRST_ONLINE_SYSTEM_INODE SLOT_MAP_SYSTEM_INODE
-       HEARTBEAT_SYSTEM_INODE,
-       GLOBAL_BITMAP_SYSTEM_INODE,
--#define OCFS2_LAST_GLOBAL_SYSTEM_INODE GLOBAL_BITMAP_SYSTEM_INODE
-+      USER_QUOTA_SYSTEM_INODE,
-+      GROUP_QUOTA_SYSTEM_INODE,
-+#define OCFS2_LAST_GLOBAL_SYSTEM_INODE GROUP_QUOTA_SYSTEM_INODE
-       ORPHAN_DIR_SYSTEM_INODE,
-       EXTENT_ALLOC_SYSTEM_INODE,
-       INODE_ALLOC_SYSTEM_INODE,
-       JOURNAL_SYSTEM_INODE,
-       LOCAL_ALLOC_SYSTEM_INODE,
-       TRUNCATE_LOG_SYSTEM_INODE,
-+      LOCAL_USER_QUOTA_SYSTEM_INODE,
-+      LOCAL_GROUP_QUOTA_SYSTEM_INODE,
-       NUM_SYSTEM_INODES
- };
-@@ -349,6 +362,8 @@ static struct ocfs2_system_inode_info oc
-       [SLOT_MAP_SYSTEM_INODE]                 = { "slot_map", 0, S_IFREG | 0644 },
-       [HEARTBEAT_SYSTEM_INODE]                = { "heartbeat", OCFS2_HEARTBEAT_FL, S_IFREG | 0644 },
-       [GLOBAL_BITMAP_SYSTEM_INODE]            = { "global_bitmap", 0, S_IFREG | 0644 },
-+      [USER_QUOTA_SYSTEM_INODE]               = { "aquota.user", OCFS2_QUOTA_FL, S_IFREG | 0644 },
-+      [GROUP_QUOTA_SYSTEM_INODE]              = { "aquota.group", OCFS2_QUOTA_FL, S_IFREG | 0644 },
-       /* Slot-specific system inodes (one copy per slot) */
-       [ORPHAN_DIR_SYSTEM_INODE]               = { "orphan_dir:%04d", 0, S_IFDIR | 0755 },
-@@ -356,7 +371,9 @@ static struct ocfs2_system_inode_info oc
-       [INODE_ALLOC_SYSTEM_INODE]              = { "inode_alloc:%04d", OCFS2_BITMAP_FL | OCFS2_CHAIN_FL, S_IFREG | 0644 },
-       [JOURNAL_SYSTEM_INODE]                  = { "journal:%04d", OCFS2_JOURNAL_FL, S_IFREG | 0644 },
-       [LOCAL_ALLOC_SYSTEM_INODE]              = { "local_alloc:%04d", OCFS2_BITMAP_FL | OCFS2_LOCAL_ALLOC_FL, S_IFREG | 0644 },
--      [TRUNCATE_LOG_SYSTEM_INODE]             = { "truncate_log:%04d", OCFS2_DEALLOC_FL, S_IFREG | 0644 }
-+      [TRUNCATE_LOG_SYSTEM_INODE]             = { "truncate_log:%04d", OCFS2_DEALLOC_FL, S_IFREG | 0644 },
-+      [LOCAL_USER_QUOTA_SYSTEM_INODE]         = { "aquota%04d.user", OCFS2_QUOTA_FL, S_IFREG | 0644 },
-+      [LOCAL_GROUP_QUOTA_SYSTEM_INODE]        = { "aquota%04d.group", OCFS2_QUOTA_FL, S_IFREG | 0644 },
- };
- /* Parameter passed from mount.ocfs2 to module */
---- a/fs/ocfs2/super.c
-+++ b/fs/ocfs2/super.c
-@@ -225,6 +225,19 @@ static int ocfs2_sync_fs(struct super_bl
-       return 0;
- }
-+static int ocfs2_need_system_inode(struct ocfs2_super *osb, int ino)
-+{
-+      if (!OCFS2_HAS_RO_COMPAT_FEATURE(osb->sb, OCFS2_FEATURE_RO_COMPAT_USRQUOTA)
-+          && (ino == USER_QUOTA_SYSTEM_INODE
-+              || ino == LOCAL_USER_QUOTA_SYSTEM_INODE))
-+              return 0;
-+      if (!OCFS2_HAS_RO_COMPAT_FEATURE(osb->sb, OCFS2_FEATURE_RO_COMPAT_GRPQUOTA)
-+          && (ino == GROUP_QUOTA_SYSTEM_INODE
-+              || ino == LOCAL_GROUP_QUOTA_SYSTEM_INODE))
-+              return 0;
-+      return 1;
-+}
-+
- static int ocfs2_init_global_system_inodes(struct ocfs2_super *osb)
- {
-       struct inode *new = NULL;
-@@ -251,6 +264,8 @@ static int ocfs2_init_global_system_inod
-       for (i = OCFS2_FIRST_ONLINE_SYSTEM_INODE;
-            i <= OCFS2_LAST_GLOBAL_SYSTEM_INODE; i++) {
-+              if (!ocfs2_need_system_inode(osb, i))
-+                      continue;
-               new = ocfs2_get_system_file_inode(osb, i, osb->slot_num);
-               if (!new) {
-                       ocfs2_release_system_inodes(osb);
-@@ -281,6 +296,8 @@ static int ocfs2_init_local_system_inode
-       for (i = OCFS2_LAST_GLOBAL_SYSTEM_INODE + 1;
-            i < NUM_SYSTEM_INODES;
-            i++) {
-+              if (!ocfs2_need_system_inode(osb, i))
-+                      continue;
-               new = ocfs2_get_system_file_inode(osb, i, osb->slot_num);
-               if (!new) {
-                       ocfs2_release_system_inodes(osb);