We must create a sparse file first before calling stat().

Fixes: eb9d8037ed3b ("f2fs-tools: avoid mounting f2fs if tools already open the 
device")
Signed-off-by: Jaegeuk Kim <[email protected]>
---
 lib/libf2fs.c | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/lib/libf2fs.c b/lib/libf2fs.c
index bf2830d..a1a5c02 100644
--- a/lib/libf2fs.c
+++ b/lib/libf2fs.c
@@ -793,17 +793,24 @@ int get_device_info(int i)
 #endif
        struct device_info *dev = c.devices + i;
 
+       if (c.sparse_mode) {
+               fd = open(dev->path, O_RDWR | O_CREAT | O_BINARY, 0644);
+               if (fd < 0) {
+                       MSG(0, "\tError: Failed to open a sparse file!\n");
+                       return -1;
+               }
+       }
+
        stat_buf = malloc(sizeof(struct stat));
        ASSERT(stat_buf);
-       if (stat(dev->path, stat_buf) < 0 ) {
-               MSG(0, "\tError: Failed to get the device stat!\n");
-               free(stat_buf);
-               return -1;
-       }
 
-       if (c.sparse_mode) {
-               fd = open(dev->path, O_RDWR | O_CREAT | O_BINARY, 0644);
-       } else {
+       if (!c.sparse_mode) {
+               if (stat(dev->path, stat_buf) < 0 ) {
+                       MSG(0, "\tError: Failed to get the device stat!\n");
+                       free(stat_buf);
+                       return -1;
+               }
+
                if (S_ISBLK(stat_buf->st_mode))
                        fd = open(dev->path, O_RDWR | O_EXCL);
                else
-- 
2.19.0.605.g01d371f741-goog



_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to