diff --git a/kernel/sy_old/sy_generic.c b/kernel/sy_old/sy_generic.c index 6230aa11..3d6c8553 100644 --- a/kernel/sy_old/sy_generic.c +++ b/kernel/sy_old/sy_generic.c @@ -1097,6 +1097,7 @@ int ordered_symlink(const char *oldpath, /* Automatically create any missing path dirs */ while (unlikely(status < 0 && status != -EEXIST)) { + struct kstat test = {}; int old_len; int check; @@ -1117,6 +1118,10 @@ int ordered_symlink(const char *oldpath, dir_len--; if (dir_len <= 0 || dir_len >= old_len) break; + /* do not try to tackle existing dir_path */ + check = mars_stat(dir_path, &test, true); + if (check >= 0 && S_ISDIR(test.mode)) + break; /* create the interim dir */ check = mars_mkdir(dir_path); if (check >= 0) {