Commit c07f018b authored by Darrick J. Wong's avatar Darrick J. Wong

xfs: use local variables for name and value length in _attri_commit_pass2

We're about to start using tagged unions in the xattr log format, so
create a bunch of local variables in the recovery function so we only
have to decode the log item fields once.
Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent 0aeeeb79
...@@ -738,9 +738,11 @@ xlog_recover_attri_commit_pass2( ...@@ -738,9 +738,11 @@ xlog_recover_attri_commit_pass2(
struct xfs_attri_log_item *attrip; struct xfs_attri_log_item *attrip;
struct xfs_attri_log_format *attri_formatp; struct xfs_attri_log_format *attri_formatp;
struct xfs_attri_log_nameval *nv; struct xfs_attri_log_nameval *nv;
const void *attr_value = NULL;
const void *attr_name; const void *attr_name;
const void *attr_value = NULL;
size_t len; size_t len;
unsigned int name_len = 0;
unsigned int value_len = 0;
unsigned int op, i = 0; unsigned int op, i = 0;
/* Validate xfs_attri_log_format before the large memory allocation */ /* Validate xfs_attri_log_format before the large memory allocation */
...@@ -769,6 +771,8 @@ xlog_recover_attri_commit_pass2( ...@@ -769,6 +771,8 @@ xlog_recover_attri_commit_pass2(
attri_formatp, len); attri_formatp, len);
return -EFSCORRUPTED; return -EFSCORRUPTED;
} }
name_len = attri_formatp->alfi_name_len;
value_len = attri_formatp->alfi_value_len;
break; break;
case XFS_ATTRI_OP_FLAGS_REMOVE: case XFS_ATTRI_OP_FLAGS_REMOVE:
/* Log item, attr name */ /* Log item, attr name */
...@@ -777,6 +781,7 @@ xlog_recover_attri_commit_pass2( ...@@ -777,6 +781,7 @@ xlog_recover_attri_commit_pass2(
attri_formatp, len); attri_formatp, len);
return -EFSCORRUPTED; return -EFSCORRUPTED;
} }
name_len = attri_formatp->alfi_name_len;
break; break;
default: default:
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp,
...@@ -786,15 +791,14 @@ xlog_recover_attri_commit_pass2( ...@@ -786,15 +791,14 @@ xlog_recover_attri_commit_pass2(
i++; i++;
/* Validate the attr name */ /* Validate the attr name */
if (item->ri_buf[i].i_len != if (item->ri_buf[i].i_len != xlog_calc_iovec_len(name_len)) {
xlog_calc_iovec_len(attri_formatp->alfi_name_len)) {
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp,
attri_formatp, len); attri_formatp, len);
return -EFSCORRUPTED; return -EFSCORRUPTED;
} }
attr_name = item->ri_buf[i].i_addr; attr_name = item->ri_buf[i].i_addr;
if (!xfs_attr_namecheck(attr_name, attri_formatp->alfi_name_len)) { if (!xfs_attr_namecheck(attr_name, name_len)) {
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp,
attri_formatp, len); attri_formatp, len);
return -EFSCORRUPTED; return -EFSCORRUPTED;
...@@ -802,8 +806,8 @@ xlog_recover_attri_commit_pass2( ...@@ -802,8 +806,8 @@ xlog_recover_attri_commit_pass2(
i++; i++;
/* Validate the attr value, if present */ /* Validate the attr value, if present */
if (attri_formatp->alfi_value_len != 0) { if (value_len != 0) {
if (item->ri_buf[i].i_len != xlog_calc_iovec_len(attri_formatp->alfi_value_len)) { if (item->ri_buf[i].i_len != xlog_calc_iovec_len(value_len)) {
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp,
item->ri_buf[0].i_addr, item->ri_buf[0].i_addr,
item->ri_buf[0].i_len); item->ri_buf[0].i_len);
...@@ -827,7 +831,7 @@ xlog_recover_attri_commit_pass2( ...@@ -827,7 +831,7 @@ xlog_recover_attri_commit_pass2(
switch (op) { switch (op) {
case XFS_ATTRI_OP_FLAGS_REMOVE: case XFS_ATTRI_OP_FLAGS_REMOVE:
/* Regular remove operations operate only on names. */ /* Regular remove operations operate only on names. */
if (attr_value != NULL || attri_formatp->alfi_value_len != 0) { if (attr_value != NULL || value_len != 0) {
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp,
attri_formatp, len); attri_formatp, len);
return -EFSCORRUPTED; return -EFSCORRUPTED;
...@@ -840,7 +844,7 @@ xlog_recover_attri_commit_pass2( ...@@ -840,7 +844,7 @@ xlog_recover_attri_commit_pass2(
* and do not take a newname. Values are optional for set and * and do not take a newname. Values are optional for set and
* replace. * replace.
*/ */
if (attr_name == NULL || attri_formatp->alfi_name_len == 0) { if (attr_name == NULL || name_len == 0) {
XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp, XFS_CORRUPTION_ERROR(__func__, XFS_ERRLEVEL_LOW, mp,
attri_formatp, len); attri_formatp, len);
return -EFSCORRUPTED; return -EFSCORRUPTED;
...@@ -853,9 +857,8 @@ xlog_recover_attri_commit_pass2( ...@@ -853,9 +857,8 @@ xlog_recover_attri_commit_pass2(
* name/value buffer to the recovered incore log item and drop our * name/value buffer to the recovered incore log item and drop our
* reference. * reference.
*/ */
nv = xfs_attri_log_nameval_alloc(attr_name, nv = xfs_attri_log_nameval_alloc(attr_name, name_len,
attri_formatp->alfi_name_len, attr_value, attr_value, value_len);
attri_formatp->alfi_value_len);
attrip = xfs_attri_init(mp, nv); attrip = xfs_attri_init(mp, nv);
memcpy(&attrip->attri_format, attri_formatp, len); memcpy(&attrip->attri_format, attri_formatp, len);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment