Update the data types used in opaldf to minimize the chance of overflow when
determining the amount of available space. Thanks to Eugene for pointing out the issue. This commit was SVN r27436.
Этот коммит содержится в:
родитель
21be553e21
Коммит
1f24f1d305
@ -49,5 +49,5 @@ file). It is likely that your MPI job will now either abort or experience
|
||||
performance degradation.
|
||||
|
||||
Local host: %s
|
||||
Space Requested: %ld B
|
||||
Space Available: %ld B
|
||||
Space Requested: %lu B
|
||||
Space Available: %llu B
|
||||
|
@ -49,6 +49,7 @@
|
||||
#include <sys/stat.h>
|
||||
#endif /* HAVE_SYS_STAT_H */
|
||||
|
||||
#include "opal_stdint.h"
|
||||
#include "opal/constants.h"
|
||||
#include "opal/util/output.h"
|
||||
#include "opal/util/path.h"
|
||||
@ -90,8 +91,8 @@ module_finalize(void);
|
||||
|
||||
static int
|
||||
enough_space(const char *filename,
|
||||
long space_req,
|
||||
long *space_avail,
|
||||
size_t space_req,
|
||||
uint64_t *space_avail,
|
||||
bool *result);
|
||||
|
||||
/*
|
||||
@ -141,12 +142,12 @@ shmem_ds_reset(opal_shmem_ds_t *ds_buf)
|
||||
/* ////////////////////////////////////////////////////////////////////////// */
|
||||
static int
|
||||
enough_space(const char *filename,
|
||||
long space_req,
|
||||
long *space_avail,
|
||||
size_t space_req,
|
||||
uint64_t *space_avail,
|
||||
bool *result)
|
||||
{
|
||||
long avail = 0;
|
||||
long fluff = (long)(.05 * space_req);
|
||||
uint64_t avail = 0;
|
||||
size_t fluff = (size_t)(.05 * space_req);
|
||||
bool enough = false;
|
||||
char *last_sep = NULL;
|
||||
/* the target file name is passed here, but we need to check the parent
|
||||
@ -177,8 +178,8 @@ enough_space(const char *filename,
|
||||
OPAL_OUTPUT_VERBOSE(
|
||||
(70, opal_shmem_base_output,
|
||||
"WARNING: not enough space on %s to meet request!"
|
||||
"available: %ld requested: %ld", target_dir,
|
||||
avail, space_req + fluff)
|
||||
"available: %"PRIu64 "requested: %lu", target_dir,
|
||||
avail, (unsigned long)space_req + fluff)
|
||||
);
|
||||
}
|
||||
|
||||
@ -303,7 +304,7 @@ segment_create(opal_shmem_ds_t *ds_buf,
|
||||
char *real_file_name = NULL;
|
||||
pid_t my_pid = getpid();
|
||||
bool space_available = false;
|
||||
long amount_space_avail = 0;
|
||||
uint64_t amount_space_avail = 0;
|
||||
|
||||
/* the real size of the shared memory segment. this includes enough space
|
||||
* to store our segment header.
|
||||
@ -375,7 +376,7 @@ segment_create(opal_shmem_ds_t *ds_buf,
|
||||
}
|
||||
/* let's make sure we have enough space for the backing file */
|
||||
if (OPAL_SUCCESS != (rc = enough_space(real_file_name,
|
||||
(long)real_size,
|
||||
real_size,
|
||||
&amount_space_avail,
|
||||
&space_available))) {
|
||||
opal_output(0, "shmem: mmap: an error occurred while determining "
|
||||
@ -389,7 +390,8 @@ segment_create(opal_shmem_ds_t *ds_buf,
|
||||
hn[MAXHOSTNAMELEN - 1] = '\0';
|
||||
rc = OPAL_ERR_OUT_OF_RESOURCE;
|
||||
opal_show_help("help-opal-shmem-mmap.txt", "target full", 1,
|
||||
real_file_name, hn, (long)real_size, amount_space_avail);
|
||||
real_file_name, hn, (unsigned long)real_size,
|
||||
(unsigned long long)amount_space_avail);
|
||||
goto out;
|
||||
}
|
||||
/* enough space is available, so create the segment */
|
||||
|
@ -27,5 +27,5 @@ file). It is likely that your MPI job will now either abort or experience
|
||||
performance degradation.
|
||||
|
||||
Local host: %s
|
||||
Space Requested: %ld B
|
||||
Space Available: %ld B
|
||||
Space Requested: %lu B
|
||||
Space Available: %llu B
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include <string.h>
|
||||
#endif /* HAVE_STRING_H */
|
||||
|
||||
#include "opal_stdint.h"
|
||||
#include "opal/constants.h"
|
||||
#include "opal_stdint.h"
|
||||
#include "opal/util/output.h"
|
||||
@ -82,8 +83,8 @@ module_finalize(void);
|
||||
|
||||
static int
|
||||
enough_space(const char *filename,
|
||||
long space_req,
|
||||
long *space_avail,
|
||||
size_t space_req,
|
||||
uint64_t *space_avail,
|
||||
bool *result);
|
||||
|
||||
/*
|
||||
@ -132,12 +133,12 @@ shmem_ds_reset(opal_shmem_ds_t *ds_buf)
|
||||
/* ////////////////////////////////////////////////////////////////////////// */
|
||||
static int
|
||||
enough_space(const char *filename,
|
||||
long space_req,
|
||||
long *space_avail,
|
||||
size_t space_req,
|
||||
uint64_t *space_avail,
|
||||
bool *result)
|
||||
{
|
||||
long avail = 0;
|
||||
long fluff = (long)(.05 * space_req);
|
||||
uint64_t avail = 0;
|
||||
size_t fluff = (size_t)(.05 * space_req);
|
||||
bool enough = false;
|
||||
char *last_sep = NULL;
|
||||
/* the target file name is passed here, but we need to check the parent
|
||||
@ -168,8 +169,8 @@ enough_space(const char *filename,
|
||||
OPAL_OUTPUT_VERBOSE(
|
||||
(70, opal_shmem_base_output,
|
||||
"WARNING: not enough space on %s to meet request!"
|
||||
"available: %ld requested: %ld", target_dir,
|
||||
avail, space_req + fluff)
|
||||
"available: %"PRIu64 "requested: %lu", target_dir,
|
||||
avail, (unsigned long)space_req + fluff)
|
||||
);
|
||||
}
|
||||
|
||||
@ -231,7 +232,7 @@ segment_create(opal_shmem_ds_t *ds_buf,
|
||||
pid_t my_pid = getpid();
|
||||
char *temp1 = NULL, *temp2 = NULL;
|
||||
bool space_available = false;
|
||||
long amount_space_avail = 0;
|
||||
uint64_t amount_space_avail = 0;
|
||||
|
||||
/* the real size of the shared memory segment. this includes enough space
|
||||
* to store our segment header.
|
||||
@ -263,7 +264,7 @@ segment_create(opal_shmem_ds_t *ds_buf,
|
||||
}
|
||||
/* let's make sure we have enough space for the backing file */
|
||||
if (OPAL_SUCCESS != (rc = enough_space(temp1,
|
||||
(long)real_size,
|
||||
real_size,
|
||||
&amount_space_avail,
|
||||
&space_available))) {
|
||||
opal_output(0, "shmem: windows: an error occurred while determining "
|
||||
@ -278,7 +279,8 @@ segment_create(opal_shmem_ds_t *ds_buf,
|
||||
hn[MAXHOSTNAMELEN - 1] = '\0';
|
||||
rc = OPAL_ERR_OUT_OF_RESOURCE;
|
||||
opal_show_help("help-opal-shmem-windows.txt", "target full", 1,
|
||||
temp1, hn, (long)real_size, amount_space_avail);
|
||||
temp1, hn, (unsigned long)real_size,
|
||||
(unsigned long long)amount_space_avail);
|
||||
free(temp1);
|
||||
goto out;
|
||||
}
|
||||
|
@ -49,6 +49,7 @@
|
||||
#include <sys/mount.h>
|
||||
#endif
|
||||
|
||||
#include "opal_stdint.h"
|
||||
#include "opal/util/output.h"
|
||||
#include "opal/util/path.h"
|
||||
#include "opal/util/os_path.h"
|
||||
@ -537,7 +538,7 @@ found:
|
||||
|
||||
int
|
||||
opal_path_df(const char *path,
|
||||
long *out_avail)
|
||||
uint64_t *out_avail)
|
||||
{
|
||||
#if !defined(__WINDOWS__)
|
||||
int rc = -1;
|
||||
@ -553,6 +554,7 @@ opal_path_df(const char *path,
|
||||
if (NULL == path || NULL == out_avail) {
|
||||
return OPAL_ERROR;
|
||||
}
|
||||
*out_avail = 0;
|
||||
|
||||
do {
|
||||
#if defined(__SVR4) && defined(__sun)
|
||||
@ -576,7 +578,7 @@ opal_path_df(const char *path,
|
||||
*out_avail = buf.f_bsize * ((int)buf.f_bavail < 0 ? 0 : buf.f_bavail);
|
||||
|
||||
OPAL_OUTPUT_VERBOSE((10, 2, "opal_path_df: stat(v)fs states "
|
||||
"path: %s has %ld B of free space.",
|
||||
"path: %s has %"PRIu64 " B of free space.",
|
||||
path, *out_avail));
|
||||
|
||||
return OPAL_SUCCESS;
|
||||
@ -594,11 +596,11 @@ opal_path_df(const char *path,
|
||||
path, err, strerror(err)));
|
||||
return OPAL_ERROR;
|
||||
}
|
||||
*out_avail = dwFreeClusters * dwSectorsPerCluster * dwBytesPerSector;
|
||||
*out_avail = dwFreeClusters * dwSectorsPerCluster * dwBytesPerSector;
|
||||
}
|
||||
|
||||
OPAL_OUTPUT_VERBOSE((10, 2, "opal_path_df: stat(v)fs states "
|
||||
"path: %s has %ld B of free space.",
|
||||
"path: %s has %"PRIu64 " B of free space.",
|
||||
path, *out_avail));
|
||||
|
||||
return OPAL_SUCCESS;
|
||||
|
@ -151,7 +151,7 @@ OPAL_DECLSPEC bool opal_path_nfs(char *fname) __opal_attribute_warn_unused_resul
|
||||
*/
|
||||
OPAL_DECLSPEC int
|
||||
opal_path_df(const char *path,
|
||||
long *out_avail)__opal_attribute_warn_unused_result__;
|
||||
uint64_t *out_avail)__opal_attribute_warn_unused_result__;
|
||||
|
||||
END_C_DECLS
|
||||
#endif /* OPAL_PATH_H */
|
||||
|
Загрузка…
Ссылка в новой задаче
Block a user