From 4b8e01f7c559ef661910d013347513221f3baca7 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 13 Dec 2012 11:08:03 +0100 Subject: dosfs: Add sync_device option for msdos_format() --- cpukit/libfs/src/dosfs/dosfs.h | 5 +++++ cpukit/libfs/src/dosfs/msdos_format.c | 5 +++++ testsuites/fstests/fsdosfssync01/init.c | 7 ++++++- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/cpukit/libfs/src/dosfs/dosfs.h b/cpukit/libfs/src/dosfs/dosfs.h index 48574664ea..2374e63f2b 100644 --- a/cpukit/libfs/src/dosfs/dosfs.h +++ b/cpukit/libfs/src/dosfs/dosfs.h @@ -94,6 +94,11 @@ typedef struct { */ bool skip_alignment; + /** + * @brief Synchronize device after write operations. + */ + bool sync_device; + /** * @brief The amount of info to output. */ diff --git a/cpukit/libfs/src/dosfs/msdos_format.c b/cpukit/libfs/src/dosfs/msdos_format.c index 0bf3f398ef..0b30caf030 100644 --- a/cpukit/libfs/src/dosfs/msdos_format.c +++ b/cpukit/libfs/src/dosfs/msdos_format.c @@ -1251,6 +1251,11 @@ int msdos_format tmp_sec); } } + + if (ret_val == 0 && rqdata != NULL && rqdata->sync_device) { + ret_val = rtems_disk_fd_sync(fd); + } + /* * cleanup: * sync and unlock disk diff --git a/testsuites/fstests/fsdosfssync01/init.c b/testsuites/fstests/fsdosfssync01/init.c index 72481b29b8..fc38e2cfd9 100644 --- a/testsuites/fstests/fsdosfssync01/init.c +++ b/testsuites/fstests/fsdosfssync01/init.c @@ -89,6 +89,11 @@ static void check_file_size(const char *file, off_t size) static void test(const char *rda, const char *mnt, const char *file) { + static const msdos_format_request_param_t rqdata = { + .quick_format = true, + .sync_device = true + }; + rtems_status_code sc; int disk_fd; int rv; @@ -99,7 +104,7 @@ static void test(const char *rda, const char *mnt, const char *file) disk_fd = open(rda, O_RDWR); rtems_test_assert(disk_fd >= 0); - rv = msdos_format(rda, NULL); + rv = msdos_format(rda, &rqdata); rtems_test_assert(rv == 0); rv = mount_and_make_target_path( -- cgit v1.2.3