mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-27 03:19:35 +03:00
Fix ztest truncated cache file
Commit efc412b
updated spa_config_write() for Linux 4.2 kernels to
truncate and overwrite rather than rename the cache file. This is
the correct fix but it should have only been applied for the kernel
build. In user space rename(2) is needed because ztest depends on
the cache file.
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #4129
This commit is contained in:
parent
448d7aaabc
commit
151f84e2c3
@ -174,7 +174,7 @@ spa_config_write(spa_config_dirent_t *dp, nvlist_t *nvl)
|
|||||||
VERIFY(nvlist_pack(nvl, &buf, &buflen, NV_ENCODE_XDR,
|
VERIFY(nvlist_pack(nvl, &buf, &buflen, NV_ENCODE_XDR,
|
||||||
KM_SLEEP) == 0);
|
KM_SLEEP) == 0);
|
||||||
|
|
||||||
#ifdef __linux__
|
#if defined(__linux__) && defined(_KERNEL)
|
||||||
/*
|
/*
|
||||||
* Write the configuration to disk. Due to the complexity involved
|
* Write the configuration to disk. Due to the complexity involved
|
||||||
* in performing a rename from within the kernel the file is truncated
|
* in performing a rename from within the kernel the file is truncated
|
||||||
@ -201,7 +201,8 @@ spa_config_write(spa_config_dirent_t *dp, nvlist_t *nvl)
|
|||||||
*/
|
*/
|
||||||
(void) snprintf(temp, MAXPATHLEN, "%s.tmp", dp->scd_path);
|
(void) snprintf(temp, MAXPATHLEN, "%s.tmp", dp->scd_path);
|
||||||
|
|
||||||
if (vn_open(temp, UIO_SYSSPACE, oflags, 0644, &vp, CRCREAT, 0) == 0) {
|
error = vn_open(temp, UIO_SYSSPACE, oflags, 0644, &vp, CRCREAT, 0);
|
||||||
|
if (error == 0) {
|
||||||
if (vn_rdwr(UIO_WRITE, vp, buf, buflen, 0, UIO_SYSSPACE,
|
if (vn_rdwr(UIO_WRITE, vp, buf, buflen, 0, UIO_SYSSPACE,
|
||||||
0, RLIM64_INFINITY, kcred, NULL) == 0 &&
|
0, RLIM64_INFINITY, kcred, NULL) == 0 &&
|
||||||
VOP_FSYNC(vp, FSYNC, kcred, NULL) == 0) {
|
VOP_FSYNC(vp, FSYNC, kcred, NULL) == 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user