]> git.proxmox.com Git - mirror_spl.git/blobdiff - module/spl/spl-kobj.c
kobj_read_file: Return -1 on vn_rdwr() error
[mirror_spl.git] / module / spl / spl-kobj.c
index 5b29fdb58bee9c96ca7aec6efb1a88bc8c6629cd..b79fcb82836c83bba4d448fa49e14882848134dc 100644 (file)
@@ -33,7 +33,7 @@ kobj_open_file(const char *name)
        vnode_t *vp;
        int rc;
 
-       file = kmalloc(sizeof(_buf_t), GFP_KERNEL);
+       file = kmalloc(sizeof(_buf_t), kmem_flags_convert(KM_SLEEP));
        if (file == NULL)
                return ((_buf_t *)-1UL);
 
@@ -57,10 +57,15 @@ kobj_close_file(struct _buf *file)
 EXPORT_SYMBOL(kobj_close_file);
 
 int
-kobj_read_file(struct _buf *file, char *buf, ssize_t size, offset_t off)
+kobj_read_file(struct _buf *file, char *buf, unsigned size, unsigned off)
 {
-       return (vn_rdwr(UIO_READ, file->vp, buf, size, off,
-              UIO_SYSSPACE, 0, RLIM64_INFINITY, 0, NULL));
+       ssize_t resid;
+
+       if (vn_rdwr(UIO_READ, file->vp, buf, size, (offset_t)off,
+           UIO_SYSSPACE, 0, 0, 0, &resid) != 0)
+               return (-1);
+
+       return (size - resid);
 } /* kobj_read_file() */
 EXPORT_SYMBOL(kobj_read_file);