| 133 | } |
| 134 | |
| 135 | int |
| 136 | kern_sync(struct thread *td) |
| 137 | { |
| 138 | struct mount *mp, *nmp; |
| 139 | int save; |
| 140 | |
| 141 | mtx_lock(&mountlist_mtx); |
| 142 | for (mp = TAILQ_FIRST(&mountlist); mp != NULL; mp = nmp) { |
| 143 | if (vfs_busy(mp, MBF_NOWAIT | MBF_MNTLSTLOCK)) { |
| 144 | nmp = TAILQ_NEXT(mp, mnt_list); |
| 145 | continue; |
| 146 | } |
| 147 | if ((mp->mnt_flag & MNT_RDONLY) == 0 && |
| 148 | vn_start_write(NULL, &mp, V_NOWAIT) == 0) { |
| 149 | save = curthread_pflags_set(TDP_SYNCIO); |
| 150 | vfs_periodic(mp, MNT_NOWAIT); |
| 151 | VFS_SYNC(mp, MNT_NOWAIT); |
| 152 | curthread_pflags_restore(save); |
| 153 | vn_finished_write(mp); |
| 154 | } |
| 155 | mtx_lock(&mountlist_mtx); |
| 156 | nmp = TAILQ_NEXT(mp, mnt_list); |
| 157 | vfs_unbusy(mp); |
| 158 | } |
| 159 | mtx_unlock(&mountlist_mtx); |
| 160 | return (0); |
| 161 | } |
| 162 | |
| 163 | /* |
| 164 | * Sync each mounted filesystem. |
no test coverage detected