Lines Matching full:it

22 	struct xattr_iter it;  in init_inode_xattrs()  local
49 * 1) it is not enough to contain erofs_xattr_ibody_header then in init_inode_xattrs()
50 * ->xattr_isize should be 0 (it means no xattr); in init_inode_xattrs()
51 * 2) it is just to contain erofs_xattr_ibody_header, which is on-disk in init_inode_xattrs()
74 it.buf = __EROFS_BUF_INITIALIZER; in init_inode_xattrs()
75 it.blkaddr = erofs_blknr(iloc(sbi, vi->nid) + vi->inode_isize); in init_inode_xattrs()
76 it.ofs = erofs_blkoff(iloc(sbi, vi->nid) + vi->inode_isize); in init_inode_xattrs()
79 it.kaddr = erofs_read_metabuf(&it.buf, sb, it.blkaddr, EROFS_KMAP); in init_inode_xattrs()
80 if (IS_ERR(it.kaddr)) { in init_inode_xattrs()
81 ret = PTR_ERR(it.kaddr); in init_inode_xattrs()
85 ih = (struct erofs_xattr_ibody_header *)(it.kaddr + it.ofs); in init_inode_xattrs()
90 erofs_put_metabuf(&it.buf); in init_inode_xattrs()
96 it.ofs += sizeof(struct erofs_xattr_ibody_header); in init_inode_xattrs()
99 if (it.ofs >= EROFS_BLKSIZ) { in init_inode_xattrs()
101 DBG_BUGON(it.ofs != EROFS_BLKSIZ); in init_inode_xattrs()
103 it.kaddr = erofs_read_metabuf(&it.buf, sb, ++it.blkaddr, in init_inode_xattrs()
105 if (IS_ERR(it.kaddr)) { in init_inode_xattrs()
108 ret = PTR_ERR(it.kaddr); in init_inode_xattrs()
111 it.ofs = 0; in init_inode_xattrs()
114 le32_to_cpu(*(__le32 *)(it.kaddr + it.ofs)); in init_inode_xattrs()
115 it.ofs += sizeof(__le32); in init_inode_xattrs()
117 erofs_put_metabuf(&it.buf); in init_inode_xattrs()
144 static inline int xattr_iter_fixup(struct xattr_iter *it) in xattr_iter_fixup() argument
146 if (it->ofs < EROFS_BLKSIZ) in xattr_iter_fixup()
149 it->blkaddr += erofs_blknr(it->ofs); in xattr_iter_fixup()
150 it->kaddr = erofs_read_metabuf(&it->buf, it->sb, it->blkaddr, in xattr_iter_fixup()
152 if (IS_ERR(it->kaddr)) in xattr_iter_fixup()
153 return PTR_ERR(it->kaddr); in xattr_iter_fixup()
154 it->ofs = erofs_blkoff(it->ofs); in xattr_iter_fixup()
158 static int inline_xattr_iter_begin(struct xattr_iter *it, in inline_xattr_iter_begin() argument
173 it->blkaddr = erofs_blknr(iloc(sbi, vi->nid) + inline_xattr_ofs); in inline_xattr_iter_begin()
174 it->ofs = erofs_blkoff(iloc(sbi, vi->nid) + inline_xattr_ofs); in inline_xattr_iter_begin()
176 it->kaddr = erofs_read_metabuf(&it->buf, inode->i_sb, it->blkaddr, in inline_xattr_iter_begin()
178 if (IS_ERR(it->kaddr)) in inline_xattr_iter_begin()
179 return PTR_ERR(it->kaddr); in inline_xattr_iter_begin()
187 static int xattr_foreach(struct xattr_iter *it, in xattr_foreach() argument
196 err = xattr_iter_fixup(it); in xattr_foreach()
205 entry = *(struct erofs_xattr_entry *)(it->kaddr + it->ofs); in xattr_foreach()
217 it->ofs += sizeof(struct erofs_xattr_entry); in xattr_foreach()
221 err = op->entry(it, &entry); in xattr_foreach()
223 it->ofs += entry.e_name_len + value_sz; in xattr_foreach()
231 if (it->ofs >= EROFS_BLKSIZ) { in xattr_foreach()
232 DBG_BUGON(it->ofs > EROFS_BLKSIZ); in xattr_foreach()
234 err = xattr_iter_fixup(it); in xattr_foreach()
237 it->ofs = 0; in xattr_foreach()
240 slice = min_t(unsigned int, EROFS_BLKSIZ - it->ofs, in xattr_foreach()
244 err = op->name(it, processed, it->kaddr + it->ofs, slice); in xattr_foreach()
246 it->ofs += entry.e_name_len - processed + value_sz; in xattr_foreach()
250 it->ofs += slice; in xattr_foreach()
258 err = op->alloc_buffer(it, value_sz); in xattr_foreach()
260 it->ofs += value_sz; in xattr_foreach()
266 if (it->ofs >= EROFS_BLKSIZ) { in xattr_foreach()
267 DBG_BUGON(it->ofs > EROFS_BLKSIZ); in xattr_foreach()
269 err = xattr_iter_fixup(it); in xattr_foreach()
272 it->ofs = 0; in xattr_foreach()
275 slice = min_t(unsigned int, EROFS_BLKSIZ - it->ofs, in xattr_foreach()
277 op->value(it, processed, it->kaddr + it->ofs, slice); in xattr_foreach()
278 it->ofs += slice; in xattr_foreach()
284 it->ofs = EROFS_XATTR_ALIGN(it->ofs); in xattr_foreach()
289 struct xattr_iter it; member
299 struct getxattr_iter *it = container_of(_it, struct getxattr_iter, it); in xattr_entrymatch() local
301 return (it->index != entry->e_name_index || in xattr_entrymatch()
302 it->name.len != entry->e_name_len) ? -ENOATTR : 0; in xattr_entrymatch()
308 struct getxattr_iter *it = container_of(_it, struct getxattr_iter, it); in xattr_namematch() local
310 return memcmp(buf, it->name.name + processed, len) ? -ENOATTR : 0; in xattr_namematch()
316 struct getxattr_iter *it = container_of(_it, struct getxattr_iter, it); in xattr_checkbuffer() local
317 int err = it->buffer_size < value_sz ? -ERANGE : 0; in xattr_checkbuffer()
319 it->buffer_size = value_sz; in xattr_checkbuffer()
320 return !it->buffer ? 1 : err; in xattr_checkbuffer()
327 struct getxattr_iter *it = container_of(_it, struct getxattr_iter, it); in xattr_copyvalue() local
329 memcpy(it->buffer + processed, buf, len); in xattr_copyvalue()
339 static int inline_getxattr(struct inode *inode, struct getxattr_iter *it) in inline_getxattr() argument
344 ret = inline_xattr_iter_begin(&it->it, inode); in inline_getxattr()
350 ret = xattr_foreach(&it->it, &find_xattr_handlers, &remaining); in inline_getxattr()
354 return ret ? ret : it->buffer_size; in inline_getxattr()
357 static int shared_getxattr(struct inode *inode, struct getxattr_iter *it) in shared_getxattr() argument
369 it->it.ofs = xattrblock_offset(sbi, vi->xattr_shared_xattrs[i]); in shared_getxattr()
370 it->it.kaddr = erofs_read_metabuf(&it->it.buf, sb, blkaddr, in shared_getxattr()
372 if (IS_ERR(it->it.kaddr)) in shared_getxattr()
373 return PTR_ERR(it->it.kaddr); in shared_getxattr()
374 it->it.blkaddr = blkaddr; in shared_getxattr()
376 ret = xattr_foreach(&it->it, &find_xattr_handlers, NULL); in shared_getxattr()
380 return ret ? ret : it->buffer_size; in shared_getxattr()
398 struct getxattr_iter it; in erofs_getxattr() local
407 it.index = index; in erofs_getxattr()
408 it.name.len = strlen(name); in erofs_getxattr()
409 if (it.name.len > EROFS_NAME_LEN) in erofs_getxattr()
412 it.it.buf = __EROFS_BUF_INITIALIZER; in erofs_getxattr()
413 it.name.name = name; in erofs_getxattr()
415 it.buffer = buffer; in erofs_getxattr()
416 it.buffer_size = buffer_size; in erofs_getxattr()
418 it.it.sb = inode->i_sb; in erofs_getxattr()
419 ret = inline_getxattr(inode, &it); in erofs_getxattr()
421 ret = shared_getxattr(inode, &it); in erofs_getxattr()
422 erofs_put_metabuf(&it.it.buf); in erofs_getxattr()
484 struct xattr_iter it; member
494 struct listxattr_iter *it = in xattr_entrylist() local
495 container_of(_it, struct listxattr_iter, it); in xattr_entrylist()
502 if (!h || (h->list && !h->list(it->dentry))) in xattr_entrylist()
508 if (!it->buffer) { in xattr_entrylist()
509 it->buffer_ofs += prefix_len + entry->e_name_len + 1; in xattr_entrylist()
513 if (it->buffer_ofs + prefix_len in xattr_entrylist()
514 + entry->e_name_len + 1 > it->buffer_size) in xattr_entrylist()
517 memcpy(it->buffer + it->buffer_ofs, prefix, prefix_len); in xattr_entrylist()
518 it->buffer_ofs += prefix_len; in xattr_entrylist()
525 struct listxattr_iter *it = in xattr_namelist() local
526 container_of(_it, struct listxattr_iter, it); in xattr_namelist()
528 memcpy(it->buffer + it->buffer_ofs, buf, len); in xattr_namelist()
529 it->buffer_ofs += len; in xattr_namelist()
536 struct listxattr_iter *it = in xattr_skipvalue() local
537 container_of(_it, struct listxattr_iter, it); in xattr_skipvalue()
539 it->buffer[it->buffer_ofs++] = '\0'; in xattr_skipvalue()
550 static int inline_listxattr(struct listxattr_iter *it) in inline_listxattr() argument
555 ret = inline_xattr_iter_begin(&it->it, d_inode(it->dentry)); in inline_listxattr()
561 ret = xattr_foreach(&it->it, &list_xattr_handlers, &remaining); in inline_listxattr()
565 return ret ? ret : it->buffer_ofs; in inline_listxattr()
568 static int shared_listxattr(struct listxattr_iter *it) in shared_listxattr() argument
570 struct inode *const inode = d_inode(it->dentry); in shared_listxattr()
581 it->it.ofs = xattrblock_offset(sbi, vi->xattr_shared_xattrs[i]); in shared_listxattr()
582 it->it.kaddr = erofs_read_metabuf(&it->it.buf, sb, blkaddr, in shared_listxattr()
584 if (IS_ERR(it->it.kaddr)) in shared_listxattr()
585 return PTR_ERR(it->it.kaddr); in shared_listxattr()
586 it->it.blkaddr = blkaddr; in shared_listxattr()
588 ret = xattr_foreach(&it->it, &list_xattr_handlers, NULL); in shared_listxattr()
592 return ret ? ret : it->buffer_ofs; in shared_listxattr()
599 struct listxattr_iter it; in erofs_listxattr() local
607 it.it.buf = __EROFS_BUF_INITIALIZER; in erofs_listxattr()
608 it.dentry = dentry; in erofs_listxattr()
609 it.buffer = buffer; in erofs_listxattr()
610 it.buffer_size = buffer_size; in erofs_listxattr()
611 it.buffer_ofs = 0; in erofs_listxattr()
613 it.it.sb = dentry->d_sb; in erofs_listxattr()
615 ret = inline_listxattr(&it); in erofs_listxattr()
617 ret = shared_listxattr(&it); in erofs_listxattr()
618 erofs_put_metabuf(&it.it.buf); in erofs_listxattr()