Lines Matching defs: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 ret = erofs_init_metabuf(&it.buf, sb, erofs_inode_in_metabox(inode));
83 it.pos = erofs_iloc(inode) + vi->inode_isize;
86 it.kaddr = erofs_bread(&it.buf, it.pos, true);
87 if (IS_ERR(it.kaddr)) {
88 ret = PTR_ERR(it.kaddr);
92 ih = it.kaddr;
98 erofs_put_metabuf(&it.buf);
104 it.pos += sizeof(struct erofs_xattr_ibody_header);
107 it.kaddr = erofs_bread(&it.buf, it.pos, true);
108 if (IS_ERR(it.kaddr)) {
111 ret = PTR_ERR(it.kaddr);
114 vi->xattr_shared_xattrs[i] = le32_to_cpu(*(__le32 *)it.kaddr);
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, it->pos, true);
189 if (IS_ERR(it->kaddr))
190 return PTR_ERR(it->kaddr);
192 src = it->kaddr;
194 erofs_blkoff(sb, it->pos), len - processed);
195 memcpy(it->buffer + it->buffer_ofs, src, slice);
196 it->buffer_ofs += slice;
197 it->pos += slice;
202 static int erofs_listxattr_foreach(struct erofs_xattr_iter *it)
210 entry = *(struct erofs_xattr_entry *)it->kaddr;
211 it->pos += sizeof(struct erofs_xattr_entry);
215 struct erofs_sb_info *sbi = EROFS_SB(it->sb);
226 prefix = erofs_xattr_prefix(base_index, it->dentry);
232 if (!it->buffer) {
233 it->buffer_ofs += name_total;
237 if (it->buffer_ofs + name_total > it->buffer_size)
240 memcpy(it->buffer + it->buffer_ofs, prefix, prefix_len);
241 memcpy(it->buffer + it->buffer_ofs + prefix_len, infix, infix_len);
242 it->buffer_ofs += prefix_len + infix_len;
245 err = erofs_xattr_copy_to_buffer(it, entry.e_name_len);
249 it->buffer[it->buffer_ofs++] = '\0';
253 static int erofs_getxattr_foreach(struct erofs_xattr_iter *it)
255 struct super_block *sb = it->sb;
260 entry = *(struct erofs_xattr_entry *)it->kaddr;
261 it->pos += sizeof(struct erofs_xattr_entry);
273 if (it->index != pf->prefix->base_index ||
274 it->name.len != entry.e_name_len + pf->infix_len)
277 if (memcmp(it->name.name, pf->prefix->infix, pf->infix_len))
280 it->infix_len = pf->infix_len;
282 if (it->index != entry.e_name_index ||
283 it->name.len != entry.e_name_len)
286 it->infix_len = 0;
291 it->kaddr = erofs_bread(&it->buf, it->pos, true);
292 if (IS_ERR(it->kaddr))
293 return PTR_ERR(it->kaddr);
296 sb->s_blocksize - erofs_blkoff(sb, it->pos),
298 if (memcmp(it->name.name + it->infix_len + processed,
299 it->kaddr, slice))
301 it->pos += slice;
305 if (!it->buffer) {
306 it->buffer_ofs = value_sz;
310 if (it->buffer_size < value_sz)
313 return erofs_xattr_copy_to_buffer(it, value_sz);
316 static int erofs_xattr_iter_inline(struct erofs_xattr_iter *it,
331 ret = erofs_init_metabuf(&it->buf, it->sb, erofs_inode_in_metabox(inode));
335 it->pos = erofs_iloc(inode) + vi->inode_isize + xattr_header_sz;
338 it->kaddr = erofs_bread(&it->buf, it->pos, true);
339 if (IS_ERR(it->kaddr))
340 return PTR_ERR(it->kaddr);
342 entry_sz = erofs_xattr_entry_size(it->kaddr);
349 next_pos = it->pos + entry_sz;
352 ret = erofs_getxattr_foreach(it);
354 ret = erofs_listxattr_foreach(it);
358 it->pos = next_pos;
363 static int erofs_xattr_iter_shared(struct erofs_xattr_iter *it,
367 struct super_block *const sb = it->sb;
372 ret = erofs_init_metabuf(&it->buf, sb,
378 it->pos = erofs_pos(sb, sbi->xattr_blkaddr) +
380 it->kaddr = erofs_bread(&it->buf, it->pos, true);
381 if (IS_ERR(it->kaddr))
382 return PTR_ERR(it->kaddr);
385 ret = erofs_getxattr_foreach(it);
387 ret = erofs_listxattr_foreach(it);
399 struct erofs_xattr_iter it;
419 it.index = index;
420 it.name = QSTR(name);
421 if (it.name.len > EROFS_NAME_LEN)
424 it.sb = inode->i_sb;
425 it.buf = __EROFS_BUF_INITIALIZER;
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 it.dentry = dentry;
452 it.buffer = buffer;
453 it.buffer_size = buffer_size;
454 it.buffer_ofs = 0;
456 ret = erofs_xattr_iter_inline(&it, inode, false);
458 ret = erofs_xattr_iter_shared(&it, inode, false);
461 erofs_put_metabuf(&it.buf);
462 return ret ? ret : it.buffer_ofs;