Changeset View
Changeset View
Standalone View
Standalone View
head/sys/ufs/ffs/ffs_vnops.c
Show First 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | #define ALIGNED_TO(ptr, s) \ | ||||
(((uintptr_t)(ptr) & (_Alignof(s) - 1)) == 0) | (((uintptr_t)(ptr) & (_Alignof(s) - 1)) == 0) | ||||
#ifdef DIRECTIO | #ifdef DIRECTIO | ||||
extern int ffs_rawread(struct vnode *vp, struct uio *uio, int *workdone); | extern int ffs_rawread(struct vnode *vp, struct uio *uio, int *workdone); | ||||
#endif | #endif | ||||
static vop_fdatasync_t ffs_fdatasync; | static vop_fdatasync_t ffs_fdatasync; | ||||
static vop_fsync_t ffs_fsync; | static vop_fsync_t ffs_fsync; | ||||
static vop_getpages_t ffs_getpages; | static vop_getpages_t ffs_getpages; | ||||
static vop_getpages_async_t ffs_getpages_async; | |||||
static vop_lock1_t ffs_lock; | static vop_lock1_t ffs_lock; | ||||
static vop_read_t ffs_read; | static vop_read_t ffs_read; | ||||
static vop_write_t ffs_write; | static vop_write_t ffs_write; | ||||
static int ffs_extread(struct vnode *vp, struct uio *uio, int ioflag); | static int ffs_extread(struct vnode *vp, struct uio *uio, int ioflag); | ||||
static int ffs_extwrite(struct vnode *vp, struct uio *uio, int ioflag, | static int ffs_extwrite(struct vnode *vp, struct uio *uio, int ioflag, | ||||
struct ucred *cred); | struct ucred *cred); | ||||
static vop_strategy_t ffsext_strategy; | static vop_strategy_t ffsext_strategy; | ||||
static vop_closeextattr_t ffs_closeextattr; | static vop_closeextattr_t ffs_closeextattr; | ||||
static vop_deleteextattr_t ffs_deleteextattr; | static vop_deleteextattr_t ffs_deleteextattr; | ||||
static vop_getextattr_t ffs_getextattr; | static vop_getextattr_t ffs_getextattr; | ||||
static vop_listextattr_t ffs_listextattr; | static vop_listextattr_t ffs_listextattr; | ||||
static vop_openextattr_t ffs_openextattr; | static vop_openextattr_t ffs_openextattr; | ||||
static vop_setextattr_t ffs_setextattr; | static vop_setextattr_t ffs_setextattr; | ||||
static vop_vptofh_t ffs_vptofh; | static vop_vptofh_t ffs_vptofh; | ||||
/* Global vfs data structures for ufs. */ | /* Global vfs data structures for ufs. */ | ||||
struct vop_vector ffs_vnodeops1 = { | struct vop_vector ffs_vnodeops1 = { | ||||
.vop_default = &ufs_vnodeops, | .vop_default = &ufs_vnodeops, | ||||
.vop_fsync = ffs_fsync, | .vop_fsync = ffs_fsync, | ||||
.vop_fdatasync = ffs_fdatasync, | .vop_fdatasync = ffs_fdatasync, | ||||
.vop_getpages = ffs_getpages, | .vop_getpages = ffs_getpages, | ||||
.vop_getpages_async = vnode_pager_local_getpages_async, | .vop_getpages_async = ffs_getpages_async, | ||||
.vop_lock1 = ffs_lock, | .vop_lock1 = ffs_lock, | ||||
.vop_read = ffs_read, | .vop_read = ffs_read, | ||||
.vop_reallocblks = ffs_reallocblks, | .vop_reallocblks = ffs_reallocblks, | ||||
.vop_write = ffs_write, | .vop_write = ffs_write, | ||||
.vop_vptofh = ffs_vptofh, | .vop_vptofh = ffs_vptofh, | ||||
}; | }; | ||||
struct vop_vector ffs_fifoops1 = { | struct vop_vector ffs_fifoops1 = { | ||||
.vop_default = &ufs_fifoops, | .vop_default = &ufs_fifoops, | ||||
.vop_fsync = ffs_fsync, | .vop_fsync = ffs_fsync, | ||||
.vop_fdatasync = ffs_fdatasync, | .vop_fdatasync = ffs_fdatasync, | ||||
.vop_lock1 = ffs_lock, | .vop_lock1 = ffs_lock, | ||||
.vop_vptofh = ffs_vptofh, | .vop_vptofh = ffs_vptofh, | ||||
}; | }; | ||||
/* Global vfs data structures for ufs. */ | /* Global vfs data structures for ufs. */ | ||||
struct vop_vector ffs_vnodeops2 = { | struct vop_vector ffs_vnodeops2 = { | ||||
.vop_default = &ufs_vnodeops, | .vop_default = &ufs_vnodeops, | ||||
.vop_fsync = ffs_fsync, | .vop_fsync = ffs_fsync, | ||||
.vop_fdatasync = ffs_fdatasync, | .vop_fdatasync = ffs_fdatasync, | ||||
.vop_getpages = ffs_getpages, | .vop_getpages = ffs_getpages, | ||||
.vop_getpages_async = vnode_pager_local_getpages_async, | .vop_getpages_async = ffs_getpages_async, | ||||
.vop_lock1 = ffs_lock, | .vop_lock1 = ffs_lock, | ||||
.vop_read = ffs_read, | .vop_read = ffs_read, | ||||
.vop_reallocblks = ffs_reallocblks, | .vop_reallocblks = ffs_reallocblks, | ||||
.vop_write = ffs_write, | .vop_write = ffs_write, | ||||
.vop_closeextattr = ffs_closeextattr, | .vop_closeextattr = ffs_closeextattr, | ||||
.vop_deleteextattr = ffs_deleteextattr, | .vop_deleteextattr = ffs_deleteextattr, | ||||
.vop_getextattr = ffs_getextattr, | .vop_getextattr = ffs_getextattr, | ||||
.vop_listextattr = ffs_listextattr, | .vop_listextattr = ffs_listextattr, | ||||
▲ Show 20 Lines • Show All 1,571 Lines • ▼ Show 20 Lines | ffs_getpages(struct vop_getpages_args *ap) | ||||
um = VFSTOUFS(vp->v_mount); | um = VFSTOUFS(vp->v_mount); | ||||
if (!use_buf_pager && um->um_devvp->v_bufobj.bo_bsize <= PAGE_SIZE) | if (!use_buf_pager && um->um_devvp->v_bufobj.bo_bsize <= PAGE_SIZE) | ||||
return (vnode_pager_generic_getpages(vp, ap->a_m, ap->a_count, | return (vnode_pager_generic_getpages(vp, ap->a_m, ap->a_count, | ||||
ap->a_rbehind, ap->a_rahead, NULL, NULL)); | ap->a_rbehind, ap->a_rahead, NULL, NULL)); | ||||
return (vfs_bio_getpages(vp, ap->a_m, ap->a_count, ap->a_rbehind, | return (vfs_bio_getpages(vp, ap->a_m, ap->a_count, ap->a_rbehind, | ||||
ap->a_rahead, ffs_gbp_getblkno, ffs_gbp_getblksz)); | ap->a_rahead, ffs_gbp_getblkno, ffs_gbp_getblksz)); | ||||
} | } | ||||
static int | |||||
ffs_getpages_async(struct vop_getpages_async_args *ap) | |||||
{ | |||||
struct vnode *vp; | |||||
struct ufsmount *um; | |||||
int error; | |||||
vp = ap->a_vp; | |||||
um = VFSTOUFS(vp->v_mount); | |||||
if (um->um_devvp->v_bufobj.bo_bsize <= PAGE_SIZE) | |||||
return (vnode_pager_generic_getpages(vp, ap->a_m, ap->a_count, | |||||
ap->a_rbehind, ap->a_rahead, ap->a_iodone, ap->a_arg)); | |||||
error = vfs_bio_getpages(vp, ap->a_m, ap->a_count, ap->a_rbehind, | |||||
ap->a_rahead, ffs_gbp_getblkno, ffs_gbp_getblksz); | |||||
ap->a_iodone(ap->a_arg, ap->a_m, ap->a_count, error); | |||||
return (error); | |||||
} | |||||