diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-12-13 11:08:03 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-12-13 11:38:53 +0100 |
commit | 4b8e01f7c559ef661910d013347513221f3baca7 (patch) | |
tree | 55e3c62d9afecf5e9bc17a1ef823f9311ff7c280 | |
parent | dosfs: Fix error status handling (diff) | |
download | rtems-4b8e01f7c559ef661910d013347513221f3baca7.tar.bz2 |
dosfs: Add sync_device option for msdos_format()
-rw-r--r-- | cpukit/libfs/src/dosfs/dosfs.h | 5 | ||||
-rw-r--r-- | cpukit/libfs/src/dosfs/msdos_format.c | 5 | ||||
-rw-r--r-- | testsuites/fstests/fsdosfssync01/init.c | 7 |
3 files changed, 16 insertions, 1 deletions
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 @@ -95,6 +95,11 @@ typedef struct { bool skip_alignment; /** + * @brief Synchronize device after write operations. + */ + bool sync_device; + + /** * @brief The amount of info to output. */ int info_level; 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( |