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