kobj_read_file: Return -1 on vn_rdwr() error
I noticed that the SPL implementation of kobj_read_file is not correct after comparing it with the userland implementation of kobj_read_file() in zfsonlinux/zfs#4104. Note that we no longer pass RLIM64_INFINITY with this, but our vn_rdwr implementation did not support it anyway, so there is no difference. Signed-off-by: Richard Yao <ryao@gentoo.org> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #513
This commit is contained in:
parent
7323da1b2f
commit
be29e6a6e6
|
@ -35,8 +35,8 @@ typedef struct _buf buf_t;
|
|||
|
||||
extern struct _buf *kobj_open_file(const char *name);
|
||||
extern void kobj_close_file(struct _buf *file);
|
||||
extern int kobj_read_file(struct _buf *file, char *buf,
|
||||
ssize_t size, offset_t off);
|
||||
extern int kobj_read_file(struct _buf *file, char *buf, unsigned size,
|
||||
unsigned off);
|
||||
extern int kobj_get_filesize(struct _buf *file, uint64_t *size);
|
||||
|
||||
#endif /* SPL_KOBJ_H */
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue