Changeset View
Changeset View
Standalone View
Standalone View
sys/fs/nfsclient/nfs_clvfsops.c
Show First 20 Lines • Show All 1,494 Lines • ▼ Show 20 Lines | #endif | ||||
} | } | ||||
nmp->nm_sockreq.nr_cred = crhold(cred); | nmp->nm_sockreq.nr_cred = crhold(cred); | ||||
mtx_init(&nmp->nm_sockreq.nr_mtx, "nfssock", NULL, MTX_DEF); | mtx_init(&nmp->nm_sockreq.nr_mtx, "nfssock", NULL, MTX_DEF); | ||||
mp->mnt_data = nmp; | mp->mnt_data = nmp; | ||||
nmp->nm_getinfo = nfs_getnlminfo; | nmp->nm_getinfo = nfs_getnlminfo; | ||||
nmp->nm_vinvalbuf = ncl_vinvalbuf; | nmp->nm_vinvalbuf = ncl_vinvalbuf; | ||||
} | } | ||||
vfs_getnewfsid(mp); | vfs_getnewfsid(mp); | ||||
MNT_ILOCK(mp); | |||||
mp->mnt_kern_flag |= MNTK_USES_BCACHE; | |||||
MNT_IUNLOCK(mp); | |||||
nmp->nm_mountp = mp; | nmp->nm_mountp = mp; | ||||
mtx_init(&nmp->nm_mtx, "NFSmount lock", NULL, MTX_DEF | MTX_DUPOK); | mtx_init(&nmp->nm_mtx, "NFSmount lock", NULL, MTX_DEF | MTX_DUPOK); | ||||
/* | /* | ||||
* Since nfs_decode_args() might optionally set them, these | * Since nfs_decode_args() might optionally set them, these | ||||
* need to be set to defaults before the call, so that the | * need to be set to defaults before the call, so that the | ||||
* optional settings aren't overwritten. | * optional settings aren't overwritten. | ||||
*/ | */ | ||||
▲ Show 20 Lines • Show All 350 Lines • ▼ Show 20 Lines | nfs_sync(struct mount *mp, int waitfor) | ||||
MNT_IUNLOCK(mp); | MNT_IUNLOCK(mp); | ||||
/* | /* | ||||
* Force stale buffer cache information to be flushed. | * Force stale buffer cache information to be flushed. | ||||
*/ | */ | ||||
loop: | loop: | ||||
MNT_VNODE_FOREACH_ALL(vp, mp, mvp) { | MNT_VNODE_FOREACH_ALL(vp, mp, mvp) { | ||||
/* XXX Racy bv_cnt check. */ | /* XXX Racy bv_cnt check. */ | ||||
if (NFSVOPISLOCKED(vp) || vp->v_bufobj.bo_dirty.bv_cnt == 0 || | if (NFSVOPISLOCKED(vp) || vp2bo(vp)->bo_dirty.bv_cnt == 0 || | ||||
waitfor == MNT_LAZY) { | waitfor == MNT_LAZY) { | ||||
VI_UNLOCK(vp); | VI_UNLOCK(vp); | ||||
continue; | continue; | ||||
} | } | ||||
if (vget(vp, LK_EXCLUSIVE | LK_INTERLOCK)) { | if (vget(vp, LK_EXCLUSIVE | LK_INTERLOCK)) { | ||||
MNT_VNODE_FOREACH_ALL_ABORT(mp, mvp); | MNT_VNODE_FOREACH_ALL_ABORT(mp, mvp); | ||||
goto loop; | goto loop; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 228 Lines • Show Last 20 Lines |