osaf/libs/core/include/ncs_osprm.h | 1 +
osaf/libs/core/leap/os_defs.c | 13 ++++++++++---
osaf/services/saf/cpsv/cpnd/cpnd_proc.c | 1 +
osaf/services/saf/cpsv/cpnd/cpnd_res.c | 2 ++
osaf/services/saf/glsv/glnd/glnd_shm.c | 1 +
osaf/services/saf/mqsv/mqnd/mqnd_shm.c | 1 +
6 files changed, 16 insertions(+), 3 deletions(-)
Provided ensured disk space is allocated for NCS_OS_POSIX_SHM_REQ_OPEN
request using posix_fallocate()
so that application such as CPSV subsequent writes to bytes in the specified
range are guaranteed not to fail because of lack of disk space.
Updated the Opensaf services according to new options based on requirements .
diff --git a/osaf/libs/core/include/ncs_osprm.h
b/osaf/libs/core/include/ncs_osprm.h
--- a/osaf/libs/core/include/ncs_osprm.h
+++ b/osaf/libs/core/include/ncs_osprm.h
@@ -564,6 +564,7 @@ uint32_t ncs_os_posix_mq(NCS_OS_POSIX_MQ
uint32_t i_flags;
uint32_t i_map_flags;
uint64_t i_size;
+ bool ensures_space;
uint64_t i_offset;
void *o_addr;
int32_t o_fd;
diff --git a/osaf/libs/core/leap/os_defs.c b/osaf/libs/core/leap/os_defs.c
--- a/osaf/libs/core/leap/os_defs.c
+++ b/osaf/libs/core/leap/os_defs.c
@@ -795,9 +795,16 @@ uint32_t ncs_os_posix_shm(NCS_OS_POSIX_S
if (req->info.open.o_fd < 0) {
return NCSCC_RC_FAILURE;
} else {
- if (ftruncate(req->info.open.o_fd, (off_t) shm_size /*
off_t == long */ ) < 0) {
- printf("ftruncate failed with errno value %d
\n", errno);
- return NCSCC_RC_FAILURE;
+ if (req->info.open.ensures_space == true) {
+ if (posix_fallocate(req->info.open.o_fd, 0,
shm_size) == ENOSPC) {
+ LOG_ER("posix_shm:posix_fallocate
failed() with not enough space left ENOSPC: %d \n", errno);
+ return NCSCC_RC_FAILURE;
+ }
+ } else {
+ if (ftruncate(req->info.open.o_fd, (off_t)
shm_size /* off_t == long */ ) < 0) {
+ printf("ftruncate failed with errno
value %d \n", errno);
+ return NCSCC_RC_FAILURE;
+ }
}
prot_flag = ncs_shm_prot_flags(req->info.open.i_flags);
diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_proc.c
b/osaf/services/saf/cpsv/cpnd/cpnd_proc.c
--- a/osaf/services/saf/cpsv/cpnd/cpnd_proc.c
+++ b/osaf/services/saf/cpsv/cpnd/cpnd_proc.c
@@ -481,6 +481,7 @@ uint32_t cpnd_ckpt_replica_create(CPND_C
cp_node->replica_info.open.info.open.i_size =
sizeof(CPSV_CKPT_HDR) + cp_node->create_attrib.maxSections *
(sizeof(CPSV_SECT_HDR) +
cp_node->create_attrib.maxSectionSize);
+ cp_node->replica_info.open.info.open.ensures_space = true;
cp_node->replica_info.open.info.open.i_offset = 0;
cp_node->replica_info.open.info.open.i_name = buf;
cp_node->replica_info.open.info.open.i_map_flags = MAP_SHARED;
diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_res.c
b/osaf/services/saf/cpsv/cpnd/cpnd_res.c
--- a/osaf/services/saf/cpsv/cpnd/cpnd_res.c
+++ b/osaf/services/saf/cpsv/cpnd/cpnd_res.c
@@ -160,6 +160,7 @@ uint32_t cpnd_ckpt_replica_create_res(NC
open_req->type = NCS_OS_POSIX_SHM_REQ_OPEN;
open_req->info.open.i_size =
sizeof(CPSV_CKPT_HDR) + (cp_info->maxSections *
((sizeof(CPSV_SECT_HDR) + cp_info->maxSecSize)));
+ open_req->info.open.ensures_space = true;
open_req->info.open.i_offset = 0;
open_req->info.open.i_name = buf;
open_req->info.open.i_map_flags = MAP_SHARED;
@@ -344,6 +345,7 @@ void *cpnd_restart_shm_create(NCS_OS_POS
cpnd_open_req->info.open.i_size =
sizeof(CLIENT_HDR) + (MAX_CLIENTS * sizeof(CLIENT_INFO)) +
sizeof(CKPT_HDR) +
(MAX_CKPTS * sizeof(CKPT_INFO));
+ cpnd_open_req->info.open.ensures_space = true;
cpnd_open_req->info.open.i_offset = 0;
cpnd_open_req->info.open.i_name = buffer;
cpnd_open_req->info.open.i_map_flags = MAP_SHARED;
diff --git a/osaf/services/saf/glsv/glnd/glnd_shm.c
b/osaf/services/saf/glsv/glnd/glnd_shm.c
--- a/osaf/services/saf/glsv/glnd/glnd_shm.c
+++ b/osaf/services/saf/glsv/glnd/glnd_shm.c
@@ -71,6 +71,7 @@ static uint32_t glnd_shm_open(GLND_CB *c
glnd_open_req.type = NCS_OS_POSIX_SHM_REQ_OPEN;
glnd_open_req.info.open.i_size = shm_size;
+ glnd_open_req.info.open.ensures_space = false;
glnd_open_req.info.open.i_offset = 0;
glnd_open_req.info.open.i_name = shm_name;
glnd_open_req.info.open.i_map_flags = MAP_SHARED;
diff --git a/osaf/services/saf/mqsv/mqnd/mqnd_shm.c
b/osaf/services/saf/mqsv/mqnd/mqnd_shm.c
--- a/osaf/services/saf/mqsv/mqnd/mqnd_shm.c
+++ b/osaf/services/saf/mqsv/mqnd/mqnd_shm.c
@@ -66,6 +66,7 @@ uint32_t mqnd_shm_create(MQND_CB *cb)
mqnd_open_req.type = NCS_OS_POSIX_SHM_REQ_OPEN;
mqnd_open_req.info.open.i_size =
sizeof(MQND_SHM_VERSION) + (sizeof(MQND_QUEUE_CKPT_INFO) *
cb->mqnd_shm.max_open_queues);
+ mqnd_open_req.info.open.ensures_space = false;
mqnd_open_req.info.open.i_offset = 0;
mqnd_open_req.info.open.i_name = shm_name;
mqnd_open_req.info.open.i_map_flags = MAP_SHARED;
------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel