Commit 23aedc4b authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4

Pull ext4 updates from Ted Ts'o:
 "Only miscellaneous cleanups and bug fixes for ext4 this cycle"

* tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4:
  ext4: create ext4_kset dynamically
  ext4: create ext4_feat kobject dynamically
  ext4: release kobject/kset even when init/register fail
  ext4: fix incorrect indentation of if statement
  ext4: correct documentation for grpid mount option
  ext4: use 'sbi' instead of 'EXT4_SB(sb)'
  ext4: save error to disk in __ext4_grp_locked_error()
  jbd2: fix sphinx kernel-doc build warnings
  ext4: fix a race in the ext4 shutdown path
  mbcache: make sure c_entry_count is not decremented past zero
  ext4: no need flush workqueue before destroying it
  ext4: fixed alignment and minor code cleanup in ext4.h
  ext4: fix ENOSPC handling in DAX page fault handler
  dax: pass detailed error code from dax_iomap_fault()
  mbcache: revert "fs/mbcache.c: make count_objects() more robust"
  mbcache: initialize entry->e_referenced in mb_cache_entry_create()
  ext4: fix up remaining files with SPDX cleanups
parents 85b8bac9 5dc39711
...@@ -232,7 +232,7 @@ data_err=ignore(*) Just print an error message if an error occurs ...@@ -232,7 +232,7 @@ data_err=ignore(*) Just print an error message if an error occurs
data_err=abort Abort the journal if an error occurs in a file data_err=abort Abort the journal if an error occurs in a file
data buffer in ordered mode. data buffer in ordered mode.
grpid Give objects the same group ID as their creator. grpid New objects have the group ID of their parent.
bsdgroups bsdgroups
nogrpid (*) New objects have the group ID of their creator. nogrpid (*) New objects have the group ID of their creator.
......
...@@ -1095,7 +1095,7 @@ static bool dax_fault_is_synchronous(unsigned long flags, ...@@ -1095,7 +1095,7 @@ static bool dax_fault_is_synchronous(unsigned long flags,
} }
static int dax_iomap_pte_fault(struct vm_fault *vmf, pfn_t *pfnp, static int dax_iomap_pte_fault(struct vm_fault *vmf, pfn_t *pfnp,
const struct iomap_ops *ops) int *iomap_errp, const struct iomap_ops *ops)
{ {
struct vm_area_struct *vma = vmf->vma; struct vm_area_struct *vma = vmf->vma;
struct address_space *mapping = vma->vm_file->f_mapping; struct address_space *mapping = vma->vm_file->f_mapping;
...@@ -1148,6 +1148,8 @@ static int dax_iomap_pte_fault(struct vm_fault *vmf, pfn_t *pfnp, ...@@ -1148,6 +1148,8 @@ static int dax_iomap_pte_fault(struct vm_fault *vmf, pfn_t *pfnp,
* that we never have to deal with more than a single extent here. * that we never have to deal with more than a single extent here.
*/ */
error = ops->iomap_begin(inode, pos, PAGE_SIZE, flags, &iomap); error = ops->iomap_begin(inode, pos, PAGE_SIZE, flags, &iomap);
if (iomap_errp)
*iomap_errp = error;
if (error) { if (error) {
vmf_ret = dax_fault_return(error); vmf_ret = dax_fault_return(error);
goto unlock_entry; goto unlock_entry;
...@@ -1481,6 +1483,7 @@ static int dax_iomap_pmd_fault(struct vm_fault *vmf, pfn_t *pfnp, ...@@ -1481,6 +1483,7 @@ static int dax_iomap_pmd_fault(struct vm_fault *vmf, pfn_t *pfnp,
* @vmf: The description of the fault * @vmf: The description of the fault
* @pe_size: Size of the page to fault in * @pe_size: Size of the page to fault in
* @pfnp: PFN to insert for synchronous faults if fsync is required * @pfnp: PFN to insert for synchronous faults if fsync is required
* @iomap_errp: Storage for detailed error code in case of error
* @ops: Iomap ops passed from the file system * @ops: Iomap ops passed from the file system
* *
* When a page fault occurs, filesystems may call this helper in * When a page fault occurs, filesystems may call this helper in
...@@ -1489,11 +1492,11 @@ static int dax_iomap_pmd_fault(struct vm_fault *vmf, pfn_t *pfnp, ...@@ -1489,11 +1492,11 @@ static int dax_iomap_pmd_fault(struct vm_fault *vmf, pfn_t *pfnp,
* successfully. * successfully.
*/ */
int dax_iomap_fault(struct vm_fault *vmf, enum page_entry_size pe_size, int dax_iomap_fault(struct vm_fault *vmf, enum page_entry_size pe_size,
pfn_t *pfnp, const struct iomap_ops *ops) pfn_t *pfnp, int *iomap_errp, const struct iomap_ops *ops)
{ {
switch (pe_size) { switch (pe_size) {
case PE_SIZE_PTE: case PE_SIZE_PTE:
return dax_iomap_pte_fault(vmf, pfnp, ops); return dax_iomap_pte_fault(vmf, pfnp, iomap_errp, ops);
case PE_SIZE_PMD: case PE_SIZE_PMD:
return dax_iomap_pmd_fault(vmf, pfnp, ops); return dax_iomap_pmd_fault(vmf, pfnp, ops);
default: default:
......
...@@ -100,7 +100,7 @@ static int ext2_dax_fault(struct vm_fault *vmf) ...@@ -100,7 +100,7 @@ static int ext2_dax_fault(struct vm_fault *vmf)
} }
down_read(&ei->dax_sem); down_read(&ei->dax_sem);
ret = dax_iomap_fault(vmf, PE_SIZE_PTE, NULL, &ext2_iomap_ops); ret = dax_iomap_fault(vmf, PE_SIZE_PTE, NULL, NULL, &ext2_iomap_ops);
up_read(&ei->dax_sem); up_read(&ei->dax_sem);
if (vmf->flags & FAULT_FLAG_WRITE) if (vmf->flags & FAULT_FLAG_WRITE)
......
/* SPDX-License-Identifier: GPL-2.0 */ // SPDX-License-Identifier: GPL-2.0
/* /*
File: fs/ext4/acl.h File: fs/ext4/acl.h
......
...@@ -355,10 +355,10 @@ static ext4_fsblk_t ext4_valid_block_bitmap(struct super_block *sb, ...@@ -355,10 +355,10 @@ static ext4_fsblk_t ext4_valid_block_bitmap(struct super_block *sb,
blk = ext4_inode_table(sb, desc); blk = ext4_inode_table(sb, desc);
offset = blk - group_first_block; offset = blk - group_first_block;
next_zero_bit = ext4_find_next_zero_bit(bh->b_data, next_zero_bit = ext4_find_next_zero_bit(bh->b_data,
EXT4_B2C(sbi, offset + EXT4_SB(sb)->s_itb_per_group), EXT4_B2C(sbi, offset + sbi->s_itb_per_group),
EXT4_B2C(sbi, offset)); EXT4_B2C(sbi, offset));
if (next_zero_bit < if (next_zero_bit <
EXT4_B2C(sbi, offset + EXT4_SB(sb)->s_itb_per_group)) EXT4_B2C(sbi, offset + sbi->s_itb_per_group))
/* bad bitmap for inode tables */ /* bad bitmap for inode tables */
return blk; return blk;
return 0; return 0;
......
...@@ -147,11 +147,11 @@ int ext4_setup_system_zone(struct super_block *sb) ...@@ -147,11 +147,11 @@ int ext4_setup_system_zone(struct super_block *sb)
int ret; int ret;
if (!test_opt(sb, BLOCK_VALIDITY)) { if (!test_opt(sb, BLOCK_VALIDITY)) {
if (EXT4_SB(sb)->system_blks.rb_node) if (sbi->system_blks.rb_node)
ext4_release_system_zone(sb); ext4_release_system_zone(sb);
return 0; return 0;
} }
if (EXT4_SB(sb)->system_blks.rb_node) if (sbi->system_blks.rb_node)
return 0; return 0;
for (i=0; i < ngroups; i++) { for (i=0; i < ngroups; i++) {
...@@ -173,7 +173,7 @@ int ext4_setup_system_zone(struct super_block *sb) ...@@ -173,7 +173,7 @@ int ext4_setup_system_zone(struct super_block *sb)
} }
if (test_opt(sb, DEBUG)) if (test_opt(sb, DEBUG))
debug_print_tree(EXT4_SB(sb)); debug_print_tree(sbi);
return 0; return 0;
} }
......
/* SPDX-License-Identifier: GPL-2.0 */ // SPDX-License-Identifier: GPL-2.0
/* /*
* ext4.h * ext4.h
* *
...@@ -611,10 +611,10 @@ enum { ...@@ -611,10 +611,10 @@ enum {
/* /*
* Flags used by ext4_free_blocks * Flags used by ext4_free_blocks
*/ */
#define EXT4_FREE_BLOCKS_METADATA 0x0001 #define EXT4_FREE_BLOCKS_METADATA 0x0001
#define EXT4_FREE_BLOCKS_FORGET 0x0002 #define EXT4_FREE_BLOCKS_FORGET 0x0002
#define EXT4_FREE_BLOCKS_VALIDATED 0x0004 #define EXT4_FREE_BLOCKS_VALIDATED 0x0004
#define EXT4_FREE_BLOCKS_NO_QUOT_UPDATE 0x0008 #define EXT4_FREE_BLOCKS_NO_QUOT_UPDATE 0x0008
#define EXT4_FREE_BLOCKS_NOFREE_FIRST_CLUSTER 0x0010 #define EXT4_FREE_BLOCKS_NOFREE_FIRST_CLUSTER 0x0010
#define EXT4_FREE_BLOCKS_NOFREE_LAST_CLUSTER 0x0020 #define EXT4_FREE_BLOCKS_NOFREE_LAST_CLUSTER 0x0020
...@@ -1986,10 +1986,10 @@ static inline __le16 ext4_rec_len_to_disk(unsigned len, unsigned blocksize) ...@@ -1986,10 +1986,10 @@ static inline __le16 ext4_rec_len_to_disk(unsigned len, unsigned blocksize)
/* Legal values for the dx_root hash_version field: */ /* Legal values for the dx_root hash_version field: */
#define DX_HASH_LEGACY 0 #define DX_HASH_LEGACY 0
#define DX_HASH_HALF_MD4 1 #define DX_HASH_HALF_MD4 1
#define DX_HASH_TEA 2 #define DX_HASH_TEA 2
#define DX_HASH_LEGACY_UNSIGNED 3 #define DX_HASH_LEGACY_UNSIGNED 3
#define DX_HASH_HALF_MD4_UNSIGNED 4 #define DX_HASH_HALF_MD4_UNSIGNED 4
#define DX_HASH_TEA_UNSIGNED 5 #define DX_HASH_TEA_UNSIGNED 5
...@@ -2000,7 +2000,6 @@ static inline u32 ext4_chksum(struct ext4_sb_info *sbi, u32 crc, ...@@ -2000,7 +2000,6 @@ static inline u32 ext4_chksum(struct ext4_sb_info *sbi, u32 crc,
struct shash_desc shash; struct shash_desc shash;
char ctx[4]; char ctx[4];
} desc; } desc;
int err;
BUG_ON(crypto_shash_descsize(sbi->s_chksum_driver)!=sizeof(desc.ctx)); BUG_ON(crypto_shash_descsize(sbi->s_chksum_driver)!=sizeof(desc.ctx));
...@@ -2008,8 +2007,7 @@ static inline u32 ext4_chksum(struct ext4_sb_info *sbi, u32 crc, ...@@ -2008,8 +2007,7 @@ static inline u32 ext4_chksum(struct ext4_sb_info *sbi, u32 crc,
desc.shash.flags = 0; desc.shash.flags = 0;
*(u32 *)desc.ctx = crc; *(u32 *)desc.ctx = crc;
err = crypto_shash_update(&desc.shash, address, length); BUG_ON(crypto_shash_update(&desc.shash, address, length));
BUG_ON(err);
return *(u32 *)desc.ctx; return *(u32 *)desc.ctx;
} }
......
// SPDX-License-Identifier: GPL-2.0
/* /*
* Copyright (c) 2003-2006, Cluster File Systems, Inc, info@clusterfs.com * Copyright (c) 2003-2006, Cluster File Systems, Inc, info@clusterfs.com
* Written by Alex Tomas <alex@clusterfs.com> * Written by Alex Tomas <alex@clusterfs.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-
*/ */
#ifndef _EXT4_EXTENTS #ifndef _EXT4_EXTENTS
......
// SPDX-License-Identifier: GPL-2.0+
/* /*
* ext4_jbd2.h * ext4_jbd2.h
* *
...@@ -5,10 +6,6 @@ ...@@ -5,10 +6,6 @@
* *
* Copyright 1998--1999 Red Hat corp --- All Rights Reserved * Copyright 1998--1999 Red Hat corp --- All Rights Reserved
* *
* This file is part of the Linux kernel and is made available under
* the terms of the GNU General Public License, version 2, or at your
* option, any later version, incorporated herein by reference.
*
* Ext4-specific journaling extensions. * Ext4-specific journaling extensions.
*/ */
......
// SPDX-License-Identifier: GPL-2.0
/* /*
* Copyright (c) 2003-2006, Cluster File Systems, Inc, info@clusterfs.com * Copyright (c) 2003-2006, Cluster File Systems, Inc, info@clusterfs.com
* Written by Alex Tomas <alex@clusterfs.com> * Written by Alex Tomas <alex@clusterfs.com>
...@@ -5,19 +6,6 @@ ...@@ -5,19 +6,6 @@
* Architecture independence: * Architecture independence:
* Copyright (c) 2005, Bull S.A. * Copyright (c) 2005, Bull S.A.
* Written by Pierre Peiffer <pierre.peiffer@bull.net> * Written by Pierre Peiffer <pierre.peiffer@bull.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-
*/ */
/* /*
......
/* SPDX-License-Identifier: GPL-2.0 */ // SPDX-License-Identifier: GPL-2.0
/* /*
* fs/ext4/extents_status.h * fs/ext4/extents_status.h
* *
......
...@@ -280,7 +280,8 @@ out: ...@@ -280,7 +280,8 @@ out:
static int ext4_dax_huge_fault(struct vm_fault *vmf, static int ext4_dax_huge_fault(struct vm_fault *vmf,
enum page_entry_size pe_size) enum page_entry_size pe_size)
{ {
int result; int result, error = 0;
int retries = 0;
handle_t *handle = NULL; handle_t *handle = NULL;
struct inode *inode = file_inode(vmf->vma->vm_file); struct inode *inode = file_inode(vmf->vma->vm_file);
struct super_block *sb = inode->i_sb; struct super_block *sb = inode->i_sb;
...@@ -304,6 +305,7 @@ static int ext4_dax_huge_fault(struct vm_fault *vmf, ...@@ -304,6 +305,7 @@ static int ext4_dax_huge_fault(struct vm_fault *vmf,
sb_start_pagefault(sb); sb_start_pagefault(sb);
file_update_time(vmf->vma->vm_file); file_update_time(vmf->vma->vm_file);
down_read(&EXT4_I(inode)->i_mmap_sem); down_read(&EXT4_I(inode)->i_mmap_sem);
retry:
handle = ext4_journal_start_sb(sb, EXT4_HT_WRITE_PAGE, handle = ext4_journal_start_sb(sb, EXT4_HT_WRITE_PAGE,
EXT4_DATA_TRANS_BLOCKS(sb)); EXT4_DATA_TRANS_BLOCKS(sb));
if (IS_ERR(handle)) { if (IS_ERR(handle)) {
...@@ -314,9 +316,13 @@ static int ext4_dax_huge_fault(struct vm_fault *vmf, ...@@ -314,9 +316,13 @@ static int ext4_dax_huge_fault(struct vm_fault *vmf,
} else { } else {
down_read(&EXT4_I(inode)->i_mmap_sem); down_read(&EXT4_I(inode)->i_mmap_sem);
} }
result = dax_iomap_fault(vmf, pe_size, &pfn, &ext4_iomap_ops); result = dax_iomap_fault(vmf, pe_size, &pfn, &error, &ext4_iomap_ops);
if (write) { if (write) {
ext4_journal_stop(handle); ext4_journal_stop(handle);
if ((result & VM_FAULT_ERROR) && error == -ENOSPC &&
ext4_should_retry_alloc(sb, &retries))
goto retry;
/* Handling synchronous page fault? */ /* Handling synchronous page fault? */
if (result & VM_FAULT_NEEDDSYNC) if (result & VM_FAULT_NEEDDSYNC)
result = dax_finish_sync_fault(vmf, pe_size, pfn); result = dax_finish_sync_fault(vmf, pe_size, pfn);
......
// SPDX-License-Identifier: GPL-2.0+
/* /*
* Copyright (C) 2017 Oracle. All Rights Reserved. * Copyright (C) 2017 Oracle. All Rights Reserved.
* *
* Author: Darrick J. Wong <darrick.wong@oracle.com> * Author: Darrick J. Wong <darrick.wong@oracle.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it would be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
#include "ext4.h" #include "ext4.h"
#include <linux/fsmap.h> #include <linux/fsmap.h>
......
// SPDX-License-Identifier: GPL-2.0+
/* /*
* Copyright (C) 2017 Oracle. All Rights Reserved. * Copyright (C) 2017 Oracle. All Rights Reserved.
* *
* Author: Darrick J. Wong <darrick.wong@oracle.com> * Author: Darrick J. Wong <darrick.wong@oracle.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it would be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
#ifndef __EXT4_FSMAP_H__ #ifndef __EXT4_FSMAP_H__
#define __EXT4_FSMAP_H__ #define __EXT4_FSMAP_H__
......
// SPDX-License-Identifier: GPL-2.0
/* /*
* linux/fs/ext4/hash.c * linux/fs/ext4/hash.c
* *
* Copyright (C) 2002 by Theodore Ts'o * Copyright (C) 2002 by Theodore Ts'o
*
* This file is released under the GPL v2.
*
* This file may be redistributed under the terms of the GNU Public
* License.
*/ */
#include <linux/fs.h> #include <linux/fs.h>
......
...@@ -303,7 +303,7 @@ void ext4_free_inode(handle_t *handle, struct inode *inode) ...@@ -303,7 +303,7 @@ void ext4_free_inode(handle_t *handle, struct inode *inode)
/* Do this BEFORE marking the inode not in use or returning an error */ /* Do this BEFORE marking the inode not in use or returning an error */
ext4_clear_inode(inode); ext4_clear_inode(inode);
es = EXT4_SB(sb)->s_es; es = sbi->s_es;
if (ino < EXT4_FIRST_INO(sb) || ino > le32_to_cpu(es->s_inodes_count)) { if (ino < EXT4_FIRST_INO(sb) || ino > le32_to_cpu(es->s_inodes_count)) {
ext4_error(sb, "reserved or nonexistent inode %lu", ino); ext4_error(sb, "reserved or nonexistent inode %lu", ino);
goto error_return; goto error_return;
...@@ -1157,7 +1157,7 @@ got: ...@@ -1157,7 +1157,7 @@ got:
ext4_clear_state_flags(ei); /* Only relevant on 32-bit archs */ ext4_clear_state_flags(ei); /* Only relevant on 32-bit archs */
ext4_set_inode_state(inode, EXT4_STATE_NEW); ext4_set_inode_state(inode, EXT4_STATE_NEW);
ei->i_extra_isize = EXT4_SB(sb)->s_want_extra_isize; ei->i_extra_isize = sbi->s_want_extra_isize;
ei->i_inline_off = 0; ei->i_inline_off = 0;
if (ext4_has_feature_inline_data(sb)) if (ext4_has_feature_inline_data(sb))
ext4_set_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); ext4_set_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA);
......
// SPDX-License-Identifier: LGPL-2.1
/* /*
* Copyright (c) 2012 Taobao. * Copyright (c) 2012 Taobao.
* Written by Tao Ma <boyu.mt@taobao.com> * Written by Tao Ma <boyu.mt@taobao.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of version 2.1 of the GNU Lesser General Public License
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/ */
#include <linux/iomap.h> #include <linux/iomap.h>
......
...@@ -3768,10 +3768,18 @@ static ssize_t ext4_direct_IO_write(struct kiocb *iocb, struct iov_iter *iter) ...@@ -3768,10 +3768,18 @@ static ssize_t ext4_direct_IO_write(struct kiocb *iocb, struct iov_iter *iter)
/* Credits for sb + inode write */ /* Credits for sb + inode write */
handle = ext4_journal_start(inode, EXT4_HT_INODE, 2); handle = ext4_journal_start(inode, EXT4_HT_INODE, 2);
if (IS_ERR(handle)) { if (IS_ERR(handle)) {
/* This is really bad luck. We've written the data /*
* but cannot extend i_size. Bail out and pretend * We wrote the data but cannot extend
* the write failed... */ * i_size. Bail out. In async io case, we do
ret = PTR_ERR(handle); * not return error here because we have
* already submmitted the corresponding
* bio. Returning error here makes the caller
* think that this IO is done and failed
* resulting in race with bio's completion
* handler.
*/
if (!ret)
ret = PTR_ERR(handle);
if (inode->i_nlink) if (inode->i_nlink)
ext4_orphan_del(NULL, inode); ext4_orphan_del(NULL, inode);
......
// SPDX-License-Identifier: GPL-2.0
/* /*
* Copyright (c) 2003-2006, Cluster File Systems, Inc, info@clusterfs.com * Copyright (c) 2003-2006, Cluster File Systems, Inc, info@clusterfs.com
* Written by Alex Tomas <alex@clusterfs.com> * Written by Alex Tomas <alex@clusterfs.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-
*/ */
...@@ -769,10 +757,10 @@ void ext4_mb_generate_buddy(struct super_block *sb, ...@@ -769,10 +757,10 @@ void ext4_mb_generate_buddy(struct super_block *sb,
clear_bit(EXT4_GROUP_INFO_NEED_INIT_BIT, &(grp->bb_state)); clear_bit(EXT4_GROUP_INFO_NEED_INIT_BIT, &(grp->bb_state));
period = get_cycles() - period; period = get_cycles() - period;
spin_lock(&EXT4_SB(sb)->s_bal_lock); spin_lock(&sbi->s_bal_lock);
EXT4_SB(sb)->s_mb_buddies_generated++; sbi->s_mb_buddies_generated++;
EXT4_SB(sb)->s_mb_generation_time += period; sbi->s_mb_generation_time += period;
spin_unlock(&EXT4_SB(sb)->s_bal_lock); spin_unlock(&sbi->s_bal_lock);
} }
static void mb_regenerate_buddy(struct ext4_buddy *e4b) static void mb_regenerate_buddy(struct ext4_buddy *e4b)
...@@ -1459,7 +1447,7 @@ static void mb_free_blocks(struct inode *inode, struct ext4_buddy *e4b, ...@@ -1459,7 +1447,7 @@ static void mb_free_blocks(struct inode *inode, struct ext4_buddy *e4b,
ext4_fsblk_t blocknr; ext4_fsblk_t blocknr;
blocknr = ext4_group_first_block_no(sb, e4b->bd_group); blocknr = ext4_group_first_block_no(sb, e4b->bd_group);
blocknr += EXT4_C2B(EXT4_SB(sb), block); blocknr += EXT4_C2B(sbi, block);
ext4_grp_locked_error(sb, e4b->bd_group, ext4_grp_locked_error(sb, e4b->bd_group,
inode ? inode->i_ino : 0, inode ? inode->i_ino : 0,
blocknr, blocknr,
...@@ -4850,9 +4838,9 @@ do_more: ...@@ -4850,9 +4838,9 @@ do_more:
if (in_range(ext4_block_bitmap(sb, gdp), block, count) || if (in_range(ext4_block_bitmap(sb, gdp), block, count) ||
in_range(ext4_inode_bitmap(sb, gdp), block, count) || in_range(ext4_inode_bitmap(sb, gdp), block, count) ||
in_range(block, ext4_inode_table(sb, gdp), in_range(block, ext4_inode_table(sb, gdp),
EXT4_SB(sb)->s_itb_per_group) || sbi->s_itb_per_group) ||
in_range(block + count - 1, ext4_inode_table(sb, gdp), in_range(block + count - 1, ext4_inode_table(sb, gdp),
EXT4_SB(sb)->s_itb_per_group)) { sbi->s_itb_per_group)) {
ext4_error(sb, "Freeing blocks in system zone - " ext4_error(sb, "Freeing blocks in system zone - "
"Block = %llu, count = %lu", block, count); "Block = %llu, count = %lu", block, count);
......
/* SPDX-License-Identifier: GPL-2.0 */ // SPDX-License-Identifier: GPL-2.0
/* /*
* fs/ext4/mballoc.h * fs/ext4/mballoc.h
* *
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment