Lines Matching refs:it
22 struct xattr_iter it; in init_inode_xattrs() local
70 it.buf = __EROFS_BUF_INITIALIZER; in init_inode_xattrs()
71 it.blkaddr = erofs_blknr(erofs_iloc(inode) + vi->inode_isize); in init_inode_xattrs()
72 it.ofs = erofs_blkoff(erofs_iloc(inode) + vi->inode_isize); in init_inode_xattrs()
75 it.kaddr = erofs_read_metabuf(&it.buf, sb, it.blkaddr, EROFS_KMAP); in init_inode_xattrs()
76 if (IS_ERR(it.kaddr)) { in init_inode_xattrs()
77 ret = PTR_ERR(it.kaddr); in init_inode_xattrs()
81 ih = (struct erofs_xattr_ibody_header *)(it.kaddr + it.ofs); in init_inode_xattrs()
86 erofs_put_metabuf(&it.buf); in init_inode_xattrs()
92 it.ofs += sizeof(struct erofs_xattr_ibody_header); in init_inode_xattrs()
95 if (it.ofs >= EROFS_BLKSIZ) { in init_inode_xattrs()
97 DBG_BUGON(it.ofs != EROFS_BLKSIZ); in init_inode_xattrs()
99 it.kaddr = erofs_read_metabuf(&it.buf, sb, ++it.blkaddr, in init_inode_xattrs()
101 if (IS_ERR(it.kaddr)) { in init_inode_xattrs()
104 ret = PTR_ERR(it.kaddr); in init_inode_xattrs()
107 it.ofs = 0; in init_inode_xattrs()
110 le32_to_cpu(*(__le32 *)(it.kaddr + it.ofs)); in init_inode_xattrs()
111 it.ofs += sizeof(__le32); in init_inode_xattrs()
113 erofs_put_metabuf(&it.buf); in init_inode_xattrs()
140 static inline int xattr_iter_fixup(struct xattr_iter *it) in xattr_iter_fixup() argument
142 if (it->ofs < EROFS_BLKSIZ) in xattr_iter_fixup()
145 it->blkaddr += erofs_blknr(it->ofs); in xattr_iter_fixup()
146 it->kaddr = erofs_read_metabuf(&it->buf, it->sb, it->blkaddr, in xattr_iter_fixup()
148 if (IS_ERR(it->kaddr)) in xattr_iter_fixup()
149 return PTR_ERR(it->kaddr); in xattr_iter_fixup()
150 it->ofs = erofs_blkoff(it->ofs); in xattr_iter_fixup()
154 static int inline_xattr_iter_begin(struct xattr_iter *it, in inline_xattr_iter_begin() argument
168 it->blkaddr = erofs_blknr(erofs_iloc(inode) + inline_xattr_ofs); in inline_xattr_iter_begin()
169 it->ofs = erofs_blkoff(erofs_iloc(inode) + inline_xattr_ofs); in inline_xattr_iter_begin()
170 it->kaddr = erofs_read_metabuf(&it->buf, inode->i_sb, it->blkaddr, in inline_xattr_iter_begin()
172 if (IS_ERR(it->kaddr)) in inline_xattr_iter_begin()
173 return PTR_ERR(it->kaddr); in inline_xattr_iter_begin()
181 static int xattr_foreach(struct xattr_iter *it, in xattr_foreach() argument
190 err = xattr_iter_fixup(it); in xattr_foreach()
199 entry = *(struct erofs_xattr_entry *)(it->kaddr + it->ofs); in xattr_foreach()
211 it->ofs += sizeof(struct erofs_xattr_entry); in xattr_foreach()
215 err = op->entry(it, &entry); in xattr_foreach()
217 it->ofs += entry.e_name_len + value_sz; in xattr_foreach()
225 if (it->ofs >= EROFS_BLKSIZ) { in xattr_foreach()
226 DBG_BUGON(it->ofs > EROFS_BLKSIZ); in xattr_foreach()
228 err = xattr_iter_fixup(it); in xattr_foreach()
231 it->ofs = 0; in xattr_foreach()
234 slice = min_t(unsigned int, EROFS_BLKSIZ - it->ofs, in xattr_foreach()
238 err = op->name(it, processed, it->kaddr + it->ofs, slice); in xattr_foreach()
240 it->ofs += entry.e_name_len - processed + value_sz; in xattr_foreach()
244 it->ofs += slice; in xattr_foreach()
252 err = op->alloc_buffer(it, value_sz); in xattr_foreach()
254 it->ofs += value_sz; in xattr_foreach()
260 if (it->ofs >= EROFS_BLKSIZ) { in xattr_foreach()
261 DBG_BUGON(it->ofs > EROFS_BLKSIZ); in xattr_foreach()
263 err = xattr_iter_fixup(it); in xattr_foreach()
266 it->ofs = 0; in xattr_foreach()
269 slice = min_t(unsigned int, EROFS_BLKSIZ - it->ofs, in xattr_foreach()
271 op->value(it, processed, it->kaddr + it->ofs, slice); in xattr_foreach()
272 it->ofs += slice; in xattr_foreach()
278 it->ofs = EROFS_XATTR_ALIGN(it->ofs); in xattr_foreach()
283 struct xattr_iter it; member
293 struct getxattr_iter *it = container_of(_it, struct getxattr_iter, it); in xattr_entrymatch() local
295 return (it->index != entry->e_name_index || in xattr_entrymatch()
296 it->name.len != entry->e_name_len) ? -ENOATTR : 0; in xattr_entrymatch()
302 struct getxattr_iter *it = container_of(_it, struct getxattr_iter, it); in xattr_namematch() local
304 return memcmp(buf, it->name.name + processed, len) ? -ENOATTR : 0; in xattr_namematch()
310 struct getxattr_iter *it = container_of(_it, struct getxattr_iter, it); in xattr_checkbuffer() local
311 int err = it->buffer_size < value_sz ? -ERANGE : 0; in xattr_checkbuffer()
313 it->buffer_size = value_sz; in xattr_checkbuffer()
314 return !it->buffer ? 1 : err; in xattr_checkbuffer()
321 struct getxattr_iter *it = container_of(_it, struct getxattr_iter, it); in xattr_copyvalue() local
323 memcpy(it->buffer + processed, buf, len); in xattr_copyvalue()
333 static int inline_getxattr(struct inode *inode, struct getxattr_iter *it) in inline_getxattr() argument
338 ret = inline_xattr_iter_begin(&it->it, inode); in inline_getxattr()
344 ret = xattr_foreach(&it->it, &find_xattr_handlers, &remaining); in inline_getxattr()
348 return ret ? ret : it->buffer_size; in inline_getxattr()
351 static int shared_getxattr(struct inode *inode, struct getxattr_iter *it) in shared_getxattr() argument
363 it->it.ofs = xattrblock_offset(sbi, vi->xattr_shared_xattrs[i]); in shared_getxattr()
364 it->it.kaddr = erofs_read_metabuf(&it->it.buf, sb, blkaddr, in shared_getxattr()
366 if (IS_ERR(it->it.kaddr)) in shared_getxattr()
367 return PTR_ERR(it->it.kaddr); in shared_getxattr()
368 it->it.blkaddr = blkaddr; in shared_getxattr()
370 ret = xattr_foreach(&it->it, &find_xattr_handlers, NULL); in shared_getxattr()
374 return ret ? ret : it->buffer_size; in shared_getxattr()
392 struct getxattr_iter it; in erofs_getxattr() local
401 it.index = index; in erofs_getxattr()
402 it.name.len = strlen(name); in erofs_getxattr()
403 if (it.name.len > EROFS_NAME_LEN) in erofs_getxattr()
406 it.it.buf = __EROFS_BUF_INITIALIZER; in erofs_getxattr()
407 it.name.name = name; in erofs_getxattr()
409 it.buffer = buffer; in erofs_getxattr()
410 it.buffer_size = buffer_size; in erofs_getxattr()
412 it.it.sb = inode->i_sb; in erofs_getxattr()
413 ret = inline_getxattr(inode, &it); in erofs_getxattr()
415 ret = shared_getxattr(inode, &it); in erofs_getxattr()
416 erofs_put_metabuf(&it.it.buf); in erofs_getxattr()
478 struct xattr_iter it; member
488 struct listxattr_iter *it = in xattr_entrylist() local
489 container_of(_it, struct listxattr_iter, it); in xattr_entrylist()
496 if (!h || (h->list && !h->list(it->dentry))) in xattr_entrylist()
502 if (!it->buffer) { in xattr_entrylist()
503 it->buffer_ofs += prefix_len + entry->e_name_len + 1; in xattr_entrylist()
507 if (it->buffer_ofs + prefix_len in xattr_entrylist()
508 + entry->e_name_len + 1 > it->buffer_size) in xattr_entrylist()
511 memcpy(it->buffer + it->buffer_ofs, prefix, prefix_len); in xattr_entrylist()
512 it->buffer_ofs += prefix_len; in xattr_entrylist()
519 struct listxattr_iter *it = in xattr_namelist() local
520 container_of(_it, struct listxattr_iter, it); in xattr_namelist()
522 memcpy(it->buffer + it->buffer_ofs, buf, len); in xattr_namelist()
523 it->buffer_ofs += len; in xattr_namelist()
530 struct listxattr_iter *it = in xattr_skipvalue() local
531 container_of(_it, struct listxattr_iter, it); in xattr_skipvalue()
533 it->buffer[it->buffer_ofs++] = '\0'; in xattr_skipvalue()
544 static int inline_listxattr(struct listxattr_iter *it) in inline_listxattr() argument
549 ret = inline_xattr_iter_begin(&it->it, d_inode(it->dentry)); in inline_listxattr()
555 ret = xattr_foreach(&it->it, &list_xattr_handlers, &remaining); in inline_listxattr()
559 return ret ? ret : it->buffer_ofs; in inline_listxattr()
562 static int shared_listxattr(struct listxattr_iter *it) in shared_listxattr() argument
564 struct inode *const inode = d_inode(it->dentry); in shared_listxattr()
575 it->it.ofs = xattrblock_offset(sbi, vi->xattr_shared_xattrs[i]); in shared_listxattr()
576 it->it.kaddr = erofs_read_metabuf(&it->it.buf, sb, blkaddr, in shared_listxattr()
578 if (IS_ERR(it->it.kaddr)) in shared_listxattr()
579 return PTR_ERR(it->it.kaddr); in shared_listxattr()
580 it->it.blkaddr = blkaddr; in shared_listxattr()
582 ret = xattr_foreach(&it->it, &list_xattr_handlers, NULL); in shared_listxattr()
586 return ret ? ret : it->buffer_ofs; in shared_listxattr()
593 struct listxattr_iter it; in erofs_listxattr() local
601 it.it.buf = __EROFS_BUF_INITIALIZER; in erofs_listxattr()
602 it.dentry = dentry; in erofs_listxattr()
603 it.buffer = buffer; in erofs_listxattr()
604 it.buffer_size = buffer_size; in erofs_listxattr()
605 it.buffer_ofs = 0; in erofs_listxattr()
607 it.it.sb = dentry->d_sb; in erofs_listxattr()
609 ret = inline_listxattr(&it); in erofs_listxattr()
611 ret = shared_listxattr(&it); in erofs_listxattr()
612 erofs_put_metabuf(&it.it.buf); in erofs_listxattr()