From 576b1c55bf5a8b37983e1581a6c0cc1a9d7158f5 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Wed, 1 Apr 2015 09:26:39 +0100 Subject: extend backing store logging to show errno values ofter operations --- content/fs_backing_store.c | 53 +++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 22 deletions(-) (limited to 'content') diff --git a/content/fs_backing_store.c b/content/fs_backing_store.c index f2e6a387f..638a109d7 100644 --- a/content/fs_backing_store.c +++ b/content/fs_backing_store.c @@ -1603,15 +1603,17 @@ static nserror store_write_block(struct store_state *state, bse->elem[elem_idx].data, bse->elem[elem_idx].size, offst); - - LOG(("Wrote %d of %d bytes from %p at 0x%x block %d", - wr, bse->elem[elem_idx].size, bse->elem[elem_idx].data, - offst, bse->elem[elem_idx].block)); - if (wr != (ssize_t)bse->elem[elem_idx].size) { + LOG(("Write failed %d of %d bytes from %p at 0x%x block %d errno %d", + wr, bse->elem[elem_idx].size, bse->elem[elem_idx].data, + offst, bse->elem[elem_idx].block, errno)); return NSERROR_SAVE_FAILED; } + LOG(("Wrote %d bytes from %p at 0x%x block %d", + wr, bse->elem[elem_idx].data, + offst, bse->elem[elem_idx].block)); + return NSERROR_OK; } @@ -1627,27 +1629,32 @@ static nserror store_write_file(struct store_state *state, struct store_entry *bse, int elem_idx) { - ssize_t written; + ssize_t wr; int fd; + int err; fd = store_open(state, bse->ident, elem_idx, O_CREAT | O_WRONLY); if (fd < 0) { perror(""); - LOG(("Open failed %d", fd)); + LOG(("Open failed %d errno %d", fd, errno)); return NSERROR_SAVE_FAILED; } - written = write(fd, bse->elem[elem_idx].data, bse->elem[elem_idx].size); - - LOG(("Wrote %d of %d bytes from %p", - written, bse->elem[elem_idx].size, bse->elem[elem_idx].data)); + wr = write(fd, bse->elem[elem_idx].data, bse->elem[elem_idx].size); + err = errno; /* close can change errno */ close(fd); - if (written < 0 || (size_t) written < bse->elem[elem_idx].size) { + if (wr != (ssize_t)bse->elem[elem_idx].size) { + LOG(("Write failed %d of %d bytes from %p errno %d", + wr, bse->elem[elem_idx].size, bse->elem[elem_idx].data, + err)); + /** @todo Delete the file? */ return NSERROR_SAVE_FAILED; } + LOG(("Wrote %d bytes from %p", wr, bse->elem[elem_idx].data)); + return NSERROR_OK; } @@ -1742,6 +1749,7 @@ static nserror store_read_block(struct store_state *state, state->blocks[elem_idx][bf].fd = store_open(state, bf, elem_idx + ENTRY_ELEM_COUNT, O_CREAT | O_RDWR); } if (state->blocks[elem_idx][bf].fd == -1) { + LOG(("Open failed errno %d", errno)); return NSERROR_SAVE_FAILED; } @@ -1751,15 +1759,17 @@ static nserror store_read_block(struct store_state *state, bse->elem[elem_idx].data, bse->elem[elem_idx].size, offst); - - LOG(("Read %d of %d bytes into %p from 0x%x block %d", - rd, bse->elem[elem_idx].size, bse->elem[elem_idx].data, - offst, bse->elem[elem_idx].block)); - if (rd != (ssize_t)bse->elem[elem_idx].size) { + LOG(("Failed reading %d of %d bytes into %p from 0x%x block %d errno %d", + rd, bse->elem[elem_idx].size, bse->elem[elem_idx].data, + offst, bse->elem[elem_idx].block, errno)); return NSERROR_SAVE_FAILED; } + LOG(("Read %d bytes into %p from 0x%x block %d", + rd, bse->elem[elem_idx].data, + offst, bse->elem[elem_idx].block)); + return NSERROR_OK; } @@ -1783,20 +1793,17 @@ static nserror store_read_file(struct store_state *state, /* separate file in backing store */ fd = store_open(storestate, bse->ident, elem_idx, O_RDONLY); if (fd < 0) { - LOG(("Open failed")); + LOG(("Open failed %d errno %d", fd, errno)); /** @todo should this invalidate the entry? */ return NSERROR_NOT_FOUND; } - LOG(("Reading %d bytes into %p from file", - bse->elem[elem_idx].size, bse->elem[elem_idx].data)); - while (tot < bse->elem[elem_idx].size) { rd = read(fd, bse->elem[elem_idx].data + tot, bse->elem[elem_idx].size - tot); if (rd <= 0) { - LOG(("read error returned %d", rd)); + LOG(("read error returned %d errno %d", rd, errno)); ret = NSERROR_NOT_FOUND; break; } @@ -1805,6 +1812,8 @@ static nserror store_read_file(struct store_state *state, close(fd); + LOG(("Read %d bytes into %p", tot, bse->elem[elem_idx].data)); + return ret; } -- cgit v1.2.3