Skip to content

Commit 8bf931f

Browse files
Christoph Hellwigcmaiolino
authored andcommitted
xfs: don't use a xfs_log_iovec for attr_item names and values
These buffers are not directly logged, just use a kvec and remove the xlog_copy_from_iovec helper only used here. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com> Signed-off-by: Carlos Maiolino <cem@kernel.org>
1 parent e870cbe commit 8bf931f

3 files changed

Lines changed: 60 additions & 66 deletions

File tree

fs/xfs/xfs_attr_item.c

Lines changed: 56 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -91,41 +91,37 @@ xfs_attri_log_nameval_alloc(
9191
name_len + new_name_len + value_len +
9292
new_value_len);
9393

94-
nv->name.i_addr = nv + 1;
95-
nv->name.i_len = name_len;
96-
nv->name.i_type = XLOG_REG_TYPE_ATTR_NAME;
97-
memcpy(nv->name.i_addr, name, name_len);
94+
nv->name.iov_base = nv + 1;
95+
nv->name.iov_len = name_len;
96+
memcpy(nv->name.iov_base, name, name_len);
9897

9998
if (new_name_len) {
100-
nv->new_name.i_addr = nv->name.i_addr + name_len;
101-
nv->new_name.i_len = new_name_len;
102-
memcpy(nv->new_name.i_addr, new_name, new_name_len);
99+
nv->new_name.iov_base = nv->name.iov_base + name_len;
100+
nv->new_name.iov_len = new_name_len;
101+
memcpy(nv->new_name.iov_base, new_name, new_name_len);
103102
} else {
104-
nv->new_name.i_addr = NULL;
105-
nv->new_name.i_len = 0;
103+
nv->new_name.iov_base = NULL;
104+
nv->new_name.iov_len = 0;
106105
}
107-
nv->new_name.i_type = XLOG_REG_TYPE_ATTR_NEWNAME;
108106

109107
if (value_len) {
110-
nv->value.i_addr = nv->name.i_addr + name_len + new_name_len;
111-
nv->value.i_len = value_len;
112-
memcpy(nv->value.i_addr, value, value_len);
108+
nv->value.iov_base = nv->name.iov_base + name_len + new_name_len;
109+
nv->value.iov_len = value_len;
110+
memcpy(nv->value.iov_base, value, value_len);
113111
} else {
114-
nv->value.i_addr = NULL;
115-
nv->value.i_len = 0;
112+
nv->value.iov_base = NULL;
113+
nv->value.iov_len = 0;
116114
}
117-
nv->value.i_type = XLOG_REG_TYPE_ATTR_VALUE;
118115

119116
if (new_value_len) {
120-
nv->new_value.i_addr = nv->name.i_addr + name_len +
117+
nv->new_value.iov_base = nv->name.iov_base + name_len +
121118
new_name_len + value_len;
122-
nv->new_value.i_len = new_value_len;
123-
memcpy(nv->new_value.i_addr, new_value, new_value_len);
119+
nv->new_value.iov_len = new_value_len;
120+
memcpy(nv->new_value.iov_base, new_value, new_value_len);
124121
} else {
125-
nv->new_value.i_addr = NULL;
126-
nv->new_value.i_len = 0;
122+
nv->new_value.iov_base = NULL;
123+
nv->new_value.iov_len = 0;
127124
}
128-
nv->new_value.i_type = XLOG_REG_TYPE_ATTR_NEWVALUE;
129125

