On Thu, 12 Sep 2024 06:47:20 +0000 Gautham Ananthakrishna <gautham.ananthakrishna@xxxxxxxxxx> wrote: > One of our customers reported a crash and a corrupted ocfs2 filesystem. > +++ b/fs/ocfs2/refcounttree.c > @@ -25,6 +25,7 @@ > #include "namei.h" > #include "ocfs2_trace.h" > #include "file.h" > +#include "symlink.h" > > #include <linux/bio.h> > #include <linux/blkdev.h> > @@ -4155,8 +4156,9 @@ static int __ocfs2_reflink(struct dentry *old_dentry, > int ret; > struct inode *inode = d_inode(old_dentry); > struct buffer_head *new_bh = NULL; > + struct ocfs2_inode_info *oi = OCFS2_I(inode); > > - if (OCFS2_I(inode)->ip_flags & OCFS2_INODE_SYSTEM_FILE) { > + if (oi->ip_flags & OCFS2_INODE_SYSTEM_FILE) { > ret = -EINVAL; > mlog_errno(ret); > goto out; > @@ -4182,6 +4184,26 @@ static int __ocfs2_reflink(struct dentry *old_dentry, > goto out_unlock; > } > > + if ((oi->ip_dyn_features & OCFS2_HAS_XATTR_FL) && > + (oi->ip_dyn_features & OCFS2_INLINE_XATTR_FL)) { > + /* > + * Adjust extent record count to reserve space for extended attribute. > + * Inline data count had been adjusted in ocfs2_duplicate_inline_data(). > + */ > + struct ocfs2_inode_info *new_oi = OCFS2_I(new_inode); > + > + if (!(new_oi->ip_dyn_features & OCFS2_INLINE_DATA_FL) && > + !(ocfs2_inode_is_fast_symlink(new_inode))) { > + struct ocfs2_dinode *new_di = new_bh->b_data; > + struct ocfs2_dinode *old_di = old_bh->b_data; fs/ocfs2/refcounttree.c: In function '__ocfs2_reflink': fs/ocfs2/refcounttree.c:4190:55: error: initialization of 'struct ocfs2_dinode *' from incompatible pointer type 'char *' [-Werror=incompatible-pointer-types] 4190 | struct ocfs2_dinode *new_di = new_bh->b_data; | ^~~~~~ fs/ocfs2/refcounttree.c:4191:55: error: initialization of 'struct ocfs2_dinode *' from incompatible pointer type 'char *' [-Werror=incompatible-pointer-types] 4191 | struct ocfs2_dinode *old_di = old_bh->b_data; | ^~~~~~ cc1: all warnings being treated as errors I could just add the typecasts, but that doesn't give me a tested patch :(