Print this page
5404 smbfs needs mmap support
Portions contributed by: Gordon Ross <gordon.w.ross@gmail.com>
*** 879,927 ****
*sbp = smi->smi_statvfsbuf;
mutex_exit(&smi->smi_lock);
return (error);
}
- static kmutex_t smbfs_syncbusy;
-
/*
* Flush dirty smbfs files for file system vfsp.
* If vfsp == NULL, all smbfs files are flushed.
*/
/*ARGSUSED*/
static int
smbfs_sync(vfs_t *vfsp, short flag, cred_t *cr)
{
/*
! * Cross-zone calls are OK here, since this translates to a
! * VOP_PUTPAGE(B_ASYNC), which gets picked up by the right zone.
*/
! if (!(flag & SYNC_ATTR) && mutex_tryenter(&smbfs_syncbusy) != 0) {
! smbfs_rflush(vfsp, cr);
! mutex_exit(&smbfs_syncbusy);
}
return (0);
}
/*
* Initialization routine for VFS routines. Should only be called once
*/
int
smbfs_vfsinit(void)
{
- mutex_init(&smbfs_syncbusy, NULL, MUTEX_DEFAULT, NULL);
return (0);
}
/*
* Shutdown routine for VFS routines. Should only be called once
*/
void
smbfs_vfsfini(void)
{
- mutex_destroy(&smbfs_syncbusy);
}
void
smbfs_freevfs(vfs_t *vfsp)
{
--- 879,934 ----
*sbp = smi->smi_statvfsbuf;
mutex_exit(&smi->smi_lock);
return (error);
}
/*
* Flush dirty smbfs files for file system vfsp.
* If vfsp == NULL, all smbfs files are flushed.
*/
/*ARGSUSED*/
static int
smbfs_sync(vfs_t *vfsp, short flag, cred_t *cr)
{
+
/*
! * SYNC_ATTR is used by fsflush() to force old filesystems like UFS
! * to sync metadata, which they would otherwise cache indefinitely.
! * Semantically, the only requirement is that the sync be initiated.
! * Assume the server-side takes care of attribute sync.
*/
! if (flag & SYNC_ATTR)
! return (0);
!
! if (vfsp == NULL) {
! /*
! * Flush ALL smbfs mounts in this zone.
! */
! smbfs_flushall(cr);
! return (0);
}
+ smbfs_rflush(vfsp, cr);
+
return (0);
}
/*
* Initialization routine for VFS routines. Should only be called once
*/
int
smbfs_vfsinit(void)
{
return (0);
}
/*
* Shutdown routine for VFS routines. Should only be called once
*/
void
smbfs_vfsfini(void)
{
}
void
smbfs_freevfs(vfs_t *vfsp)
{