Commit 764a167f authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'xfs-fixes-7.0-rc2' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux

Pull xfs fixes from Carlos Maiolino:
 "Nothing reeeally stands out here: a few bug fixes, some refactoring to
  easily fit the bug fixes, and a couple cosmetic changes"

* tag 'xfs-fixes-7.0-rc2' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux:
  xfs: add static size checks for ioctl UABI
  xfs: remove duplicate static size checks
  xfs: Add comments for usages of some macros.
  xfs: Update lazy counters in xfs_growfs_rt_bmblock()
  xfs: Add a comment in xfs_log_sb()
  xfs: Fix xfs_last_rt_bmblock()
  xfs: don't report half-built inodes to fserror
  xfs: don't report metadata inodes to fserror
  xfs: fix potential pointer access race in xfs_healthmon_get
  xfs: fix xfs_group release bug in xfs_dax_notify_dev_failure
  xfs: fix xfs_group release bug in xfs_verify_report_losses
  xfs: fix copy-paste error in previous fix
  xfs: Fix error pointer dereference
  xfs: remove metafile inodes from the active inode stat
  xfs: cleanup inode counter stats
  xfs: fix code alignment issues in xfs_ondisk.c
  xfs: Replace &rtg->rtg_group with rtg_group()
  xfs: Refactoring the nagcount and delta calculation
  xfs: Replace ASSERT with XFS_IS_CORRUPT in xfs_rtcopy_summary()
parents 3feb464f 650b774c
Loading
Loading
Loading
Loading
+28 −0
Original line number Diff line number Diff line
@@ -872,6 +872,34 @@ xfs_ag_shrink_space(
	return err2;
}

void
xfs_growfs_compute_deltas(
	struct xfs_mount	*mp,
	xfs_rfsblock_t		nb,
	int64_t			*deltap,
	xfs_agnumber_t		*nagcountp)
{
	xfs_rfsblock_t	nb_div, nb_mod;
	int64_t		delta;
	xfs_agnumber_t	nagcount;

	nb_div = nb;
	nb_mod = do_div(nb_div, mp->m_sb.sb_agblocks);
	if (nb_mod && nb_mod >= XFS_MIN_AG_BLOCKS)
		nb_div++;
	else if (nb_mod)
		nb = nb_div * mp->m_sb.sb_agblocks;

	if (nb_div > XFS_MAX_AGNUMBER + 1) {
		nb_div = XFS_MAX_AGNUMBER + 1;
		nb = nb_div * mp->m_sb.sb_agblocks;
	}
	nagcount = nb_div;
	delta = nb - mp->m_sb.sb_dblocks;
	*deltap = delta;
	*nagcountp = nagcount;
}

/*
 * Extent the AG indicated by the @id by the length passed in
 */
+3 −0
Original line number Diff line number Diff line
@@ -331,6 +331,9 @@ struct aghdr_init_data {
int xfs_ag_init_headers(struct xfs_mount *mp, struct aghdr_init_data *id);
int xfs_ag_shrink_space(struct xfs_perag *pag, struct xfs_trans **tpp,
			xfs_extlen_t delta);
void
xfs_growfs_compute_deltas(struct xfs_mount *mp, xfs_rfsblock_t nb,
			int64_t *deltap, xfs_agnumber_t *nagcountp);
int xfs_ag_extend_space(struct xfs_perag *pag, struct xfs_trans *tp,
			xfs_extlen_t len);
int xfs_ag_get_geometry(struct xfs_perag *pag, struct xfs_ag_geometry *ageo);
+4 −0
Original line number Diff line number Diff line
@@ -268,6 +268,10 @@ xfs_inode_from_disk(
	}
	if (xfs_is_reflink_inode(ip))
		xfs_ifork_init_cow(ip);
	if (xfs_is_metadir_inode(ip)) {
		XFS_STATS_DEC(ip->i_mount, xs_inodes_active);
		XFS_STATS_INC(ip->i_mount, xs_inodes_meta);
	}
	return 0;

out_destroy_data_fork:
+5 −0
Original line number Diff line number Diff line
@@ -61,6 +61,9 @@ xfs_metafile_set_iflag(
	ip->i_diflags2 |= XFS_DIFLAG2_METADATA;
	ip->i_metatype = metafile_type;
	xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);

	XFS_STATS_DEC(ip->i_mount, xs_inodes_active);
	XFS_STATS_INC(ip->i_mount, xs_inodes_meta);
}

/* Clear the metadata directory inode flag. */
@@ -74,6 +77,8 @@ xfs_metafile_clear_iflag(

	ip->i_diflags2 &= ~XFS_DIFLAG2_METADATA;
	xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
	XFS_STATS_INC(ip->i_mount, xs_inodes_active);
	XFS_STATS_DEC(ip->i_mount, xs_inodes_meta);
}

