Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
L
lustre-release
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
External wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
debian-packages
lustre-release
Commits
043c6470
Commit
043c6470
authored
21 years ago
by
Wang Di
Browse files
Options
Downloads
Patches
Plain Diff
add ext3-record-extents-ea.patch for sparse extents in snapfs
parent
ee33582d
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
lustre/kernel_patches/patches/ext3-record-extents-ea.patch
+183
-0
183 additions, 0 deletions
lustre/kernel_patches/patches/ext3-record-extents-ea.patch
with
183 additions
and
0 deletions
lustre/kernel_patches/patches/ext3-record-extents-ea.patch
0 → 100644
+
183
−
0
View file @
043c6470
Index: linux-2.4.20-8/fs/ext3/super.c
===================================================================
--- linux-2.4.20-8.orig/fs/ext3/super.c 2004-01-27 19:34:11.000000000 +0800
+++ linux-2.4.20-8/fs/ext3/super.c 2004-01-28 05:57:51.000000000 +0800
@@ -801,6 +801,8 @@
set_opt (*mount_options, EXTENTS);
else if (!strcmp (this_char, "extdebug"))
set_opt (*mount_options, EXTDEBUG);
+ else if (!strcmp (this_char, "extents-ea"))
+ set_opt (*mount_options, EXTENTS_EA);
else if (!strcmp (this_char, "grpid") ||
!strcmp (this_char, "bsdgroups"))
set_opt (*mount_options, GRPID);
Index: linux-2.4.20-8/fs/ext3/ialloc.c
===================================================================
--- linux-2.4.20-8.orig/fs/ext3/ialloc.c 2004-01-28 01:02:17.000000000 +0800
+++ linux-2.4.20-8/fs/ext3/ialloc.c 2004-01-28 07:56:56.000000000 +0800
@@ -18,6 +18,7 @@
#include <linux/ext3_fs.h>
#include <linux/ext3_jbd.h>
#include <linux/ext3_xattr.h>
+#include <linux/ext3_extents.h>
#include <linux/stat.h>
#include <linux/string.h>
#include <linux/locks.h>
@@ -597,7 +598,7 @@
EXT3_I(inode)->i_flags |= EXT3_EXTENTS_FL;
ext3_extents_initialize_blockmap(handle, inode);
}
-
+
err = ext3_mark_iloc_dirty(handle, inode, &iloc);
if (err) goto fail;
@@ -610,6 +611,12 @@
return ERR_PTR(-EDQUOT);
}
ext3_debug ("allocating inode %lu\n", inode->i_ino);
+
+ if (test_opt(sb, EXTENTS_EA)) {
+ EXT3_I(inode)->i_flags |= EXT3_EXTENTS_EA_FL;
+ ext3_init_extents_tree_in_ea(handle, inode);
+ }
+
return inode;
fail:
Index: linux-2.4.20-8/fs/ext3/extents-in-ea.c
===================================================================
--- linux-2.4.20-8.orig/fs/ext3/extents-in-ea.c 2004-01-27 20:21:43.000000000 +0800
+++ linux-2.4.20-8/fs/ext3/extents-in-ea.c 2004-01-28 06:05:26.000000000 +0800
@@ -30,6 +30,8 @@
#include <linux/slab.h>
#include <asm/uaccess.h>
+#define EXTENTS_EA "sparse_extents"
+#define EXTENTS_EA_SIZE 64
static int ext3_get_ea_write_access(handle_t *handle, void *buffer)
{
struct buffer_head *bh = (struct buffer_head *) buffer;
@@ -81,6 +83,7 @@
brelse(bh);
}
+
int ext3_init_tree_in_ea(struct inode *inode, int name_index,
const char *eaname, int size)
{
@@ -242,7 +245,23 @@
buf->leaf_num++;
return EXT_CONTINUE;
}
-
+int ext3_init_extents_tree_in_ea(handle_t *handle, struct inode *inode)
+{
+ return ext3_init_tree_in_ea(inode, EXT3_XATTR_INDEX_EXTENTS,
+ EXTENTS_EA, EXTENTS_EA_SIZE);
+}
+int ext3_insert_extents_in_ea(handle_t *handle, struct inode *inode,
+ unsigned long from, unsigned long num)
+{
+ return ext3_ext_in_ea_alloc_space(inode, EXT3_XATTR_INDEX_EXTENTS,
+ EXTENTS_EA, from, num);
+}
+int ext3_remove_extents_in_ea(handle_t *handle, struct inode *inode,
+ unsigned long from, unsigned long num)
+{
+ return ext3_ext_in_ea_remove_space(inode, EXT3_XATTR_INDEX_EXTENTS,
+ EXTENTS_EA, from, num);
+}
struct ea_tree_desc {
int name_index;
char eaname[256];
Index: linux-2.4.20-8/fs/ext3/inode.c
===================================================================
--- linux-2.4.20-8.orig/fs/ext3/inode.c 2004-01-27 19:34:11.000000000 +0800
+++ linux-2.4.20-8/fs/ext3/inode.c 2004-01-28 06:03:46.000000000 +0800
@@ -32,7 +32,7 @@
#include <linux/quotaops.h>
#include <linux/module.h>
#include "iopen.h"
-
+#include <linux/ext3_extents.h>
/*
* SEARCH_FROM_ZERO forces each block allocation to search from the start
* of the filesystem. This is to force rapid reallocation of recently-freed
@@ -852,9 +852,18 @@
ext3_get_block_wrap(handle_t *handle, struct inode *inode, long block,
struct buffer_head *bh, int create)
{
+ int rc1 = 0, rc2 = 0;
+
if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
- return ext3_ext_get_block(handle, inode, block, bh, create);
- return ext3_get_block_handle(handle, inode, block, bh, create);
+ rc1 = ext3_ext_get_block(handle, inode, block, bh, create);
+ rc1 = ext3_get_block_handle(handle, inode, block, bh, create);
+ if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_EA_FL) {
+ if (create)
+ rc2 = ext3_insert_extents_in_ea(handle, inode, block, 1);
+ }
+ if (!rc1)
+ return rc2;
+ return rc1;
}
/*
@@ -1897,6 +1906,11 @@
ext3_discard_prealloc(inode);
+ if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_EA_FL) {
+ last_block = (inode->i_size + inode->i_sb->s_blocksize - 1)
+ >> EXT3_BLOCK_SIZE_BITS(inode->i_sb);
+ ext3_remove_extents_in_ea(NULL, inode, last_block, 0xffffffff);
+ }
if (EXT3_I(inode)->i_flags & EXT3_EXTENTS_FL)
return ext3_ext_truncate(inode);
Index: linux-2.4.20-8/include/linux/ext3_fs.h
===================================================================
--- linux-2.4.20-8.orig/include/linux/ext3_fs.h 2004-01-27 20:21:43.000000000 +0800
+++ linux-2.4.20-8/include/linux/ext3_fs.h 2004-01-28 05:57:51.000000000 +0800
@@ -185,6 +185,7 @@
#define EXT3_JOURNAL_DATA_FL 0x00004000 /* file data should be journaled */
#define EXT3_RESERVED_FL 0x80000000 /* reserved for ext3 lib */
#define EXT3_EXTENTS_FL 0x00080000 /* Inode uses extents */
+#define EXT3_EXTENTS_EA_FL 0x00100000 /* Inode uses extents */
#define EXT3_FL_USER_VISIBLE 0x00005FFF /* User visible flags */
#define EXT3_FL_USER_MODIFIABLE 0x000000FF /* User modifiable flags */
@@ -341,6 +342,7 @@
#define EXT3_MOUNT_ASYNCDEL 0x20000 /* Delayed deletion */
#define EXT3_MOUNT_EXTENTS 0x100000/* Extents support */
#define EXT3_MOUNT_EXTDEBUG 0x200000/* Extents debug */
+#define EXT3_MOUNT_EXTENTS_EA 0x400000/* record sparse Extents */
/* Compatibility, for having both ext2_fs.h and ext3_fs.h included at once */
#ifndef _LINUX_EXT2_FS_H
Index: linux-2.4.20-8/include/linux/ext3_xattr.h
===================================================================
--- linux-2.4.20-8.orig/include/linux/ext3_xattr.h 2004-01-27 20:21:42.000000000 +0800
+++ linux-2.4.20-8/include/linux/ext3_xattr.h 2004-01-28 05:57:51.000000000 +0800
@@ -24,6 +24,7 @@
#define EXT3_XATTR_INDEX_TRUSTED 4
#define EXT3_XATTR_INDEX_LUSTRE 5
#define EXT3_XATTR_INDEX_SECURITY 6
+#define EXT3_XATTR_INDEX_EXTENTS 7
struct ext3_xattr_header {
__u32 h_magic; /* magic number for identification */
Index: linux-2.4.20-8/include/linux/ext3_extents.h
===================================================================
--- linux-2.4.20-8.orig/include/linux/ext3_extents.h 2004-01-28 05:56:02.000000000 +0800
+++ linux-2.4.20-8/include/linux/ext3_extents.h 2004-01-28 06:46:15.000000000 +0800
@@ -209,5 +209,7 @@
extern struct ext3_ext_path * ext3_ext_find_extent(struct ext3_extents_tree *, int, struct ext3_ext_path *);
extern int ext3_insert_extents_in_ea(handle_t *handle, struct inode *inode, unsigned long from, unsigned long num);
+extern int ext3_remove_extents_in_ea(handle_t *handle, struct inode *inode, unsigned long from, unsigned long num);
+extern int ext3_init_extents_tree_in_ea(handle_t *handle, struct inode *inode);
#endif /* _LINUX_EXT3_EXTENTS */
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment