[f2fs] Write name in ipage
When update inode, i_name will be written.
Also, add assert to check if names in dentry and ipage are same.
If they are different, one of ipage and dentry is written incorrectly.
Test:
- fx test fs-tests large-fs-tests
Change-Id: I0f10bf5ce80d975d60ab55f1d4909b18fc406c88
Reviewed-on: https://fuchsia-review.googlesource.com/c/third_party/f2fs/+/540142
Reviewed-by: Brett Wilson <brettw@google.com>
diff --git a/namei.cc b/namei.cc
index ea7a8a4..5128ae5 100644
--- a/namei.cc
+++ b/namei.cc
@@ -406,7 +406,7 @@
}
old_vnode = old_vn_ref.get();
- old_vnode->i_name_sp_ = oldname;
+ ZX_ASSERT(old_vnode->i_name_sp_.GetStringView().compare(oldname) == 0);
if (!old_vnode->IsDirectory() && (src_must_be_dir || dst_must_be_dir))
return ZX_ERR_NOT_DIR;
@@ -454,7 +454,7 @@
}
new_vnode = new_vn_ref.get();
- new_vnode->i_name_sp_ = newname;
+ ZX_ASSERT(new_vnode->i_name_sp_.GetStringView().compare(newname) == 0);
if (!new_vnode->IsDirectory() && (src_must_be_dir || dst_must_be_dir))
return ZX_ERR_NOT_DIR;
@@ -483,6 +483,7 @@
return ZX_ERR_NOT_EMPTY;
}
+ old_vnode->i_name_sp_ = newname;
new_dir->SetLink(new_entry, new_page, old_vnode);
new_vnode->i_ctime_ = cur_time;
diff --git a/vnode.cc b/vnode.cc
index 88af9db..1af9a3a 100644
--- a/vnode.cc
+++ b/vnode.cc
@@ -340,6 +340,10 @@
ri->i_xattr_nid = CpuToLe(fi_.i_xattr_nid);
ri->i_flags = CpuToLe(fi_.i_flags);
ri->i_generation = CpuToLe(i_generation_);
+
+ ri->i_namelen = CpuToLe(i_name_sp_.GetStringView().length());
+ memcpy(ri->i_name, i_name_sp_.GetStringView().data(), i_name_sp_.GetStringView().length());
+
#if 0 // porting needed
// set_page_dirty(node_page);
#else