/*
+36 −16
Original line number Diff line number Diff line
@@ -136,16 +136,7 @@ xfs_check_ondisk_structs(void)
	/* ondisk dir/attr structures from xfs/122 */
	XFS_CHECK_STRUCT_SIZE(struct xfs_attr_sf_entry,		3);
	XFS_CHECK_STRUCT_SIZE(struct xfs_dir2_data_free,	4);
	XFS_CHECK_STRUCT_SIZE(struct xfs_dir2_data_hdr,		16);
	XFS_CHECK_STRUCT_SIZE(struct xfs_dir2_data_unused,	6);
	XFS_CHECK_STRUCT_SIZE(struct xfs_dir2_free,		16);
	XFS_CHECK_STRUCT_SIZE(struct xfs_dir2_free_hdr,		16);
	XFS_CHECK_STRUCT_SIZE(struct xfs_dir2_leaf,		16);
	XFS_CHECK_STRUCT_SIZE(struct xfs_dir2_leaf_entry,	8);
	XFS_CHECK_STRUCT_SIZE(struct xfs_dir2_leaf_hdr,		16);
	XFS_CHECK_STRUCT_SIZE(struct xfs_dir2_leaf_tail,	4);
	XFS_CHECK_STRUCT_SIZE(struct xfs_dir2_sf_entry,		3);
	XFS_CHECK_STRUCT_SIZE(struct xfs_dir2_sf_hdr,		10);

	/* log structures */
	XFS_CHECK_STRUCT_SIZE(struct xfs_buf_log_format,	88);
@@ -217,11 +208,6 @@ xfs_check_ondisk_structs(void)
	XFS_CHECK_OFFSET(struct xfs_dir3_free, hdr.hdr.magic,	0);
	XFS_CHECK_OFFSET(struct xfs_attr3_leafblock, hdr.info.hdr, 0);

	XFS_CHECK_STRUCT_SIZE(struct xfs_bulkstat,		192);
	XFS_CHECK_STRUCT_SIZE(struct xfs_inumbers,		24);
	XFS_CHECK_STRUCT_SIZE(struct xfs_bulkstat_req,		64);
	XFS_CHECK_STRUCT_SIZE(struct xfs_inumbers_req,		64);

	/*
	 * Make sure the incore inode timestamp range corresponds to hand
	 * converted values based on the ondisk format specification.
@@ -301,6 +287,40 @@ xfs_check_ondisk_structs(void)
	XFS_CHECK_SB_OFFSET(sb_pad,			281);
	XFS_CHECK_SB_OFFSET(sb_rtstart,			288);
	XFS_CHECK_SB_OFFSET(sb_rtreserved,		296);

	/*
	 * ioctl UABI
	 *
	 * Due to different padding/alignment requirements across
	 * different architectures, some structures are ommited from
	 * the size checks. In addition, structures with architecture
	 * dependent size fields are also ommited (e.g. __kernel_long_t).
	 */
	XFS_CHECK_STRUCT_SIZE(struct xfs_bulkstat,		192);
	XFS_CHECK_STRUCT_SIZE(struct xfs_inumbers,		24);
	XFS_CHECK_STRUCT_SIZE(struct xfs_bulkstat_req,		64);
	XFS_CHECK_STRUCT_SIZE(struct xfs_inumbers_req,		64);
	XFS_CHECK_STRUCT_SIZE(struct dioattr,			12);
	XFS_CHECK_STRUCT_SIZE(struct getbmap,			32);
	XFS_CHECK_STRUCT_SIZE(struct getbmapx,			48);
	XFS_CHECK_STRUCT_SIZE(struct xfs_attrlist_cursor,	16);
	XFS_CHECK_STRUCT_SIZE(struct xfs_attrlist,		8);
	XFS_CHECK_STRUCT_SIZE(struct xfs_attrlist,		8);
	XFS_CHECK_STRUCT_SIZE(struct xfs_attrlist_ent,		4);
	XFS_CHECK_STRUCT_SIZE(struct xfs_ag_geometry,		128);
	XFS_CHECK_STRUCT_SIZE(struct xfs_rtgroup_geometry,	128);
	XFS_CHECK_STRUCT_SIZE(struct xfs_error_injection,	8);
	XFS_CHECK_STRUCT_SIZE(struct xfs_fsop_geom,		256);
	XFS_CHECK_STRUCT_SIZE(struct xfs_fsop_geom_v4,		112);
	XFS_CHECK_STRUCT_SIZE(struct xfs_fsop_counts,		32);
	XFS_CHECK_STRUCT_SIZE(struct xfs_fsop_resblks,		16);
	XFS_CHECK_STRUCT_SIZE(struct xfs_growfs_log,		8);
	XFS_CHECK_STRUCT_SIZE(struct xfs_bulk_ireq,		64);
	XFS_CHECK_STRUCT_SIZE(struct xfs_fs_eofblocks,		128);
	XFS_CHECK_STRUCT_SIZE(struct xfs_fsid,			8);
	XFS_CHECK_STRUCT_SIZE(struct xfs_scrub_metadata,	64);
	XFS_CHECK_STRUCT_SIZE(struct xfs_scrub_vec,		16);
	XFS_CHECK_STRUCT_SIZE(struct xfs_scrub_vec_head,	40);
}

#endif /* __XFS_ONDISK_H */
Loading