Lines Matching refs:ea_buf

132 static void ea_release(struct inode *inode, struct ea_buffer *ea_buf);
439 static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size) in ea_get() argument
456 ea_buf->flag = 0; in ea_get()
457 ea_buf->max_size = 0; in ea_get()
458 ea_buf->xattr = NULL; in ea_get()
463 ea_buf->flag = EA_INLINE | EA_NEW; in ea_get()
464 ea_buf->max_size = sizeof (ji->i_inline_ea); in ea_get()
465 ea_buf->xattr = (struct jfs_ea_list *) ji->i_inline_ea; in ea_get()
466 DXDlength(&ea_buf->new_ea, 0); in ea_get()
467 DXDaddress(&ea_buf->new_ea, 0); in ea_get()
468 ea_buf->new_ea.flag = DXD_INLINE; in ea_get()
469 DXDsize(&ea_buf->new_ea, min_size); in ea_get()
475 ea_buf->flag = EA_INLINE; in ea_get()
476 ea_buf->max_size = sizeof (ji->i_inline_ea); in ea_get()
477 ea_buf->xattr = (struct jfs_ea_list *) ji->i_inline_ea; in ea_get()
497 ea_buf->max_size = (size + sb->s_blocksize - 1) & in ea_get()
500 ea_buf->xattr = kmalloc(ea_buf->max_size, GFP_KERNEL); in ea_get()
501 if (ea_buf->xattr == NULL) in ea_get()
504 ea_buf->flag = EA_MALLOC; in ea_get()
509 if ((rc = ea_read(inode, ea_buf->xattr))) { in ea_get()
510 kfree(ea_buf->xattr); in ea_get()
511 ea_buf->xattr = NULL; in ea_get()
532 DXDlength(&ea_buf->new_ea, blocks_needed); in ea_get()
533 DXDaddress(&ea_buf->new_ea, blkno); in ea_get()
534 ea_buf->new_ea.flag = DXD_EXTENT; in ea_get()
535 DXDsize(&ea_buf->new_ea, min_size); in ea_get()
537 ea_buf->flag = EA_EXTENT | EA_NEW; in ea_get()
539 ea_buf->mp = get_metapage(inode, blkno, in ea_get()
542 if (ea_buf->mp == NULL) { in ea_get()
547 ea_buf->xattr = ea_buf->mp->data; in ea_get()
548 ea_buf->max_size = (min_size + sb->s_blocksize - 1) & in ea_get()
552 if ((rc = ea_read(inode, ea_buf->xattr))) { in ea_get()
553 discard_metapage(ea_buf->mp); in ea_get()
559 ea_buf->flag = EA_EXTENT; in ea_get()
560 ea_buf->mp = read_metapage(inode, addressDXD(&ji->ea), in ea_get()
563 if (ea_buf->mp == NULL) { in ea_get()
567 ea_buf->xattr = ea_buf->mp->data; in ea_get()
568 ea_buf->max_size = (ea_size + sb->s_blocksize - 1) & in ea_get()
572 if (EALIST_SIZE(ea_buf->xattr) != ea_size) { in ea_get()
575 ea_buf->xattr, ea_size, 1); in ea_get()
576 ea_release(inode, ea_buf); in ea_get()
591 static void ea_release(struct inode *inode, struct ea_buffer *ea_buf) in ea_release() argument
593 if (ea_buf->flag & EA_MALLOC) in ea_release()
594 kfree(ea_buf->xattr); in ea_release()
595 else if (ea_buf->flag & EA_EXTENT) { in ea_release()
596 assert(ea_buf->mp); in ea_release()
597 release_metapage(ea_buf->mp); in ea_release()
599 if (ea_buf->flag & EA_NEW) in ea_release()
600 dbFree(inode, addressDXD(&ea_buf->new_ea), in ea_release()
601 lengthDXD(&ea_buf->new_ea)); in ea_release()
605 static int ea_put(tid_t tid, struct inode *inode, struct ea_buffer *ea_buf, in ea_put() argument
613 ea_release(inode, ea_buf); in ea_put()
614 ea_buf = NULL; in ea_put()
615 } else if (ea_buf->flag & EA_INLINE) { in ea_put()
618 ea_buf->new_ea.flag = DXD_INLINE; in ea_put()
619 DXDsize(&ea_buf->new_ea, new_size); in ea_put()
620 DXDaddress(&ea_buf->new_ea, 0); in ea_put()
621 DXDlength(&ea_buf->new_ea, 0); in ea_put()
622 } else if (ea_buf->flag & EA_MALLOC) { in ea_put()
623 rc = ea_write(inode, ea_buf->xattr, new_size, &ea_buf->new_ea); in ea_put()
624 kfree(ea_buf->xattr); in ea_put()
625 } else if (ea_buf->flag & EA_NEW) { in ea_put()
627 flush_metapage(ea_buf->mp); in ea_put()
630 rc = ea_write(inode, ea_buf->xattr, new_size, &ea_buf->new_ea); in ea_put()
631 discard_metapage(ea_buf->mp); in ea_put()
643 if (ea_buf) { in ea_put()
644 txEA(tid, inode, &ji->ea, &ea_buf->new_ea); in ea_put()
645 if (ea_buf->new_ea.flag & DXD_EXTENT) { in ea_put()
646 new_blocks = lengthDXD(&ea_buf->new_ea); in ea_put()
650 ji->ea = ea_buf->new_ea; in ea_put()
673 struct ea_buffer ea_buf; in __jfs_setxattr() local
684 xattr_size = ea_get(inode, &ea_buf, 0); in __jfs_setxattr()
691 ealist = (struct jfs_ea_list *) ea_buf.xattr; in __jfs_setxattr()
725 if (new_size > ea_buf.max_size) { in __jfs_setxattr()
730 ea_release(inode, &ea_buf); in __jfs_setxattr()
731 xattr_size = ea_get(inode, &ea_buf, new_size); in __jfs_setxattr()
796 rc = ea_put(tid, inode, &ea_buf, new_size); in __jfs_setxattr()
800 ea_release(inode, &ea_buf); in __jfs_setxattr()
812 struct ea_buffer ea_buf; in __jfs_getxattr() local
820 xattr_size = ea_get(inode, &ea_buf, 0); in __jfs_getxattr()
830 ealist = (struct jfs_ea_list *) ea_buf.xattr; in __jfs_getxattr()
851 ea_release(inode, &ea_buf); in __jfs_getxattr()
876 struct ea_buffer ea_buf; in jfs_listxattr() local
880 xattr_size = ea_get(inode, &ea_buf, 0); in jfs_listxattr()
889 ealist = (struct jfs_ea_list *) ea_buf.xattr; in jfs_listxattr()
915 ea_release(inode, &ea_buf); in jfs_listxattr()