Fixed not to call Flush even if the file size is increased (#1887)
Changed s3fs_truncate function. This change reduces the number of file uploads if the file size is changed. On macOS, I have found that the truncate call when "size=0" cannot reflect the file size.(This reason is not understood...) To avoid this, only when "size=0", the flush method is called as before. Other than that, I found a bug in FdEntity::Open() and fixed it. Fixes #1875.
This commit is contained in:
@ -426,7 +426,7 @@ int FdEntity::Open(const headers_t* pmeta, off_t size, time_t time, int flags, A
|
||||
// check only file size(do not need to save cfs and time.
|
||||
if(0 <= size && pagelist.Size() != size){
|
||||
// truncate temporary file size
|
||||
if(-1 == ftruncate(physical_fd, size)){
|
||||
if(-1 == ftruncate(physical_fd, size) || -1 == fsync(physical_fd)){
|
||||
S3FS_PRN_ERR("failed to truncate temporary file(physical_fd=%d) by errno(%d).", physical_fd, errno);
|
||||
return -errno;
|
||||
}
|
||||
@ -440,7 +440,7 @@ int FdEntity::Open(const headers_t* pmeta, off_t size, time_t time, int flags, A
|
||||
off_t new_size = (0 <= size ? size : size_orgmeta);
|
||||
if(pmeta){
|
||||
orgmeta = *pmeta;
|
||||
new_size = get_size(orgmeta);
|
||||
size_orgmeta = get_size(orgmeta);
|
||||
}
|
||||
if(new_size < size_orgmeta){
|
||||
size_orgmeta = new_size;
|
||||
|
||||
Reference in New Issue
Block a user