130126
refcount_set(&nv->refcount, 1);
131127
return nv;
@@ -170,21 +166,21 @@ xfs_attri_item_size(
170166

171167
*nvecs += 2;
172168
*nbytes += sizeof(struct xfs_attri_log_format) +
173-
xlog_calc_iovec_len(nv->name.i_len);
169+
xlog_calc_iovec_len(nv->name.iov_len);
174170

175-
if (nv->new_name.i_len) {
171+
if (nv->new_name.iov_len) {
176172
*nvecs += 1;
177-
*nbytes += xlog_calc_iovec_len(nv->new_name.i_len);
173+
*nbytes += xlog_calc_iovec_len(nv->new_name.iov_len);
178174
}
179175

180-
if (nv->value.i_len) {
176+
if (nv->value.iov_len) {
181177
*nvecs += 1;
182-
*nbytes += xlog_calc_iovec_len(nv->value.i_len);
178+
*nbytes += xlog_calc_iovec_len(nv->value.iov_len);
183179
}
184180

185-
if (nv->new_value.i_len) {
181+
if (nv->new_value.iov_len) {
186182
*nvecs += 1;
187-
*nbytes += xlog_calc_iovec_len(nv->new_value.i_len);
183+
*nbytes += xlog_calc_iovec_len(nv->new_value.iov_len);
188184
}
189185
}
190186

@@ -212,31 +208,36 @@ xfs_attri_item_format(
212208
* the log recovery.
213209
*/
214210

215-
ASSERT(nv->name.i_len > 0);
211+
ASSERT(nv->name.iov_len > 0);
216212
attrip->attri_format.alfi_size++;
217213

218-
if (nv->new_name.i_len > 0)
214+
if (nv->new_name.iov_len > 0)
219215
attrip->attri_format.alfi_size++;
220216

221-
if (nv->value.i_len > 0)
217+
if (nv->value.iov_len > 0)
222218
attrip->attri_format.alfi_size++;
223219

224-
if (nv->new_value.i_len > 0)
220+
if (nv->new_value.iov_len > 0)
225221
attrip->attri_format.alfi_size++;
226222

227223
xlog_copy_iovec(lv, &vecp, XLOG_REG_TYPE_ATTRI_FORMAT,
228224
&attrip->attri_format,
229225
sizeof(struct xfs_attri_log_format));
230-
xlog_copy_from_iovec(lv, &vecp, &nv->name);
231226

232-
if (nv->new_name.i_len > 0)
233-
xlog_copy_from_iovec(lv, &vecp, &nv->new_name);
227+
xlog_copy_iovec(lv, &vecp, XLOG_REG_TYPE_ATTR_NAME, nv->name.iov_base,
228+
nv->name.iov_len);
234229

235-
if (nv->value.i_len > 0)
236-
xlog_copy_from_iovec(lv, &vecp, &nv->value);
230+
if (nv->new_name.iov_len > 0)
231+
xlog_copy_iovec(lv, &vecp, XLOG_REG_TYPE_ATTR_NEWNAME,
232+
nv->new_name.iov_base, nv->new_name.iov_len);
237233

238-
if (nv->new_value.i_len > 0)
239-
xlog_copy_from_iovec(lv, &vecp, &nv->new_value);
234+
if (nv->value.iov_len > 0)
235+
xlog_copy_iovec(lv, &vecp, XLOG_REG_TYPE_ATTR_VALUE,
236+
nv->value.iov_base, nv->value.iov_len);
237+
238+
if (nv->new_value.iov_len > 0)
239+
xlog_copy_iovec(lv, &vecp, XLOG_REG_TYPE_ATTR_NEWVALUE,
240+
nv->new_value.iov_base, nv->new_value.iov_len);
240241
}
241242

242243
/*
@@ -383,22 +384,22 @@ xfs_attr_log_item(
383384
attrp->alfi_ino = args->dp->i_ino;
384385
ASSERT(!(attr->xattri_op_flags & ~XFS_ATTRI_OP_FLAGS_TYPE_MASK));
385386
attrp->alfi_op_flags = attr->xattri_op_flags;
386-
attrp->alfi_value_len = nv->value.i_len;
387+
attrp->alfi_value_len = nv->value.iov_len;
387388

388389
switch (xfs_attr_log_item_op(attrp)) {
389390
case XFS_ATTRI_OP_FLAGS_PPTR_REPLACE:
390-
ASSERT(nv->value.i_len == nv->new_value.i_len);
391+
ASSERT(nv->value.iov_len == nv->new_value.iov_len);
391392

392393
attrp->alfi_igen = VFS_I(args->dp)->i_generation;
393-
attrp->alfi_old_name_len = nv->name.i_len;
394-
attrp->alfi_new_name_len = nv->new_name.i_len;
394+
attrp->alfi_old_name_len = nv->name.iov_len;
395+
attrp->alfi_new_name_len = nv->new_name.iov_len;
395396
break;
396397
case XFS_ATTRI_OP_FLAGS_PPTR_REMOVE:
397398
case XFS_ATTRI_OP_FLAGS_PPTR_SET:
398399
attrp->alfi_igen = VFS_I(args->dp)->i_generation;
399400
fallthrough;
400401
default:
401-
attrp->alfi_name_len = nv->name.i_len;
402+
attrp->alfi_name_len = nv->name.iov_len;
402403
break;
403404
}
404405

@@ -687,14 +688,14 @@ xfs_attri_recover_work(
687688
args->dp = ip;
688689
args->geo = mp->m_attr_geo;
689690
args->whichfork = XFS_ATTR_FORK;
690-
args->name = nv->name.i_addr;
691-
args->namelen = nv->name.i_len;
692-
args->new_name = nv->new_name.i_addr;
693-
args->new_namelen = nv->new_name.i_len;
694-
args->value = nv->value.i_addr;
695-
args->valuelen = nv->value.i_len;
696-
args->new_value = nv->new_value.i_addr;
697-
args->new_valuelen = nv->new_value.i_len;
691+
args->name = nv->name.iov_base;
692+
args->namelen = nv->name.iov_len;
693+
args->new_name = nv->new_name.iov_base;
694+
args->new_namelen = nv->new_name.iov_len;
695+
args->value = nv->value.iov_base;
696+
args->valuelen = nv->value.iov_len;
697+
args->new_value = nv->new_value.iov_base;
698+
args->new_valuelen = nv->new_value.iov_len;
698699
args->attr_filter = attrp->alfi_attr_filter & XFS_ATTRI_FILTER_MASK;
699700
args->op_flags = XFS_DA_OP_RECOVERY | XFS_DA_OP_OKNOENT |
700701
XFS_DA_OP_LOGGED;
@@ -751,8 +752,8 @@ xfs_attr_recover_work(
751752
*/
752753
attrp = &attrip->attri_format;
753754
if (!xfs_attri_validate(mp, attrp) ||
754-
!xfs_attr_namecheck(attrp->alfi_attr_filter, nv->name.i_addr,
755-
nv->name.i_len))
755+
!xfs_attr_namecheck(attrp->alfi_attr_filter, nv->name.iov_base,
756+
nv->name.iov_len))
756757
return -EFSCORRUPTED;
757758

758759
attr = xfs_attri_recover_work(mp, dfp, attrp, &ip, nv);

fs/xfs/xfs_attr_item.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ struct xfs_mount;
1212
struct kmem_zone;
1313

1414
struct xfs_attri_log_nameval {
15-
struct xfs_log_iovec name;
16-
struct xfs_log_iovec new_name; /* PPTR_REPLACE only */
17-
struct xfs_log_iovec value;
18-
struct xfs_log_iovec new_value; /* PPTR_REPLACE only */
15+
struct kvec name;
16+
struct kvec new_name; /* PPTR_REPLACE only */
17+
struct kvec value;
18+
struct kvec new_value; /* PPTR_REPLACE only */
1919
refcount_t refcount;
2020

2121
/* name and value follow the end of this struct */

fs/xfs/xfs_log.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -88,13 +88,6 @@ xlog_copy_iovec(struct xfs_log_vec *lv, struct xfs_log_iovec **vecp,
8888
return buf;
8989
}
9090

91-
static inline void *
92-
xlog_copy_from_iovec(struct xfs_log_vec *lv, struct xfs_log_iovec **vecp,
93-
const struct xfs_log_iovec *src)
94-
{
95-
return xlog_copy_iovec(lv, vecp, src->i_type, src->i_addr, src->i_len);
96-
}
97-
9891
/*
9992
* By comparing each component, we don't have to worry about extra
10093
* endian issues in treating two 32 bit numbers as one 64 bit number

0 commit comments

Comments
 (0)