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