Date: Tue, 21 Aug 2018 18:39:30 +0000 (UTC) From: Fedor Uporov <fsu@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r338151 - head/sys/fs/ext2fs Message-ID: <201808211839.w7LIdUZV093277@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: fsu Date: Tue Aug 21 18:39:29 2018 New Revision: 338151 URL: https://svnweb.freebsd.org/changeset/base/338151 Log: Change unused inodes counters behavior in the cylinder groups. Make it more close to native ext4 implementation to avoid fsck errors. Modified: head/sys/fs/ext2fs/ext2_alloc.c Modified: head/sys/fs/ext2fs/ext2_alloc.c ============================================================================== --- head/sys/fs/ext2fs/ext2_alloc.c Tue Aug 21 18:39:02 2018 (r338150) +++ head/sys/fs/ext2fs/ext2_alloc.c Tue Aug 21 18:39:29 2018 (r338151) @@ -1210,7 +1210,7 @@ ext2_nodealloccg(struct inode *ip, int cg, daddr_t ipr struct m_ext2fs *fs; struct buf *bp; struct ext2mount *ump; - int error, start, len; + int error, start, len, ifree; char *ibp, *loc; ipref--; /* to avoid a lot of (ipref -1) */ @@ -1285,9 +1285,12 @@ gotit: e2fs_gd_set_nifree(&fs->e2fs_gd[cg], e2fs_gd_get_nifree(&fs->e2fs_gd[cg]) - 1); if (EXT2_HAS_RO_COMPAT_FEATURE(fs, EXT2F_ROCOMPAT_GDT_CSUM) || - EXT2_HAS_RO_COMPAT_FEATURE(fs, EXT2F_ROCOMPAT_METADATA_CKSUM)) - e2fs_gd_set_i_unused(&fs->e2fs_gd[cg], - e2fs_gd_get_i_unused(&fs->e2fs_gd[cg]) - 1); + EXT2_HAS_RO_COMPAT_FEATURE(fs, EXT2F_ROCOMPAT_METADATA_CKSUM)) { + ifree = fs->e2fs->e2fs_ipg - e2fs_gd_get_i_unused(&fs->e2fs_gd[cg]); + if (ipref + 1 > ifree) + e2fs_gd_set_i_unused(&fs->e2fs_gd[cg], + fs->e2fs->e2fs_ipg - (ipref + 1)); + } fs->e2fs->e2fs_ficount--; fs->e2fs_fmod = 1; if ((mode & IFMT) == IFDIR) { @@ -1391,10 +1394,6 @@ ext2_vfree(struct vnode *pvp, ino_t ino, int mode) fs->e2fs->e2fs_ficount++; e2fs_gd_set_nifree(&fs->e2fs_gd[cg], e2fs_gd_get_nifree(&fs->e2fs_gd[cg]) + 1); - if (EXT2_HAS_RO_COMPAT_FEATURE(fs, EXT2F_ROCOMPAT_GDT_CSUM) || - EXT2_HAS_RO_COMPAT_FEATURE(fs, EXT2F_ROCOMPAT_METADATA_CKSUM)) - e2fs_gd_set_i_unused(&fs->e2fs_gd[cg], - e2fs_gd_get_i_unused(&fs->e2fs_gd[cg]) + 1); if ((mode & IFMT) == IFDIR) { e2fs_gd_set_ndirs(&fs->e2fs_gd[cg], e2fs_gd_get_ndirs(&fs->e2fs_gd[cg]) - 1);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201808211839.w7LIdUZV093277>