Add VOP_SEEK

This commit is contained in:
Brian Behlendorf 2009-01-09 13:59:39 -08:00
parent d83ba26e18
commit 97735c39e3
2 changed files with 19 additions and 4 deletions

View File

@ -207,6 +207,8 @@ extern int vn_rdwr(uio_rw_t uio, vnode_t *vp, void *addr, ssize_t len,
offset_t off, uio_seg_t seg, int x1, rlim64_t x2,
void *x3, ssize_t *residp);
extern int vn_close(vnode_t *vp, int flags, int x1, int x2, void *x3, void *x4);
extern int vn_seek(vnode_t *vp, offset_t o, offset_t *op, caller_context_t *ct);
extern int vn_remove(const char *path, uio_seg_t seg, int flags);
extern int vn_rename(const char *path1, const char *path2, int x1);
extern int vn_getattr(vnode_t *vp, vattr_t *vap, int flags, void *x3, void *x4);
@ -230,6 +232,7 @@ vn_putpage(vnode_t *vp, offset_t off, ssize_t size,
} /* vn_putpage() */
#define VOP_CLOSE vn_close
#define VOP_SEEK vn_seek
#define VN_RELE vn_rele
#define VOP_GETATTR vn_getattr
#define VOP_FSYNC vn_fsync

View File

@ -235,19 +235,31 @@ vn_close(vnode_t *vp, int flags, int x1, int x2, void *x3, void *x4)
ASSERT(vp);
ASSERT(vp->v_file);
rc = filp_close(vp->v_file, 0);
vn_free(vp);
rc = filp_close(vp->v_file, 0);
vn_free(vp);
RETURN(-rc);
} /* vn_close() */
EXPORT_SYMBOL(vn_close);
static struct dentry *vn_lookup_hash(struct nameidata *nd)
/* vn_seek() does not actually seek it only performs bounds checking on the
* proposed seek. We perform minimal checking and allow vn_rdwr() to catch
* anything more serious. */
int
vn_seek(vnode_t *vp, offset_t ooff, offset_t *noffp, caller_context_t *ct)
{
return ((*noffp < 0 || *noffp > MAXOFFSET_T) ? EINVAL : 0);
}
EXPORT_SYMBOL(vn_seek);
static struct dentry *
vn_lookup_hash(struct nameidata *nd)
{
return lookup_one_len(nd->last.name, nd->nd_dentry, nd->last.len);
} /* lookup_hash() */
static void vn_path_release(struct nameidata *nd)
static void
vn_path_release(struct nameidata *nd)
{
dput(nd->nd_dentry);
mntput(nd->nd_mnt);