[XFS] update timestamp in xfs_ialloc manually
In xfs_ialloc we just want to set all timestamps to the current time. We don't need to mark the inode dirty like xfs_ichgtime does, and we don't need nor want the opimizations in xfs_ichgtime that I will introduce in the next patch. So just opencode the timestamp update in xfs_ialloc, and remove the new unused XFS_ICHGTIME_ACC case in xfs_ichgtime. SGI-PV: 981498 SGI-Modid: xfs-linux-melb:xfs-kern:31825a Signed-off-by: Christoph Hellwig <hch@infradead.org> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
This commit is contained in:
		
							parent
							
								
									ab4a9b04a3
								
							
						
					
					
						commit
						dff35fd41f
					
				| @ -89,12 +89,6 @@ xfs_mark_inode_dirty_sync( | ||||
|  * Change the requested timestamp in the given inode. | ||||
|  * We don't lock across timestamp updates, and we don't log them but | ||||
|  * we do record the fact that there is dirty information in core. | ||||
|  * | ||||
|  * NOTE -- callers MUST combine XFS_ICHGTIME_MOD or XFS_ICHGTIME_CHG | ||||
|  *		with XFS_ICHGTIME_ACC to be sure that access time | ||||
|  *		update will take.  Calling first with XFS_ICHGTIME_ACC | ||||
|  *		and then XFS_ICHGTIME_MOD may fail to modify the access | ||||
|  *		timestamp if the filesystem is mounted noacctm. | ||||
|  */ | ||||
| void | ||||
| xfs_ichgtime( | ||||
| @ -110,11 +104,6 @@ xfs_ichgtime( | ||||
| 		ip->i_d.di_mtime.t_sec = (__int32_t)tv.tv_sec; | ||||
| 		ip->i_d.di_mtime.t_nsec = (__int32_t)tv.tv_nsec; | ||||
| 	} | ||||
| 	if (flags & XFS_ICHGTIME_ACC) { | ||||
| 		inode->i_atime = tv; | ||||
| 		ip->i_d.di_atime.t_sec = (__int32_t)tv.tv_sec; | ||||
| 		ip->i_d.di_atime.t_nsec = (__int32_t)tv.tv_nsec; | ||||
| 	} | ||||
| 	if (flags & XFS_ICHGTIME_CHG) { | ||||
| 		inode->i_ctime = tv; | ||||
| 		ip->i_d.di_ctime.t_sec = (__int32_t)tv.tv_sec; | ||||
| @ -149,12 +138,6 @@ xfs_ichgtime_fast( | ||||
| { | ||||
| 	timespec_t	*tvp; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Atime updates for read() & friends are handled lazily now, and | ||||
| 	 * explicit updates must go through xfs_ichgtime() | ||||
| 	 */ | ||||
| 	ASSERT((flags & XFS_ICHGTIME_ACC) == 0); | ||||
| 
 | ||||
| 	if (flags & XFS_ICHGTIME_MOD) { | ||||
| 		tvp = &inode->i_mtime; | ||||
| 		ip->i_d.di_mtime.t_sec = (__int32_t)tvp->tv_sec; | ||||
|  | ||||
| @ -1048,6 +1048,7 @@ xfs_ialloc( | ||||
| 	xfs_inode_t	*ip; | ||||
| 	uint		flags; | ||||
| 	int		error; | ||||
| 	timespec_t	tv; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Call the space management code to pick | ||||
| @ -1128,7 +1129,13 @@ xfs_ialloc( | ||||
| 	ip->i_size = 0; | ||||
| 	ip->i_d.di_nextents = 0; | ||||
| 	ASSERT(ip->i_d.di_nblocks == 0); | ||||
| 	xfs_ichgtime(ip, XFS_ICHGTIME_CHG|XFS_ICHGTIME_ACC|XFS_ICHGTIME_MOD); | ||||
| 
 | ||||
| 	nanotime(&tv); | ||||
| 	ip->i_d.di_mtime.t_sec = (__int32_t)tv.tv_sec; | ||||
| 	ip->i_d.di_mtime.t_nsec = (__int32_t)tv.tv_nsec; | ||||
| 	ip->i_d.di_atime = ip->i_d.di_mtime; | ||||
| 	ip->i_d.di_ctime = ip->i_d.di_mtime; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * di_gen will have been taken care of in xfs_iread. | ||||
| 	 */ | ||||
|  | ||||
| @ -87,8 +87,7 @@ typedef struct xfs_ifork { | ||||
|  * Flags for xfs_ichgtime(). | ||||
|  */ | ||||
| #define	XFS_ICHGTIME_MOD	0x1	/* data fork modification timestamp */ | ||||
| #define	XFS_ICHGTIME_ACC	0x2	/* data fork access timestamp */ | ||||
| #define	XFS_ICHGTIME_CHG	0x4	/* inode field change timestamp */ | ||||
| #define	XFS_ICHGTIME_CHG	0x2	/* inode field change timestamp */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Per-fork incore inode flags. | ||||
|  | ||||
| @ -513,7 +513,6 @@ xfs_setattr( | ||||
| 			ip->i_d.di_atime.t_sec = iattr->ia_atime.tv_sec; | ||||
| 			ip->i_d.di_atime.t_nsec = iattr->ia_atime.tv_nsec; | ||||
| 			ip->i_update_core = 1; | ||||
| 			timeflags &= ~XFS_ICHGTIME_ACC; | ||||
| 		} | ||||
| 		if (mask & ATTR_MTIME) { | ||||
| 			inode->i_mtime = iattr->ia_mtime; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user