ext2: introduce new flags argument for ext2_new_blocks()
authorYe Bin <yebin10@huawei.com>
Tue, 15 Aug 2023 11:26:10 +0000 (19:26 +0800)
committerJan Kara <jack@suse.cz>
Wed, 16 Aug 2023 15:42:42 +0000 (17:42 +0200)
This patch introduces a new flags argument for ext2_new_blocks() and also
a new EXT2_ALLOC_NORESERVE flag.

Signed-off-by: Ye Bin <yebin10@huawei.com>
Message-Id: <20230815112612.221145-3-yebin10@huawei.com>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/ext2/balloc.c
fs/ext2/ext2.h
fs/ext2/inode.c
fs/ext2/xattr.c

index ddaa823fc7f55acf6670a25e0dd7989b3d76d3b9..a9648c3137dbdecb032667c0ff7a33f2eb3b1e05 100644 (file)
@@ -1195,6 +1195,7 @@ int ext2_data_block_valid(struct ext2_sb_info *sbi, ext2_fsblk_t start_blk,
  * @goal:              given target block(filesystem wide)
  * @count:             target number of blocks to allocate
  * @errp:              error code
+ * @flags:             allocate flags
  *
  * ext2_new_blocks uses a goal block to assist allocation.  If the goal is
  * free, or there is a free block within 32 blocks of the goal, that block
@@ -1204,7 +1205,7 @@ int ext2_data_block_valid(struct ext2_sb_info *sbi, ext2_fsblk_t start_blk,
  * This function also updates quota and i_blocks field.
  */
 ext2_fsblk_t ext2_new_blocks(struct inode *inode, ext2_fsblk_t goal,
-                   unsigned long *count, int *errp)
+                   unsigned long *count, int *errp, unsigned int flags)
 {
        struct buffer_head *bitmap_bh = NULL;
        struct buffer_head *gdp_bh;
index 954fb82ab22c595edac327319fc2940fa7124ff8..26dbe579768c1d75caca9f285364f7f161cc4fc9 100644 (file)
@@ -398,6 +398,12 @@ struct ext2_inode {
 #define EXT2_ERRORS_PANIC              3       /* Panic */
 #define EXT2_ERRORS_DEFAULT            EXT2_ERRORS_CONTINUE
 
+/*
+ * Allocation flags
+ */
+#define EXT2_ALLOC_NORESERVE            0x1    /* Do not use reservation
+                                                * window for allocation */
+
 /*
  * Structure of the super block
  */
@@ -696,7 +702,7 @@ static inline struct ext2_inode_info *EXT2_I(struct inode *inode)
 extern int ext2_bg_has_super(struct super_block *sb, int group);
 extern unsigned long ext2_bg_num_gdb(struct super_block *sb, int group);
 extern ext2_fsblk_t ext2_new_blocks(struct inode *, unsigned long,
-                               unsigned long *, int *);
+                               unsigned long *, int *, unsigned int);
 extern int ext2_data_block_valid(struct ext2_sb_info *sbi, ext2_fsblk_t start_blk,
                                 unsigned int count);
 extern void ext2_free_blocks (struct inode *, unsigned long,
index 75983215c7a1f5252ab78c16b010c7842c8e6a1a..39c958f7e02854f789ccdf849947877b496a3398 100644 (file)
@@ -415,7 +415,7 @@ static int ext2_alloc_blocks(struct inode *inode,
        while (1) {
                count = target;
                /* allocating blocks for indirect blocks and direct blocks */
-               current_block = ext2_new_blocks(inode,goal,&count,err);
+               current_block = ext2_new_blocks(inode, goal, &count, err, 0);
                if (*err)
                        goto failed_out;
 
index 06933eabac2653397fd83fe1b6f3143c3872f77a..3b4ff6974ab8949d60ed9fa7c9f1060b716cd25e 100644 (file)
@@ -744,7 +744,7 @@ ext2_xattr_set2(struct inode *inode, struct buffer_head *old_bh,
                                                EXT2_I(inode)->i_block_group);
                        unsigned long count = 1;
                        ext2_fsblk_t block = ext2_new_blocks(inode, goal,
-                                                            &count, &error);
+                                                            &count, &error, 0);
                        if (error)
                                goto cleanup;
                        ea_idebug(inode, "creating block %lu", block);