util/disk_cache: check rename result
I haven't seen this causing problems in practice, but for correctness we should also check if rename succeeded to avoid breaking accounting and leaving a .tmp file behind. Signed-off-by: Grazvydas Ignotas <notasas@gmail.com> Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:

committed by
Timothy Arceri

parent
67911fa4b8
commit
274aaa331c
@@ -878,7 +878,11 @@ cache_put(void *job, int thread_index)
|
|||||||
unlink(filename_tmp);
|
unlink(filename_tmp);
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
rename(filename_tmp, filename);
|
ret = rename(filename_tmp, filename);
|
||||||
|
if (ret == -1) {
|
||||||
|
unlink(filename_tmp);
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
file_size += cf_data_size;
|
file_size += cf_data_size;
|
||||||
p_atomic_add(dc_job->cache->size, file_size);
|
p_atomic_add(dc_job->cache->size, file_size);
|
||||||
@@ -886,7 +890,7 @@ cache_put(void *job, int thread_index)
|
|||||||
done:
|
done:
|
||||||
if (fd_final != -1)
|
if (fd_final != -1)
|
||||||
close(fd_final);
|
close(fd_final);
|
||||||
/* This close finally releases the flock, (now that the final dile
|
/* This close finally releases the flock, (now that the final file
|
||||||
* has been renamed into place and the size has been added).
|
* has been renamed into place and the size has been added).
|
||||||
*/
|
*/
|
||||||
if (fd != -1)
|
if (fd != -1)
|
||||||
|
Reference in New Issue
Block a user