Lines Matching refs:it
31 struct erofs_xattr_iter it;
57 * 1) it is not enough to contain erofs_xattr_ibody_header then
58 * ->xattr_isize should be 0 (it means no xattr);
59 * 2) it is just to contain erofs_xattr_ibody_header, which is on-disk
79 it.buf = __EROFS_BUF_INITIALIZER;
80 erofs_init_metabuf(&it.buf, sb);
81 it.pos = erofs_iloc(inode) + vi->inode_isize;
84 it.kaddr = erofs_bread(&it.buf, erofs_blknr(sb, it.pos), EROFS_KMAP);
85 if (IS_ERR(it.kaddr)) {
86 ret = PTR_ERR(it.kaddr);
90 ih = it.kaddr + erofs_blkoff(sb, it.pos);
96 erofs_put_metabuf(&it.buf);
102 it.pos += sizeof(struct erofs_xattr_ibody_header);
105 it.kaddr = erofs_bread(&it.buf, erofs_blknr(sb, it.pos),
107 if (IS_ERR(it.kaddr)) {
110 ret = PTR_ERR(it.kaddr);
114 (it.kaddr + erofs_blkoff(sb, it.pos)));
115 it.pos += sizeof(__le32);
117 erofs_put_metabuf(&it.buf);
180 static int erofs_xattr_copy_to_buffer(struct erofs_xattr_iter *it,
184 struct super_block *sb = it->sb;
188 it->kaddr = erofs_bread(&it->buf, erofs_blknr(sb, it->pos),
190 if (IS_ERR(it->kaddr))
191 return PTR_ERR(it->kaddr);
193 src = it->kaddr + erofs_blkoff(sb, it->pos);
195 erofs_blkoff(sb, it->pos), len - processed);
196 memcpy(it->buffer + it->buffer_ofs, src, slice);
197 it->buffer_ofs += slice;
198 it->pos += slice;
203 static int erofs_listxattr_foreach(struct erofs_xattr_iter *it)
212 (it->kaddr + erofs_blkoff(it->sb, it->pos));
213 it->pos += sizeof(struct erofs_xattr_entry);
217 struct erofs_sb_info *sbi = EROFS_SB(it->sb);
228 prefix = erofs_xattr_prefix(base_index, it->dentry);
234 if (!it->buffer) {
235 it->buffer_ofs += name_total;
239 if (it->buffer_ofs + name_total > it->buffer_size)
242 memcpy(it->buffer + it->buffer_ofs, prefix, prefix_len);
243 memcpy(it->buffer + it->buffer_ofs + prefix_len, infix, infix_len);
244 it->buffer_ofs += prefix_len + infix_len;
247 err = erofs_xattr_copy_to_buffer(it, entry.e_name_len);
251 it->buffer[it->buffer_ofs++] = '\0';
255 static int erofs_getxattr_foreach(struct erofs_xattr_iter *it)
257 struct super_block *sb = it->sb;
263 (it->kaddr + erofs_blkoff(sb, it->pos));
264 it->pos += sizeof(struct erofs_xattr_entry);
276 if (it->index != pf->prefix->base_index ||
277 it->name.len != entry.e_name_len + pf->infix_len)
280 if (memcmp(it->name.name, pf->prefix->infix, pf->infix_len))
283 it->infix_len = pf->infix_len;
285 if (it->index != entry.e_name_index ||
286 it->name.len != entry.e_name_len)
289 it->infix_len = 0;
294 it->kaddr = erofs_bread(&it->buf, erofs_blknr(sb, it->pos),
296 if (IS_ERR(it->kaddr))
297 return PTR_ERR(it->kaddr);
300 sb->s_blocksize - erofs_blkoff(sb, it->pos),
302 if (memcmp(it->name.name + it->infix_len + processed,
303 it->kaddr + erofs_blkoff(sb, it->pos), slice))
305 it->pos += slice;
309 if (!it->buffer) {
310 it->buffer_ofs = value_sz;
314 if (it->buffer_size < value_sz)
317 return erofs_xattr_copy_to_buffer(it, value_sz);
320 static int erofs_xattr_iter_inline(struct erofs_xattr_iter *it,
336 it->pos = erofs_iloc(inode) + vi->inode_isize + xattr_header_sz;
339 it->kaddr = erofs_bread(&it->buf, erofs_blknr(it->sb, it->pos),
341 if (IS_ERR(it->kaddr))
342 return PTR_ERR(it->kaddr);
344 entry_sz = erofs_xattr_entry_size(it->kaddr +
345 erofs_blkoff(it->sb, it->pos));
352 next_pos = it->pos + entry_sz;
355 ret = erofs_getxattr_foreach(it);
357 ret = erofs_listxattr_foreach(it);
361 it->pos = next_pos;
366 static int erofs_xattr_iter_shared(struct erofs_xattr_iter *it,
370 struct super_block *const sb = it->sb;
376 it->pos = erofs_pos(sb, sbi->xattr_blkaddr) +
378 it->kaddr = erofs_bread(&it->buf, erofs_blknr(sb, it->pos),
380 if (IS_ERR(it->kaddr))
381 return PTR_ERR(it->kaddr);
384 ret = erofs_getxattr_foreach(it);
386 ret = erofs_listxattr_foreach(it);
398 struct erofs_xattr_iter it;
418 it.index = index;
419 it.name = (struct qstr)QSTR_INIT(name, strlen(name));
420 if (it.name.len > EROFS_NAME_LEN)
423 it.sb = inode->i_sb;
424 it.buf = __EROFS_BUF_INITIALIZER;
425 erofs_init_metabuf(&it.buf, it.sb);
426 it.buffer = buffer;
427 it.buffer_size = buffer_size;
428 it.buffer_ofs = 0;
430 ret = erofs_xattr_iter_inline(&it, inode, true);
432 ret = erofs_xattr_iter_shared(&it, inode, true);
433 erofs_put_metabuf(&it.buf);
434 return ret ? ret : it.buffer_ofs;
440 struct erofs_xattr_iter it;
449 it.sb = dentry->d_sb;
450 it.buf = __EROFS_BUF_INITIALIZER;
451 erofs_init_metabuf(&it.buf, it.sb);
452 it.dentry = dentry;
453 it.buffer = buffer;
454 it.buffer_size = buffer_size;
455 it.buffer_ofs = 0;
457 ret = erofs_xattr_iter_inline(&it, inode, false);
459 ret = erofs_xattr_iter_shared(&it, inode, false);
462 erofs_put_metabuf(&it.buf);
463 return ret ? ret : it.buffer_ofs;