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, 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; 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, it.pos, EROFS_KMAP); in erofs_init_inode_xattrs()
106 if (IS_ERR(it.kaddr)) { in erofs_init_inode_xattrs()
109 ret = PTR_ERR(it.kaddr); in erofs_init_inode_xattrs()
112 vi->xattr_shared_xattrs[i] = le32_to_cpu(*(__le32 *)it.kaddr); in erofs_init_inode_xattrs()
113 it.pos += sizeof(__le32); in erofs_init_inode_xattrs()
115 erofs_put_metabuf(&it.buf); in erofs_init_inode_xattrs()
178 static int erofs_xattr_copy_to_buffer(struct erofs_xattr_iter *it, in erofs_xattr_copy_to_buffer() argument
182 struct super_block *sb = it->sb; in erofs_xattr_copy_to_buffer()
186 it->kaddr = erofs_bread(&it->buf, it->pos, EROFS_KMAP); in erofs_xattr_copy_to_buffer()
187 if (IS_ERR(it->kaddr)) in erofs_xattr_copy_to_buffer()
188 return PTR_ERR(it->kaddr); in erofs_xattr_copy_to_buffer()
190 src = it->kaddr; in erofs_xattr_copy_to_buffer()
192 erofs_blkoff(sb, it->pos), len - processed); in erofs_xattr_copy_to_buffer()
193 memcpy(it->buffer + it->buffer_ofs, src, slice); in erofs_xattr_copy_to_buffer()
194 it->buffer_ofs += slice; in erofs_xattr_copy_to_buffer()
195 it->pos += slice; in erofs_xattr_copy_to_buffer()
200 static int erofs_listxattr_foreach(struct erofs_xattr_iter *it) in erofs_listxattr_foreach() argument
208 entry = *(struct erofs_xattr_entry *)it->kaddr; in erofs_listxattr_foreach()
209 it->pos += sizeof(struct erofs_xattr_entry); in erofs_listxattr_foreach()
213 struct erofs_sb_info *sbi = EROFS_SB(it->sb); in erofs_listxattr_foreach()
224 prefix = erofs_xattr_prefix(base_index, it->dentry); in erofs_listxattr_foreach()
230 if (!it->buffer) { in erofs_listxattr_foreach()
231 it->buffer_ofs += name_total; in erofs_listxattr_foreach()
235 if (it->buffer_ofs + name_total > it->buffer_size) in erofs_listxattr_foreach()
238 memcpy(it->buffer + it->buffer_ofs, prefix, prefix_len); in erofs_listxattr_foreach()
239 memcpy(it->buffer + it->buffer_ofs + prefix_len, infix, infix_len); in erofs_listxattr_foreach()
240 it->buffer_ofs += prefix_len + infix_len; in erofs_listxattr_foreach()
243 err = erofs_xattr_copy_to_buffer(it, entry.e_name_len); in erofs_listxattr_foreach()
247 it->buffer[it->buffer_ofs++] = '\0'; in erofs_listxattr_foreach()
251 static int erofs_getxattr_foreach(struct erofs_xattr_iter *it) in erofs_getxattr_foreach() argument
253 struct super_block *sb = it->sb; in erofs_getxattr_foreach()
258 entry = *(struct erofs_xattr_entry *)it->kaddr; in erofs_getxattr_foreach()
259 it->pos += sizeof(struct erofs_xattr_entry); in erofs_getxattr_foreach()
271 if (it->index != pf->prefix->base_index || in erofs_getxattr_foreach()
272 it->name.len != entry.e_name_len + pf->infix_len) in erofs_getxattr_foreach()
275 if (memcmp(it->name.name, pf->prefix->infix, pf->infix_len)) in erofs_getxattr_foreach()
278 it->infix_len = pf->infix_len; in erofs_getxattr_foreach()
280 if (it->index != entry.e_name_index || in erofs_getxattr_foreach()
281 it->name.len != entry.e_name_len) in erofs_getxattr_foreach()
284 it->infix_len = 0; in erofs_getxattr_foreach()
289 it->kaddr = erofs_bread(&it->buf, it->pos, EROFS_KMAP); in erofs_getxattr_foreach()
290 if (IS_ERR(it->kaddr)) in erofs_getxattr_foreach()
291 return PTR_ERR(it->kaddr); in erofs_getxattr_foreach()
294 sb->s_blocksize - erofs_blkoff(sb, it->pos), in erofs_getxattr_foreach()
296 if (memcmp(it->name.name + it->infix_len + processed, in erofs_getxattr_foreach()
297 it->kaddr, slice)) in erofs_getxattr_foreach()
299 it->pos += slice; in erofs_getxattr_foreach()
303 if (!it->buffer) { in erofs_getxattr_foreach()
304 it->buffer_ofs = value_sz; in erofs_getxattr_foreach()
308 if (it->buffer_size < value_sz) in erofs_getxattr_foreach()
311 return erofs_xattr_copy_to_buffer(it, value_sz); in erofs_getxattr_foreach()
314 static int erofs_xattr_iter_inline(struct erofs_xattr_iter *it, in erofs_xattr_iter_inline() argument
330 it->pos = erofs_iloc(inode) + vi->inode_isize + xattr_header_sz; in erofs_xattr_iter_inline()
333 it->kaddr = erofs_bread(&it->buf, it->pos, EROFS_KMAP); in erofs_xattr_iter_inline()
334 if (IS_ERR(it->kaddr)) in erofs_xattr_iter_inline()
335 return PTR_ERR(it->kaddr); in erofs_xattr_iter_inline()
337 entry_sz = erofs_xattr_entry_size(it->kaddr); in erofs_xattr_iter_inline()
344 next_pos = it->pos + entry_sz; in erofs_xattr_iter_inline()
347 ret = erofs_getxattr_foreach(it); in erofs_xattr_iter_inline()
349 ret = erofs_listxattr_foreach(it); in erofs_xattr_iter_inline()
353 it->pos = next_pos; in erofs_xattr_iter_inline()
358 static int erofs_xattr_iter_shared(struct erofs_xattr_iter *it, in erofs_xattr_iter_shared() argument
362 struct super_block *const sb = it->sb; in erofs_xattr_iter_shared()
368 it->pos = erofs_pos(sb, sbi->xattr_blkaddr) + in erofs_xattr_iter_shared()
370 it->kaddr = erofs_bread(&it->buf, it->pos, EROFS_KMAP); in erofs_xattr_iter_shared()
371 if (IS_ERR(it->kaddr)) in erofs_xattr_iter_shared()
372 return PTR_ERR(it->kaddr); in erofs_xattr_iter_shared()
375 ret = erofs_getxattr_foreach(it); in erofs_xattr_iter_shared()
377 ret = erofs_listxattr_foreach(it); in erofs_xattr_iter_shared()
389 struct erofs_xattr_iter it; in erofs_getxattr() local
409 it.index = index; in erofs_getxattr()
410 it.name = QSTR(name); in erofs_getxattr()
411 if (it.name.len > EROFS_NAME_LEN) in erofs_getxattr()
414 it.sb = inode->i_sb; in erofs_getxattr()
415 it.buf = __EROFS_BUF_INITIALIZER; in erofs_getxattr()
416 erofs_init_metabuf(&it.buf, it.sb); in erofs_getxattr()
417 it.buffer = buffer; in erofs_getxattr()
418 it.buffer_size = buffer_size; in erofs_getxattr()
419 it.buffer_ofs = 0; in erofs_getxattr()
421 ret = erofs_xattr_iter_inline(&it, inode, true); in erofs_getxattr()
423 ret = erofs_xattr_iter_shared(&it, inode, true); in erofs_getxattr()
424 erofs_put_metabuf(&it.buf); in erofs_getxattr()
425 return ret ? ret : it.buffer_ofs; in erofs_getxattr()
431 struct erofs_xattr_iter it; in erofs_listxattr() local
440 it.sb = dentry->d_sb; in erofs_listxattr()
441 it.buf = __EROFS_BUF_INITIALIZER; in erofs_listxattr()
442 erofs_init_metabuf(&it.buf, it.sb); in erofs_listxattr()
443 it.dentry = dentry; in erofs_listxattr()
444 it.buffer = buffer; in erofs_listxattr()
445 it.buffer_size = buffer_size; in erofs_listxattr()
446 it.buffer_ofs = 0; in erofs_listxattr()
448 ret = erofs_xattr_iter_inline(&it, inode, false); in erofs_listxattr()
450 ret = erofs_xattr_iter_shared(&it, inode, false); in erofs_listxattr()
453 erofs_put_metabuf(&it.buf); in erofs_listxattr()
454 return ret ? ret : it.buffer_ofs; in erofs_listxattr()