]> git.proxmox.com Git - mirror_spl.git/blob - modules/spl/spl-kobj.c
- Implemented vnode interfaces and 6 test cases to the test suite.
[mirror_spl.git] / modules / spl / spl-kobj.c
1 #include <sys/kobj.h>
2 #include "config.h"
3
4 struct _buf *
5 kobj_open_file(const char *name)
6 {
7 struct _buf *file;
8 vnode_t *vp;
9 int rc;
10
11 if ((rc = vn_open(name, UIO_SYSSPACE, FREAD, 0644, &vp, 0, 0)))
12 return ((_buf_t *)-1UL);
13
14 file = kmalloc(sizeof(_buf_t), GFP_KERNEL);
15 file->vp = vp;
16
17 return file;
18 } /* kobj_open_file() */
19 EXPORT_SYMBOL(kobj_open_file);
20
21 void
22 kobj_close_file(struct _buf *file)
23 {
24 VOP_CLOSE(file->vp, 0, 0, 0, 0, 0);
25 VN_RELE(file->vp);
26 kfree(file);
27
28 return;
29 } /* kobj_close_file() */
30 EXPORT_SYMBOL(kobj_close_file);
31
32 int
33 kobj_read_file(struct _buf *file, char *buf, ssize_t size, offset_t off)
34 {
35 return vn_rdwr(UIO_READ, file->vp, buf, size, off,
36 UIO_SYSSPACE, 0, RLIM64_INFINITY, 0, NULL);
37 } /* kobj_read_file() */
38 EXPORT_SYMBOL(kobj_read_file);
39
40 int
41 kobj_get_filesize(struct _buf *file, uint64_t *size)
42 {
43 vattr_t vap;
44 int rc;
45
46 rc = VOP_GETATTR(file->vp, &vap, 0, 0, NULL);
47 if (rc)
48 return rc;
49
50 *size = vap.va_size;
51
52 return rc;
53 } /* kobj_get_filesize() */
54 EXPORT_SYMBOL(kobj_get_filesize);