git://git.camperquake.de
/
zfs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Leaf vdevs should not be reopened
[zfs.git]
/
module
/
zfs
/
zfs_replay.c
diff --git
a/module/zfs/zfs_replay.c
b/module/zfs/zfs_replay.c
index
782d558
..
aa6366e
100644
(file)
--- a/
module/zfs/zfs_replay.c
+++ b/
module/zfs/zfs_replay.c
@@
-20,6
+20,7
@@
*/
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
*/
/*
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012 Cyril Plisko. All rights reserved.
*/
#include <sys/types.h>
*/
#include <sys/types.h>
@@
-626,7
+627,7
@@
zfs_replay_write(zfs_sb_t *zsb, lr_write_t *lr, boolean_t byteswap)
{
char *data = (char *)(lr + 1); /* data follows lr_write_t */
znode_t *zp;
{
char *data = (char *)(lr + 1); /* data follows lr_write_t */
znode_t *zp;
- int error;
+ int error
, written
;
uint64_t eod, offset, length;
if (byteswap)
uint64_t eod, offset, length;
if (byteswap)
@@
-671,14
+672,12
@@
zfs_replay_write(zfs_sb_t *zsb, lr_write_t *lr, boolean_t byteswap)
zsb->z_replay_eof = eod;
}
zsb->z_replay_eof = eod;
}
-
error
= zpl_write_common(ZTOI(zp), data, length, offset,
+
written
= zpl_write_common(ZTOI(zp), data, length, offset,
UIO_SYSSPACE, 0, kcred);
UIO_SYSSPACE, 0, kcred);
- if (error) {
- if (error < 0)
- error = -error;
- else
- error = EIO; /* Short write */
- }
+ if (written < 0)
+ error = -written;
+ else if (written < length)
+ error = EIO; /* short write */
iput(ZTOI(zp));
zsb->z_replay_eof = 0; /* safety */
iput(ZTOI(zp));
zsb->z_replay_eof = 0; /* safety */