if (exfat_check_max_dentries(inode))
                        return -ENOSPC;
 
-               /* we trust p_dir->size regardless of FAT type */
-               if (exfat_find_last_cluster(sb, p_dir, &last_clu))
-                       return -EIO;
-
                /*
                 * Allocate new cluster to this directory
                 */
-               exfat_chain_set(&clu, last_clu + 1, 0, p_dir->flags);
+               if (ei->start_clu != EXFAT_EOF_CLUSTER) {
+                       /* we trust p_dir->size regardless of FAT type */
+                       if (exfat_find_last_cluster(sb, p_dir, &last_clu))
+                               return -EIO;
+
+                       exfat_chain_set(&clu, last_clu + 1, 0, p_dir->flags);
+               } else {
+                       /* This directory is empty */
+                       exfat_chain_set(&clu, EXFAT_EOF_CLUSTER, 0,
+                                       ALLOC_NO_FAT_CHAIN);
+               }
 
                /* allocate a cluster */
                ret = exfat_alloc_cluster(inode, 1, &clu, IS_DIRSYNC(inode));
                if (exfat_zeroed_cluster(inode, clu.dir))
                        return -EIO;
 
+               if (ei->start_clu == EXFAT_EOF_CLUSTER) {
+                       ei->start_clu = clu.dir;
+                       p_dir->dir = clu.dir;
+               }
+
                /* append to the FAT chain */
                if (clu.flags != p_dir->flags) {
                        /* no-fat-chain bit is disabled,
        info->type = exfat_get_entry_type(ep);
        info->attr = le16_to_cpu(ep->dentry.file.attr);
        info->size = le64_to_cpu(ep2->dentry.stream.valid_size);
-       if ((info->type == TYPE_FILE) && (info->size == 0)) {
+       if (info->size == 0) {
                info->flags = ALLOC_NO_FAT_CHAIN;
                info->start_clu = EXFAT_EOF_CLUSTER;
        } else {
 
        dentries_per_clu = sbi->dentries_per_clu;
 
+       if (p_dir->dir == EXFAT_EOF_CLUSTER)
+               return 0;
+
        exfat_chain_dup(&clu, p_dir);
 
        while (clu.dir != EXFAT_EOF_CLUSTER) {
                }
 
                /* Free the clusters if new_inode is a dir(as if exfat_rmdir) */
-               if (new_entry_type == TYPE_DIR) {
+               if (new_entry_type == TYPE_DIR &&
+                   new_ei->start_clu != EXFAT_EOF_CLUSTER) {
                        /* new_ei, new_clu_to_free */
                        struct exfat_chain new_clu_to_free;