Message ID | 1508367333-3237-12-git-send-email-allison.henderson@oracle.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
On Wed, Oct 18, 2017 at 03:55:27PM -0700, Allison Henderson wrote: > Signed-off-by: Allison Henderson <allison.henderson@oracle.com> > --- > fs/xfs/libxfs/xfs_log_rlimit.c | 34 ++++++++++++++++++++++++++++++++++ > 1 file changed, 34 insertions(+) > > diff --git a/fs/xfs/libxfs/xfs_log_rlimit.c b/fs/xfs/libxfs/xfs_log_rlimit.c > index c105979..beec9bf 100644 > --- a/fs/xfs/libxfs/xfs_log_rlimit.c > +++ b/fs/xfs/libxfs/xfs_log_rlimit.c > @@ -39,6 +39,40 @@ xfs_log_calc_max_attrsetm_res( > { > int size; > int nblks; > + struct xfs_trans_resv *resp = M_RES(mp); > + > + /* Calculate extra space needed for parent pointer attributes */ > + if (!xfs_sb_version_hasparent(&mp->m_sb)) { Aren't we supposed to be enlarging tr_log{res,count} if hasparent is true? > + > + /* rename can add/remove/modify 2 parent attributes */ > + resp->tr_rename.tr_logres += > + 2 * max(resp->tr_attrsetm.tr_logres, > + resp->tr_attrrm.tr_logres); > + resp->tr_rename.tr_logcount += > + 2 * max(resp->tr_attrsetm.tr_logcount, > + resp->tr_attrrm.tr_logcount); > + > + /* create will add 1 parent attribute */ > + resp->tr_create.tr_logres += resp->tr_attrsetm.tr_logres; > + resp->tr_create.tr_logcount += resp->tr_attrsetm.tr_logcount; > + > + /* mkdir will add 1 parent attribute */ > + resp->tr_mkdir.tr_logres += resp->tr_attrsetm.tr_logres; > + resp->tr_mkdir.tr_logcount += resp->tr_attrsetm.tr_logcount; > + > + /* link will add 1 parent attribute */ > + resp->tr_link.tr_logres += resp->tr_attrsetm.tr_logres; > + resp->tr_link.tr_logcount += resp->tr_attrsetm.tr_logcount; > + > + /* symlink will add 1 parent attribute */ > + resp->tr_symlink.tr_logres += resp->tr_attrsetm.tr_logres; > + resp->tr_symlink.tr_logcount += resp->tr_attrsetm.tr_logcount; > + > + /* remove will remove 1 parent attribute */ > + resp->tr_remove.tr_logres += resp->tr_attrrm.tr_logres; > + resp->tr_remove.tr_logcount = resp->tr_attrrm.tr_logcount; += ? --D > + } > + > > size = xfs_attr_leaf_entsize_local_max(mp->m_attr_geo->blksize) - > MAXNAMELEN - 1; > -- > 2.7.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 10/19/2017 11:13 AM, Darrick J. Wong wrote: > On Wed, Oct 18, 2017 at 03:55:27PM -0700, Allison Henderson wrote: >> Signed-off-by: Allison Henderson<allison.henderson@oracle.com> >> --- >> fs/xfs/libxfs/xfs_log_rlimit.c | 34 ++++++++++++++++++++++++++++++++++ >> 1 file changed, 34 insertions(+) >> >> diff --git a/fs/xfs/libxfs/xfs_log_rlimit.c b/fs/xfs/libxfs/xfs_log_rlimit.c >> index c105979..beec9bf 100644 >> --- a/fs/xfs/libxfs/xfs_log_rlimit.c >> +++ b/fs/xfs/libxfs/xfs_log_rlimit.c >> @@ -39,6 +39,40 @@ xfs_log_calc_max_attrsetm_res( >> { >> int size; >> int nblks; >> + struct xfs_trans_resv *resp = M_RES(mp); >> + >> + /* Calculate extra space needed for parent pointer attributes */ >> + if (!xfs_sb_version_hasparent(&mp->m_sb)) { > Aren't we supposed to be enlarging tr_log{res,count} if hasparent is true? > >> + >> + /* rename can add/remove/modify 2 parent attributes */ >> + resp->tr_rename.tr_logres += >> + 2 * max(resp->tr_attrsetm.tr_logres, >> + resp->tr_attrrm.tr_logres); >> + resp->tr_rename.tr_logcount += >> + 2 * max(resp->tr_attrsetm.tr_logcount, >> + resp->tr_attrrm.tr_logcount); >> + >> + /* create will add 1 parent attribute */ >> + resp->tr_create.tr_logres += resp->tr_attrsetm.tr_logres; >> + resp->tr_create.tr_logcount += resp->tr_attrsetm.tr_logcount; >> + >> + /* mkdir will add 1 parent attribute */ >> + resp->tr_mkdir.tr_logres += resp->tr_attrsetm.tr_logres; >> + resp->tr_mkdir.tr_logcount += resp->tr_attrsetm.tr_logcount; >> + >> + /* link will add 1 parent attribute */ >> + resp->tr_link.tr_logres += resp->tr_attrsetm.tr_logres; >> + resp->tr_link.tr_logcount += resp->tr_attrsetm.tr_logcount; >> + >> + /* symlink will add 1 parent attribute */ >> + resp->tr_symlink.tr_logres += resp->tr_attrsetm.tr_logres; >> + resp->tr_symlink.tr_logcount += resp->tr_attrsetm.tr_logcount; >> + >> + /* remove will remove 1 parent attribute */ >> + resp->tr_remove.tr_logres += resp->tr_attrrm.tr_logres; >> + resp->tr_remove.tr_logcount = resp->tr_attrrm.tr_logcount; > += ? > > --D I think you're right. Initially I was having trouble getting it to mount because not enough log space was reserved during mkfs time, and I had borrowed this code from xfs_calc_namespace_reservations in the previous patch. So we might need the same fix there too. I will get it corrected. Thx! >> + } >> + >> >> size = xfs_attr_leaf_entsize_local_max(mp->m_attr_geo->blksize) - >> MAXNAMELEN - 1; >> -- >> 2.7.4 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in >> the body of a message tomajordomo@vger.kernel.org >> More majordomo info athttp://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/xfs/libxfs/xfs_log_rlimit.c b/fs/xfs/libxfs/xfs_log_rlimit.c index c105979..beec9bf 100644 --- a/fs/xfs/libxfs/xfs_log_rlimit.c +++ b/fs/xfs/libxfs/xfs_log_rlimit.c @@ -39,6 +39,40 @@ xfs_log_calc_max_attrsetm_res( { int size; int nblks; + struct xfs_trans_resv *resp = M_RES(mp); + + /* Calculate extra space needed for parent pointer attributes */ + if (!xfs_sb_version_hasparent(&mp->m_sb)) { + + /* rename can add/remove/modify 2 parent attributes */ + resp->tr_rename.tr_logres += + 2 * max(resp->tr_attrsetm.tr_logres, + resp->tr_attrrm.tr_logres); + resp->tr_rename.tr_logcount += + 2 * max(resp->tr_attrsetm.tr_logcount, + resp->tr_attrrm.tr_logcount); + + /* create will add 1 parent attribute */ + resp->tr_create.tr_logres += resp->tr_attrsetm.tr_logres; + resp->tr_create.tr_logcount += resp->tr_attrsetm.tr_logcount; + + /* mkdir will add 1 parent attribute */ + resp->tr_mkdir.tr_logres += resp->tr_attrsetm.tr_logres; + resp->tr_mkdir.tr_logcount += resp->tr_attrsetm.tr_logcount; + + /* link will add 1 parent attribute */ + resp->tr_link.tr_logres += resp->tr_attrsetm.tr_logres; + resp->tr_link.tr_logcount += resp->tr_attrsetm.tr_logcount; + + /* symlink will add 1 parent attribute */ + resp->tr_symlink.tr_logres += resp->tr_attrsetm.tr_logres; + resp->tr_symlink.tr_logcount += resp->tr_attrsetm.tr_logcount; + + /* remove will remove 1 parent attribute */ + resp->tr_remove.tr_logres += resp->tr_attrrm.tr_logres; + resp->tr_remove.tr_logcount = resp->tr_attrrm.tr_logcount; + } + size = xfs_attr_leaf_entsize_local_max(mp->m_attr_geo->blksize) - MAXNAMELEN - 1;
Signed-off-by: Allison Henderson <allison.henderson@oracle.com> --- fs/xfs/libxfs/xfs_log_rlimit.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+)