optimize XFS_IS_REALTIME_INODE w/o realtime config
PATCH 1/1 optimize XFS_IS_REALTIME_INODE w/o realtime config
Use XFS_IS_REALTIME_INODE in more places, and #define it to 0 if CONFIG_XFS_RT is off. This should be safe because mount checks in xfs_rtmount_init:
# define xfs_rtmount_init(m) (((mp)->m_sb.sb_rblocks == 0)? 0 : (ENOSYS))
so if we get mounted w/o CONFIG_XFS_RT, no realtime inodes should be encountered after that.
Defining XFS_IS_REALTIME_INODE to 0 saves a bit of stack space, presumeably gcc can optimize around the various "if (0)" type checks:
xfs_alloc_file_space -8xfs_bmap_adjacent -16xfs_bmapi -8xfs_bmap_rtalloc -16xfs_bunmapi -28xfs_free_file_space -64xfs_imap +8 <-- ? hmm.xfs_iomap_write_direct -12xfs_qm_dqusage_adjust -4xfs_qm_vop_chown_reserve -4
Compile tested only at this point.
fs/xfs/xfs_rtalloc.h +0 -2
@@ -21,8 +21,6 @@struct xfs_mount ;struct xfs_trans ; -#define XFS_IS_REALTIME_INODE (ip) ((ip)->i_d.di_flags & XFS_DIFLAG_REALTIME) -/* Min and max rt extent sizes, specified in bytes */ #define XFS_MAX_RTEXTSIZE (1024 * 1024 * 1024)/* 1GB */ #define XFS_DFL_RTEXTSIZE (64 * 1024)/* 64KB */
fs/xfs/linux-2.6/xfs_ioctl.c +1 -1
@@ -736,7 +736,7 @@ xfs_ioctl(case XFS_IOC_DIOINFO : {struct dioattr da;xfs_buftarg_t *target = - (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) ? +XFS_IS_REALTIME_INODE (ip) ? mp->m_rtdev_targp : mp->m_ddev_targp; da.d_mem = da.d_miniosz =1 << target->bt_sshift;
fs/xfs/linux-2.6/xfs_lrw.c +2 -2
@@ -220,7 +220,7 @@ xfs_read(if (unlikely (ioflags &IO_ISDIRECT )) {xfs_buftarg_t *target = - (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) ? +XFS_IS_REALTIME_INODE (ip) ? mp->m_rtdev_targp : mp->m_ddev_targp;if ((*offset & target->bt_smask) || (size & target->bt_smask)) {
@@ -694,7 +694,7 @@ start:if (ioflags &IO_ISDIRECT ) {xfs_buftarg_t *target = - (xip->i_d.di_flags &XFS_DIFLAG_REALTIME ) ? +XFS_IS_REALTIME_INODE (xip) ? mp->m_rtdev_targp : mp->m_ddev_targp;if ((pos & target->bt_smask) || (count & target->bt_smask)) {
fs/xfs/xfs_dfrag.c +1 -2
@@ -184,8 +184,7 @@ xfs_swap_extents( }/* Verify both files are either real-time or non-realtime */ -if ((ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) != - (tip->i_d.di_flags &XFS_DIFLAG_REALTIME )) { +if (XFS_IS_REALTIME_INODE (ip) !=XFS_IS_REALTIME_INODE (tip)) { error =XFS_ERROR (EINVAL ); goto error0; }
fs/xfs/xfs_iocore.c +1 -1
@@ -94,7 +94,7 @@ xfs_iocore_inode_reinit(xfs_iocore_t *io = &ip->i_iocore; io->io_flags =0 ; -if (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) +if (XFS_IS_REALTIME_INODE (ip)) io->io_flags |=XFS_IOCORE_RT ; io->io_dmevmask = ip->i_d.di_dmevmask; io->io_dmstate = ip->i_d.di_dmstate;
fs/xfs/xfs_rw.h +2 -2
@@ -58,7 +58,7 @@ struct xfs_mount;static inline xfs_daddr_t xfs_fsb_to_db (struct xfs_inode *ip,xfs_fsblock_t fsb) { -return (((ip)->i_d.di_flags &XFS_DIFLAG_REALTIME ) ? \ +return (XFS_IS_REALTIME_INODE (ip) ? \ (xfs_daddr_t )XFS_FSB_TO_BB ((ip)->i_mount, (fsb)) : \XFS_FSB_TO_DADDR ((ip)->i_mount, (fsb))); }
@@ -87,7 +87,7 @@ xfs_get_extsz_hint( {xfs_extlen_t extsz; -if (unlikely (ip->i_d.di_flags &XFS_DIFLAG_REALTIME )) { +if (unlikely (XFS_IS_REALTIME_INODE (ip))) { extsz = (ip->i_d.di_flags &XFS_DIFLAG_EXTSIZE ) ? ip->i_d.di_extsize : ip->i_mount->m_sb.sb_rextsize;
fs/xfs/xfs_vnodeops.c +6 -6
@@ -144,7 +144,7 @@ xfs_getattr(default : vap->va_rdev =0 ; -if (!(ip->i_d.di_flags &XFS_DIFLAG_REALTIME )) { +if (!(XFS_IS_REALTIME_INODE (ip))) { vap->va_blocksize =xfs_preferred_iosize (mp); }else {
@@ -521,7 +521,7 @@ xfs_setattr(*/ if ((ip->i_d.di_nextents || ip->i_delayed_blks) && (mask &XFS_AT_XFLAGS ) && - (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) != + (XFS_IS_REALTIME_INODE (ip)) != (vap->va_xflags &XFS_XFLAG_REALTIME )) { code =XFS_ERROR (EINVAL );/* EFBIG? */ goto error_return;
@@ -533,7 +533,7 @@ xfs_setattr(if ((mask &XFS_AT_EXTSIZE ) && vap->va_extsize !=0 ) {xfs_extlen_t size; -if ((ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) || +if (XFS_IS_REALTIME_INODE (ip) || ((mask &XFS_AT_XFLAGS ) && (vap->va_xflags &XFS_XFLAG_REALTIME ))) { size = mp->m_sb.sb_rextsize <<
@@ -1188,7 +1188,7 @@ xfs_fsync(* If this inode is on the RT dev we need to flush that * cache as well. */ -if (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) +if (XFS_IS_REALTIME_INODE (ip))xfs_blkdev_issue_flush (ip->i_mount->m_rtdev_targp); }
@@ -4263,7 +4263,7 @@ xfs_zero_remaining_bytes(int error =0 ; bp =xfs_buf_get_noaddr (mp->m_sb.sb_blocksize, - ip->i_d.di_flags &XFS_DIFLAG_REALTIME ? +XFS_IS_REALTIME_INODE (ip) ? mp->m_rtdev_targp : mp->m_ddev_targp);for (offset = startoff; offset <= endoff; offset = lastoffset +1 ) {
@@ -4360,7 +4360,7 @@ xfs_free_file_space( error =0 ;if (len <=0 )/* if nothing being freed */ return error; - rt = (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ); + rt =XFS_IS_REALTIME_INODE (ip); startoffset_fsb =XFS_B_TO_FSB (mp, offset); end_dmi_offset = offset + len; endoffset_fsb =XFS_B_TO_FSBT (mp, end_dmi_offset);
fs/xfs/xfs_dinode.h +6 -0
@@ -274,6 +274,12 @@ typedef enum xfs_dinode_fmt#define XFS_DIFLAG_NODEFRAG (1 << XFS_DIFLAG_NODEFRAG_BIT)#define XFS_DIFLAG_FILESTREAM (1 << XFS_DIFLAG_FILESTREAM_BIT) +#ifdef CONFIG_XFS_RT +#define XFS_IS_REALTIME_INODE (ip) ((ip)->i_d.di_flags & XFS_DIFLAG_REALTIME) +#else +#define XFS_IS_REALTIME_INODE (ip) (0) +#endif +#define XFS_DIFLAG_ANY \ (XFS_DIFLAG_REALTIME | XFS_DIFLAG_PREALLOC | XFS_DIFLAG_NEWRTBM | \ XFS_DIFLAG_IMMUTABLE | XFS_DIFLAG_APPEND | XFS_DIFLAG_SYNC | \
Quoted 4 lines · Eric Sandeen
Use
XFS_IS_REALTIME_INODEin more places, and #define it to 0 ifCONFIG_XFS_RTis off. This should be safe because mount checks inxfs_rtmount_init:
Quoted 8 lines
# define xfs_rtmount_init(m) (((mp)->m_sb.sb_rblocks == 0)? 0 : (ENOSYS))so if we get mounted w/o
CONFIG_XFS_RT, no realtime inodes should be encountered after that.Defining
XFS_IS_REALTIME_INODEto 0 saves a bit of stack space, presumeably gcc can optimize around the various "if (0)" type checks:
Looks good to me.
Not sure if anyone disables the rt volume, but as long as it's a config option we should try to avoid as much as possible away if it's not enabled.
Quoted 10 lines · Christoph Hellwig
Quoted 9 lines · Eric Sandeen
Use
XFS_IS_REALTIME_INODEin more places, and #define it to 0 ifCONFIG_XFS_RTis off. This should be safe because mount checks inxfs_rtmount_init:# define xfs_rtmount_init(m) (((mp)->m_sb.sb_rblocks == 0)? 0 : (ENOSYS))so if we get mounted w/o
CONFIG_XFS_RT, no realtime inodes should be encountered after that.
Quoted 9 lines
Quoted 3 lines
Defining
XFS_IS_REALTIME_INODEto 0 saves a bit of stack space, presumeably gcc can optimize around the various "if (0)" type checks:Looks good to me.
Not sure if anyone disables the rt volume, but as long as it's a config option we should try to avoid as much as possible away if it's not enabled.
Fedora does :)
-Eric
Quoted 24 lines · Eric Sandeen
Use
XFS_IS_REALTIME_INODEin more places, and #define it to 0 ifCONFIG_XFS_RTis off. This should be safe because mount checks inxfs_rtmount_init:# define xfs_rtmount_init(m) (((mp)->m_sb.sb_rblocks == 0)? 0 : (ENOSYS))so if we get mounted w/o
CONFIG_XFS_RT, no realtime inodes should be encountered after that.Defining
XFS_IS_REALTIME_INODEto 0 saves a bit of stack space, presumeably gcc can optimize around the various "if (0)" type checks:
xfs_alloc_file_space-8xfs_bmap_adjacent-16xfs_bmapi-8xfs_bmap_rtalloc-16xfs_bunmapi-28xfs_free_file_space-64xfs_imap+8 <-- ? hmm.xfs_iomap_write_direct-12xfs_qm_dqusage_adjust-4xfs_qm_vop_chown_reserve-4
Quoted 1 line
Compile tested only at this point.
This misses a bunch of tests (at least in the current tot) in xfs_bmap.c, xfs_bmap_btree.c, xfs_iget.c, dmapi/xfs_dm.c and linux-2.6/xfs_lrw.c. I think they are all in assert statements, but shoul dbe cleaned up as well.
Cheers,
Dave.
Signature · 3 lines
Dave Chinner Principal Engineer SGI Australian Software Group
PATCH v2 1/1 optimize XFS_IS_REALTIME_INODE w/o realtime config
Quoted 10 lines · David Chinner
This misses a bunch of tests (at least in the current tot) in
xfs_bmap.c,xfs_bmap_btree.c,xfs_iget.c,dmapi/xfs_dm.candlinux-2.6/xfs_lrw.c. I think they are all in assert statements, but shoul dbe cleaned up as well.Cheers,
Dave.
Yup, sorry. Here you go:
---------------
Use XFS_IS_REALTIME_INODE in more places, and #define it to 0 if CONFIG_XFS_RT is off. This should be safe because mount checks in xfs_rtmount_init:
# define xfs_rtmount_init(m) (((mp)->m_sb.sb_rblocks == 0)? 0 : (ENOSYS))
so if we get mounted w/o CONFIG_XFS_RT, no realtime inodes should be encountered after that.
Defining XFS_IS_REALTIME_INODE to 0 saves a bit of stack space, presumeably gcc can optimize around the various "if (0)" type checks:
xfs_alloc_file_space -8xfs_bmap_adjacent -16xfs_bmapi -8xfs_bmap_rtalloc -16xfs_bunmapi -28xfs_free_file_space -64xfs_imap +8 <-- ? hmm.xfs_iomap_write_direct -12xfs_qm_dqusage_adjust -4xfs_qm_vop_chown_reserve -4
fs/xfs/xfs_rtalloc.h +0 -2
@@ -21,8 +21,6 @@struct xfs_mount ;struct xfs_trans ; -#define XFS_IS_REALTIME_INODE (ip) ((ip)->i_d.di_flags & XFS_DIFLAG_REALTIME) -/* Min and max rt extent sizes, specified in bytes */ #define XFS_MAX_RTEXTSIZE (1024 * 1024 * 1024)/* 1GB */ #define XFS_DFL_RTEXTSIZE (64 * 1024)/* 64KB */
fs/xfs/linux-2.6/xfs_ioctl.c +1 -1
@@ -758,7 +758,7 @@ xfs_ioctl(case XFS_IOC_DIOINFO : {struct dioattr da;xfs_buftarg_t *target = - (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) ? +XFS_IS_REALTIME_INODE (ip) ? mp->m_rtdev_targp : mp->m_ddev_targp; da.d_mem = da.d_miniosz =1 << target->bt_sshift;
fs/xfs/linux-2.6/xfs_lrw.c +3 -3
@@ -216,7 +216,7 @@ xfs_read(if (unlikely (ioflags &IO_ISDIRECT )) {xfs_buftarg_t *target = - (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) ? +XFS_IS_REALTIME_INODE (ip) ? mp->m_rtdev_targp : mp->m_ddev_targp;if ((*offset & target->bt_smask) || (size & target->bt_smask)) {
@@ -735,7 +735,7 @@ start:if (ioflags &IO_ISDIRECT ) {xfs_buftarg_t *target = - (xip->i_d.di_flags &XFS_DIFLAG_REALTIME ) ? +XFS_IS_REALTIME_INODE (xip) ? mp->m_rtdev_targp : mp->m_ddev_targp;if ((pos & target->bt_smask) || (count & target->bt_smask)) {
@@ -976,7 +976,7 @@ xfs_bmap(xfs_iocore_t *io = &ip->i_iocore;ASSERT ((ip->i_d.di_mode &S_IFMT ) ==S_IFREG ); -ASSERT (((ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) !=0 ) == +ASSERT ((XFS_IS_REALTIME_INODE (ip) !=0 ) == ((ip->i_iocore.io_flags &XFS_IOCORE_RT ) !=0 ));return xfs_iomap (io, offset, count, flags, iomapp, niomaps);
fs/xfs/xfs_dfrag.c +1 -2
@@ -185,8 +185,7 @@ xfs_swap_extents( }/* Verify both files are either real-time or non-realtime */ -if ((ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) != - (tip->i_d.di_flags &XFS_DIFLAG_REALTIME )) { +if (XFS_IS_REALTIME_INODE (ip) !=XFS_IS_REALTIME_INODE (tip)) { error =XFS_ERROR (EINVAL ); goto error0; }
fs/xfs/xfs_iocore.c +1 -1
@@ -94,7 +94,7 @@ xfs_iocore_inode_reinit(xfs_iocore_t *io = &ip->i_iocore; io->io_flags =0 ; -if (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) +if (XFS_IS_REALTIME_INODE (ip)) io->io_flags |=XFS_IOCORE_RT ; io->io_dmevmask = ip->i_d.di_dmevmask; io->io_dmstate = ip->i_d.di_dmstate;
fs/xfs/xfs_rw.h +2 -2
@@ -32,7 +32,7 @@ struct xfs_mount;static inline xfs_daddr_t xfs_fsb_to_db (struct xfs_inode *ip,xfs_fsblock_t fsb) { -return (((ip)->i_d.di_flags &XFS_DIFLAG_REALTIME ) ? \ +return (XFS_IS_REALTIME_INODE (ip) ? \ (xfs_daddr_t )XFS_FSB_TO_BB ((ip)->i_mount, (fsb)) : \XFS_FSB_TO_DADDR ((ip)->i_mount, (fsb))); }
@@ -61,7 +61,7 @@ xfs_get_extsz_hint( {xfs_extlen_t extsz; -if (unlikely (ip->i_d.di_flags &XFS_DIFLAG_REALTIME )) { +if (unlikely (XFS_IS_REALTIME_INODE (ip))) { extsz = (ip->i_d.di_flags &XFS_DIFLAG_EXTSIZE ) ? ip->i_d.di_extsize : ip->i_mount->m_sb.sb_rextsize;
fs/xfs/xfs_vnodeops.c +6 -6
@@ -136,7 +136,7 @@ xfs_getattr(default : vap->va_rdev =0 ; -if (!(ip->i_d.di_flags &XFS_DIFLAG_REALTIME )) { +if (!(XFS_IS_REALTIME_INODE (ip))) { vap->va_blocksize =xfs_preferred_iosize (mp); }else {
@@ -508,7 +508,7 @@ xfs_setattr(*/ if ((ip->i_d.di_nextents || ip->i_delayed_blks) && (mask &XFS_AT_XFLAGS ) && - (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) != + (XFS_IS_REALTIME_INODE (ip)) != (vap->va_xflags &XFS_XFLAG_REALTIME )) { code =XFS_ERROR (EINVAL );/* EFBIG? */ goto error_return;
@@ -520,7 +520,7 @@ xfs_setattr(if ((mask &XFS_AT_EXTSIZE ) && vap->va_extsize !=0 ) {xfs_extlen_t size; -if ((ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) || +if (XFS_IS_REALTIME_INODE (ip) || ((mask &XFS_AT_XFLAGS ) && (vap->va_xflags &XFS_XFLAG_REALTIME ))) { size = mp->m_sb.sb_rextsize <<
@@ -1146,7 +1146,7 @@ xfs_fsync(* If this inode is on the RT dev we need to flush that * cache as well. */ -if (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) +if (XFS_IS_REALTIME_INODE (ip))xfs_blkdev_issue_flush (ip->i_mount->m_rtdev_targp); }
@@ -4068,7 +4068,7 @@ xfs_zero_remaining_bytes(int error =0 ; bp =xfs_buf_get_noaddr (mp->m_sb.sb_blocksize, - ip->i_d.di_flags &XFS_DIFLAG_REALTIME ? +XFS_IS_REALTIME_INODE (ip) ? mp->m_rtdev_targp : mp->m_ddev_targp);for (offset = startoff; offset <= endoff; offset = lastoffset +1 ) {
@@ -4165,7 +4165,7 @@ xfs_free_file_space( error =0 ;if (len <=0 )/* if nothing being freed */ return error; - rt = (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ); + rt =XFS_IS_REALTIME_INODE (ip); startoffset_fsb =XFS_B_TO_FSB (mp, offset); end_dmi_offset = offset + len; endoffset_fsb =XFS_B_TO_FSBT (mp, end_dmi_offset);
fs/xfs/xfs_dinode.h +6 -0
@@ -273,6 +273,12 @@ typedef enum xfs_dinode_fmt#define XFS_DIFLAG_NODEFRAG (1 << XFS_DIFLAG_NODEFRAG_BIT)#define XFS_DIFLAG_FILESTREAM (1 << XFS_DIFLAG_FILESTREAM_BIT) +#ifdef CONFIG_XFS_RT +#define XFS_IS_REALTIME_INODE (ip) ((ip)->i_d.di_flags & XFS_DIFLAG_REALTIME) +#else +#define XFS_IS_REALTIME_INODE (ip) (0) +#endif +#define XFS_DIFLAG_ANY \ (XFS_DIFLAG_REALTIME | XFS_DIFLAG_PREALLOC | XFS_DIFLAG_NEWRTBM | \ XFS_DIFLAG_IMMUTABLE | XFS_DIFLAG_APPEND | XFS_DIFLAG_SYNC | \
fs/xfs/dmapi/xfs_dm.c +1 -1
@@ -1107,7 +1107,7 @@ xfs_dm_direct_ok(/* Realtime files can ONLY do direct I/O. */ -if (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) +if (XFS_IS_REALTIME_INODE (ip))return (1 );/* If direct I/O is disabled, or if the request is too small, use
fs/xfs/xfs_bmap.c +2 -3
@@ -2969,7 +2969,7 @@ STATIC intxfs_bmap_alloc ( xfs_bmalloca_t *ap) /* bmap alloc argument struct */ { -if ((ap->ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) && ap->userdata) +if (XFS_IS_REALTIME_INODE (ap->ip) && ap->userdata)return xfs_bmap_rtalloc (ap);return xfs_bmap_btalloc (ap); }
@@ -3096,8 +3096,7 @@ xfs_bmap_del_extent(/* * Realtime allocation. Free it and record di_nblocks update. */ -if (whichfork ==XFS_DATA_FORK && - (ip->i_d.di_flags &XFS_DIFLAG_REALTIME )) { +if (whichfork ==XFS_DATA_FORK &&XFS_IS_REALTIME_INODE (ip)) {xfs_fsblock_t bno;xfs_filblks_t len;
fs/xfs/xfs_bmap_btree.c +1 -2
@@ -2062,8 +2062,7 @@ xfs_bmbt_insert( pcur->bc_private.b.allocated; pcur->bc_private.b.allocated =0 ;ASSERT ((cur->bc_private.b.firstblock !=NULLFSBLOCK ) || - (cur->bc_private.b.ip->i_d.di_flags & -XFS_DIFLAG_REALTIME )); +XFS_IS_REALTIME_INODE (cur->bc_private.b.ip)); cur->bc_private.b.firstblock = pcur->bc_private.b.firstblock; ASSERT(cur->bc_private.b.flist ==
fs/xfs/xfs_iget.c +1 -1
@@ -333,7 +333,7 @@ finish_inode:ASSERT (ip->i_df.if_ext_max ==XFS_IFORK_DSIZE (ip) /sizeof (xfs_bmbt_rec_t)); -ASSERT (((ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) !=0 ) == +ASSERT ((XFS_IS_REALTIME_INODE (ip) !=0 ) == ((ip->i_iocore.io_flags &XFS_IOCORE_RT ) !=0 ));xfs_iflags_set (ip,XFS_IMODIFIED );
fs/xfs/xfs_inode.c +1 -1
@@ -1298,7 +1298,7 @@ xfs_isize_check(if ((ip->i_d.di_mode &S_IFMT ) !=S_IFREG )return ; -if (ip->i_d.di_flags & (XFS_DIFLAG_REALTIME |XFS_DIFLAG_EXTSIZE )) +if (XFS_IS_REALTIME_INODE (ip) || (ip->i_d.di_flags &XFS_DIFLAG_EXTSIZE ))return ; nimaps =2 ;
PATCH v3 1/1 optimize XFS_IS_REALTIME_INODE w/o realtime config
Try again.. :)
-------------
Use XFS_IS_REALTIME_INODE in more places, and #define it to 0 if CONFIG_XFS_RT is off. This should be safe because mount checks in xfs_rtmount_init:
# define xfs_rtmount_init(m) (((mp)->m_sb.sb_rblocks == 0)? 0 : (ENOSYS))
so if we get mounted w/o CONFIG_XFS_RT, no realtime inodes should be encountered after that.
Defining XFS_IS_REALTIME_INODE to 0 saves a bit of stack space, presumeably gcc can optimize around the various "if (0)" type checks:
xfs_alloc_file_space -8xfs_bmap_adjacent -16xfs_bmapi -8xfs_bmap_rtalloc -16xfs_bunmapi -28xfs_free_file_space -64xfs_imap +8 <-- ? hmm.xfs_iomap_write_direct -12xfs_qm_dqusage_adjust -4xfs_qm_vop_chown_reserve -4
fs/xfs/xfs_rtalloc.h +0 -1
@@ -21,8 +21,6 @@struct xfs_mount ;struct xfs_trans ; -#define XFS_IS_REALTIME_INODE (ip) ((ip)->i_d.di_flags &
XFS_DIFLAG_REALTIME)
-
/* Min and max rt extent sizes, specified in bytes */
#define XFS_MAX_RTEXTSIZE (1024 * 1024 * 1024) /* 1GB */
#define XFS_DFL_RTEXTSIZE (64 * 1024) /* 64KB */
fs/xfs/linux-2.6/xfs_ioctl.c +1 -1
@@ -741,7 +741,7 @@ xfs_ioctl(case XFS_IOC_DIOINFO : {struct dioattr da;xfs_buftarg_t *target = - (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) ? +XFS_IS_REALTIME_INODE (ip) ? mp->m_rtdev_targp : mp->m_ddev_targp; da.d_mem = da.d_miniosz =1 << target->bt_sshift;
fs/xfs/linux-2.6/xfs_lrw.c +2 -2
@@ -213,7 +213,7 @@ xfs_read(if (unlikely (ioflags &IO_ISDIRECT )) {xfs_buftarg_t *target = - (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) ? +XFS_IS_REALTIME_INODE (ip) ? mp->m_rtdev_targp : mp->m_ddev_targp;if ((*offset & target->bt_smask) || (size & target->bt_smask)) {
@@ -668,7 +668,7 @@ start:if (ioflags &IO_ISDIRECT ) {xfs_buftarg_t *target = - (xip->i_d.di_flags &XFS_DIFLAG_REALTIME ) ? +XFS_IS_REALTIME_INODE (xip) ? mp->m_rtdev_targp : mp->m_ddev_targp;if ((pos & target->bt_smask) || (count & target->bt_smask)) {
fs/xfs/xfs_dfrag.c +1 -2
@@ -185,8 +185,7 @@ xfs_swap_extents( }/* Verify both files are either real-time or non-realtime */ -if ((ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) != - (tip->i_d.di_flags &XFS_DIFLAG_REALTIME )) { +if (XFS_IS_REALTIME_INODE (ip) !=XFS_IS_REALTIME_INODE (tip)) { error =XFS_ERROR (EINVAL ); goto error0; }
fs/xfs/xfs_rw.h +2 -2
@@ -32,7 +32,7 @@ struct xfs_mount;static inline xfs_daddr_t xfs_fsb_to_db (struct xfs_inode *ip,xfs_fsblock_t fsb) { -return (((ip)->i_d.di_flags &XFS_DIFLAG_REALTIME ) ? \ +return (XFS_IS_REALTIME_INODE (ip) ? \ (xfs_daddr_t )XFS_FSB_TO_BB ((ip)->i_mount, (fsb)) : \XFS_FSB_TO_DADDR ((ip)->i_mount, (fsb))); }
@@ -53,7 +53,7 @@ xfs_get_extsz_hint( {xfs_extlen_t extsz; -if (unlikely (ip->i_d.di_flags &XFS_DIFLAG_REALTIME )) { +if (unlikely (XFS_IS_REALTIME_INODE (ip))) { extsz = (ip->i_d.di_flags &XFS_DIFLAG_EXTSIZE ) ? ip->i_d.di_extsize : ip->i_mount->m_sb.sb_rextsize;
fs/xfs/xfs_vnodeops.c +6 -6
@@ -136,7 +136,7 @@ xfs_getattr(default : vap->va_rdev =0 ; -if (!(ip->i_d.di_flags &XFS_DIFLAG_REALTIME )) { +if (!(XFS_IS_REALTIME_INODE (ip))) { vap->va_blocksize =xfs_preferred_iosize (mp); }else {
@@ -508,7 +508,7 @@ xfs_setattr(*/ if ((ip->i_d.di_nextents || ip->i_delayed_blks) && (mask &XFS_AT_XFLAGS ) && - (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) != + (XFS_IS_REALTIME_INODE (ip)) != (vap->va_xflags &XFS_XFLAG_REALTIME )) { code =XFS_ERROR (EINVAL );/* EFBIG? */ goto error_return;
@@ -520,7 +520,7 @@ xfs_setattr(if ((mask &XFS_AT_EXTSIZE ) && vap->va_extsize !=0 ) {xfs_extlen_t size; -if ((ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) || +if (XFS_IS_REALTIME_INODE (ip) || ((mask &XFS_AT_XFLAGS ) && (vap->va_xflags &XFS_XFLAG_REALTIME ))) { size = mp->m_sb.sb_rextsize <<
@@ -1144,7 +1144,7 @@ xfs_fsync(* If this inode is on the RT dev we need to flush that * cache as well. */ -if (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) +if (XFS_IS_REALTIME_INODE (ip))xfs_blkdev_issue_flush (ip->i_mount->m_rtdev_targp); }
@@ -4044,7 +4044,7 @@ xfs_zero_remaining_bytes(int error =0 ; bp =xfs_buf_get_noaddr (mp->m_sb.sb_blocksize, - ip->i_d.di_flags &XFS_DIFLAG_REALTIME ? +XFS_IS_REALTIME_INODE (ip) ? mp->m_rtdev_targp : mp->m_ddev_targp);for (offset = startoff; offset <= endoff; offset = lastoffset +1 ) {
@@ -4141,7 +4141,7 @@ xfs_free_file_space( error =0 ;if (len <=0 )/* if nothing being freed */ return error; - rt = (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ); + rt =XFS_IS_REALTIME_INODE (ip); startoffset_fsb =XFS_B_TO_FSB (mp, offset); end_dmi_offset = offset + len; endoffset_fsb =XFS_B_TO_FSBT (mp, end_dmi_offset);
fs/xfs/xfs_dinode.h +2 -0
@@ -273,6 +273,12 @@ typedef enum xfs_dinode_fmt#define XFS_DIFLAG_NODEFRAG (1 << XFS_DIFLAG_NODEFRAG_BIT)#define XFS_DIFLAG_FILESTREAM (1 << XFS_DIFLAG_FILESTREAM_BIT) +#ifdef CONFIG_XFS_RT +#define XFS_IS_REALTIME_INODE (ip) ((ip)->i_d.di_flags &
XFS_DIFLAG_REALTIME)
+#else
+#define XFS_IS_REALTIME_INODE(ip) (0)
+#endif
+
#define XFS_DIFLAG_ANY \
(XFS_DIFLAG_REALTIME | XFS_DIFLAG_PREALLOC | XFS_DIFLAG_NEWRTBM | \
XFS_DIFLAG_IMMUTABLE | XFS_DIFLAG_APPEND | XFS_DIFLAG_SYNC | \
fs/xfs/dmapi/xfs_dm.c +1 -1
@@ -1045,7 +1045,7 @@ xfs_dm_direct_ok(/* Realtime files can ONLY do direct I/O. */ -if (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) +if (XFS_IS_REALTIME_INODE (ip))return (1 );/* If direct I/O is disabled, or if the request is too small, use
fs/xfs/xfs_bmap.c +2 -3
@@ -2969,7 +2969,7 @@ STATIC intxfs_bmap_alloc ( xfs_bmalloca_t *ap) /* bmap alloc argument struct */ { -if ((ap->ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) && ap->userdata) +if (XFS_IS_REALTIME_INODE (ap->ip) && ap->userdata)return xfs_bmap_rtalloc (ap);return xfs_bmap_btalloc (ap); }
@@ -3096,8 +3096,7 @@ xfs_bmap_del_extent(/* * Realtime allocation. Free it and record di_nblocks update. */ -if (whichfork ==XFS_DATA_FORK && - (ip->i_d.di_flags &XFS_DIFLAG_REALTIME )) { +if (whichfork ==XFS_DATA_FORK &&XFS_IS_REALTIME_INODE (ip)) {xfs_fsblock_t bno;xfs_filblks_t len;
fs/xfs/xfs_bmap_btree.c +1 -2
@@ -2062,8 +2062,7 @@ xfs_bmbt_insert( pcur->bc_private.b.allocated; pcur->bc_private.b.allocated =0 ;ASSERT ((cur->bc_private.b.firstblock !=NULLFSBLOCK ) || - (cur->bc_private.b.ip->i_d.di_flags & -XFS_DIFLAG_REALTIME )); +XFS_IS_REALTIME_INODE (cur->bc_private.b.ip)); cur->bc_private.b.firstblock = pcur->bc_private.b.firstblock; ASSERT(cur->bc_private.b.flist ==
fs/xfs/xfs_inode.c +1 -1
@@ -1296,7 +1296,7 @@ xfs_isize_check(if ((ip->i_d.di_mode &S_IFMT ) !=S_IFREG )return ; -if (ip->i_d.di_flags & (XFS_DIFLAG_REALTIME |XFS_DIFLAG_EXTSIZE )) +if (XFS_IS_REALTIME_INODE (ip) || (ip->i_d.di_flags &XFS_DIFLAG_EXTSIZE ))return ; nimaps =2 ;
fs/xfs/linux-2.6/xfs_aops.c +1 -1
@@ -113,7 +113,7 @@ xfs_find_bdev_for_inode( {struct xfs_mount *mp = ip->i_mount; -if (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) +if (XFS_IS_REALTIME_INODE (ip))return mp->m_rtdev_targp->bt_bdev;else return mp->m_ddev_targp->bt_bdev;
fs/xfs/linux-2.6/xfs_iops.c +1 -1
@@ -597,7 +597,7 @@ xfs_vn_getattr( sysv_minor(ip->i_df.if_u2.if_rdev));break ;default : -if (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) { +if (XFS_IS_REALTIME_INODE (ip)) {/* * If the file blocks are being allocated from a * realtime volume, then return the inode's realtime
fs/xfs/xfs_iomap.c +6 -6
@@ -141,7 +141,7 @@ xfs_imap_to_bmap( iomapp->iomap_bsize =XFS_FSB_TO_B (mp, imap->br_blockcount); iomapp->iomap_flags = flags; -if (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) { +if (XFS_IS_REALTIME_INODE (ip)) { iomapp->iomap_flags |=IOMAP_REALTIME ; iomapp->iomap_target = mp->m_rtdev_targp; }else {
@@ -298,7 +298,7 @@ xfs_iomap_eof_align_last_fsb(xfs_extlen_t align;int eof, error; -if (ip->i_d.di_flags &XFS_DIFLAG_REALTIME ) +if (XFS_IS_REALTIME_INODE (ip)) ;/* * If mounted with the "-o swalloc" option, roundup the allocation
@@ -524,7 +524,7 @@ xfs_iomap_write_direct( }if (unlikely (!imap.br_startblock && - !(ip->i_d.di_flags &XFS_DIFLAG_REALTIME ))) { + !(XFS_IS_REALTIME_INODE (ip)))) { error =xfs_cmn_err_fsblock_zero (ip, &imap); goto error_out; }
@@ -687,7 +687,7 @@ retry: }if (unlikely (!imap[0 ].br_startblock && - !(ip->i_d.di_flags &XFS_DIFLAG_REALTIME ))) + !(XFS_IS_REALTIME_INODE (ip))))return xfs_cmn_err_fsblock_zero (ip, &imap[0 ]); *ret_imap = imap[0 ];
@@ -809,7 +809,7 @@ xfs_iomap_write_allocate(*/ for (i =0 ; i < nimaps; i++) {if (unlikely (!imap[i].br_startblock && - !(ip->i_d.di_flags &XFS_DIFLAG_REALTIME ))) + !(XFS_IS_REALTIME_INODE (ip))))return xfs_cmn_err_fsblock_zero (ip, &imap[i]); if ((offset_fsb >= imap[i].br_startoff) && (offset_fsb < (imap[i].br_startoff +
@@ -907,7 +907,7 @@ xfs_iomap_write_unwritten(return XFS_ERROR (error);if (unlikely (!imap.br_startblock && - !(ip->i_d.di_flags &XFS_DIFLAG_REALTIME ))) + !(XFS_IS_REALTIME_INODE (ip))))return xfs_cmn_err_fsblock_zero (ip, &imap);if ((numblks_fsb = imap.br_blockcount) ==0 ) {