summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-12-13 11:08:03 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-12-13 11:38:53 +0100
commit4b8e01f7c559ef661910d013347513221f3baca7 (patch)
tree55e3c62d9afecf5e9bc17a1ef823f9311ff7c280
parentdosfs: Fix error status handling (diff)
downloadrtems-4b8e01f7c559ef661910d013347513221f3baca7.tar.bz2
dosfs: Add sync_device option for msdos_format()
-rw-r--r--cpukit/libfs/src/dosfs/dosfs.h5
-rw-r--r--cpukit/libfs/src/dosfs/msdos_format.c5
-rw-r--r--testsuites/fstests/fsdosfssync01/init.c7
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(