FreeBSD Bugzilla – Attachment 1612 Details for
Bug 5577
Unnecessary disk I/O and noatime ffs fixes
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
file.diff
file.diff (text/plain), 4.25 KB, created by
Craig Leres
on 1998-01-27 03:10:01 UTC
(
hide
)
Description:
file.diff
Filename:
MIME Type:
Creator:
Craig Leres
Created:
1998-01-27 03:10:01 UTC
Size:
4.25 KB
patch
obsolete
>diff -c -r1.2 ffs_inode.c >*** /tmp/,RCSt1001826 Mon Jan 26 16:19:12 1998 >--- ffs_inode.c Mon Jan 26 16:02:06 1998 >*************** >*** 98,107 **** > ~(IN_ACCESS | IN_CHANGE | IN_MODIFIED | IN_UPDATE); > return (0); > } >! if ((ap->a_vp->v_mount->mnt_flag & MNT_NOATIME) && >! (ip->i_flag & (IN_CHANGE|IN_MODIFIED|IN_UPDATE) == 0)) { > ip->i_flag &=~ IN_ACCESS; >- return (0); > } > if ((ip->i_flag & > (IN_ACCESS | IN_CHANGE | IN_MODIFIED | IN_UPDATE)) == 0) >--- 98,105 ---- > ~(IN_ACCESS | IN_CHANGE | IN_MODIFIED | IN_UPDATE); > return (0); > } >! if (ap->a_vp->v_mount->mnt_flag & MNT_NOATIME) { > ip->i_flag &=~ IN_ACCESS; > } > if ((ip->i_flag & > (IN_ACCESS | IN_CHANGE | IN_MODIFIED | IN_UPDATE)) == 0) >RCS file: RCS/ffs_vfsops.c,v >retrieving revision 1.2 >diff -c -r1.2 ffs_vfsops.c >*** /tmp/,RCSt1001831 Mon Jan 26 16:19:18 1998 >--- ffs_vfsops.c Mon Jan 26 16:08:03 1998 >*************** >*** 780,785 **** >--- 780,786 ---- > register struct fs *fs; > struct timeval tv; > int error, allerror = 0, didsomething = 0; >+ u_long fmask; > > fs = ump->um_fs; > /* >*************** >*** 799,804 **** >--- 800,808 ---- > /* > * Write back each (modified) inode. > */ >+ fmask = (mp->mnt_flag & MNT_NOATIME)? >+ (IN_CHANGE | IN_MODIFIED | IN_UPDATE) : >+ (IN_CHANGE | IN_MODIFIED | IN_UPDATE | IN_ACCESS); > loop: > for (vp = mp->mnt_vnodelist.lh_first; vp != NULL; vp = nvp) { > /* >*************** >*** 817,835 **** > if (VOP_ISLOCKED(vp)) > continue; > ip = VTOI(vp); >! if ((((ip->i_flag & >! (IN_ACCESS | IN_CHANGE | IN_MODIFIED | IN_UPDATE)) == 0)) && > vp->v_dirtyblkhd.lh_first == NULL) > continue; >- didsomething = 1; > if (vp->v_type != VCHR) { > if (vget(vp, 1)) > goto loop; > error = VOP_FSYNC(vp, cred, waitfor, p); > if (error) > allerror = error; > vput(vp); > } else { > tv = time; > /* VOP_UPDATE(vp, &tv, &tv, waitfor == MNT_WAIT); */ > VOP_UPDATE(vp, &tv, &tv, 0); >--- 821,853 ---- > if (VOP_ISLOCKED(vp)) > continue; > ip = VTOI(vp); >! if ((((ip->i_flag & fmask) == 0)) && > vp->v_dirtyblkhd.lh_first == NULL) > continue; > if (vp->v_type != VCHR) { > if (vget(vp, 1)) > goto loop; >+ ++didsomething; > error = VOP_FSYNC(vp, cred, waitfor, p); > if (error) > allerror = error; > vput(vp); > } else { >+ /* XXX >+ * if we're not keeping track of access time >+ * (which means we're trying to minimize disk >+ * activity) and the inode hasn't been modified >+ * & it's for a non-disk device, update the >+ * in-memory mtime/ctime but don't bother to >+ * update the on-disk ones. >+ */ >+ if ((fmask & IN_ACCESS) == 0 && >+ (ip->i_flag & IN_MODIFIED) == 0 && >+ !isdisk(vp->v_specinfo->si_rdev, VCHR)) { >+ ITIMES(ip, &time, &time) >+ continue; >+ } >+ ++didsomething; > tv = time; > /* VOP_UPDATE(vp, &tv, &tv, waitfor == MNT_WAIT); */ > VOP_UPDATE(vp, &tv, &tv, 0); >RCS file: RCS/ffs_vnops.c,v >retrieving revision 1.2 >diff -c -r1.2 ffs_vnops.c >*** /tmp/,RCSt1001836 Mon Jan 26 16:19:25 1998 >--- ffs_vnops.c Mon Jan 26 16:11:53 1998 >*************** >*** 243,251 **** > > #include <ufs/ufs/ufs_readwrite.c> > >- int ffs_log_sync = 0; >- >- > /* > * Synch an open file. > */ >--- 243,248 ---- >*************** >*** 266,276 **** > int pass; > int s; > >- if (ffs_log_sync) { >- struct inode* ip = VTOI(vp); >- printf("fsync i %u iflags 0x%x vn 0x%x vtype %d tag %d vflags 0x%x\n", >- ip->i_number, ip->i_flag, vp, vp->v_type, vp->v_tag, vp->v_flag); >- } > pass = 0; > /* > * Flush all dirty buffers associated with a vnode. >--- 263,268 ---- >*************** >*** 284,293 **** > if ((bp->b_flags & B_DELWRI) == 0) > panic("ffs_fsync: not dirty"); > >- if (ffs_log_sync) { >- printf(" blk %u (%u) flags 0x%x vn 0x%x\n", bp->b_lblkno, bp->b_blkno, >- bp->b_flags, bp->b_vp); >- } > if (bp->b_vp != vp || ap->a_waitfor != MNT_NOWAIT) { > > bremfree(bp); >--- 276,281 ---- >*************** >*** 330,334 **** > } > > tv = time; >! return (VOP_UPDATE(ap->a_vp, &tv, &tv, ap->a_waitfor == MNT_WAIT)); > } >--- 318,326 ---- > } > > tv = time; >! /* >! * Don't defer flushing this inode or else we will end >! * up with new I/O activity on the next sync. >! */ >! return (VOP_UPDATE(ap->a_vp, &tv, &tv, 1)); > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 5577
: 1612