Lines Matching refs:ea_buf
119 static void ea_release(struct inode *inode, struct ea_buffer *ea_buf);
421 * ea_buf - Structure to be populated with ealist and its metadata
426 static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size)
443 ea_buf->flag = 0;
444 ea_buf->max_size = 0;
445 ea_buf->xattr = NULL;
450 ea_buf->flag = EA_INLINE | EA_NEW;
451 ea_buf->max_size = sizeof (ji->i_inline_ea);
452 ea_buf->xattr = (struct jfs_ea_list *) ji->i_inline_ea;
453 DXDlength(&ea_buf->new_ea, 0);
454 DXDaddress(&ea_buf->new_ea, 0);
455 ea_buf->new_ea.flag = DXD_INLINE;
456 DXDsize(&ea_buf->new_ea, min_size);
462 ea_buf->flag = EA_INLINE;
463 ea_buf->max_size = sizeof (ji->i_inline_ea);
464 ea_buf->xattr = (struct jfs_ea_list *) ji->i_inline_ea;
484 ea_buf->max_size = (size + sb->s_blocksize - 1) &
487 ea_buf->xattr = kmalloc(ea_buf->max_size, GFP_KERNEL);
488 if (ea_buf->xattr == NULL)
491 ea_buf->flag = EA_MALLOC;
496 if ((rc = ea_read(inode, ea_buf->xattr))) {
497 kfree(ea_buf->xattr);
498 ea_buf->xattr = NULL;
519 DXDlength(&ea_buf->new_ea, blocks_needed);
520 DXDaddress(&ea_buf->new_ea, blkno);
521 ea_buf->new_ea.flag = DXD_EXTENT;
522 DXDsize(&ea_buf->new_ea, min_size);
524 ea_buf->flag = EA_EXTENT | EA_NEW;
526 ea_buf->mp = get_metapage(inode, blkno,
529 if (ea_buf->mp == NULL) {
534 ea_buf->xattr = ea_buf->mp->data;
535 ea_buf->max_size = (min_size + sb->s_blocksize - 1) &
539 if ((rc = ea_read(inode, ea_buf->xattr))) {
540 discard_metapage(ea_buf->mp);
546 ea_buf->flag = EA_EXTENT;
547 ea_buf->mp = read_metapage(inode, addressDXD(&ji->ea),
550 if (ea_buf->mp == NULL) {
554 ea_buf->xattr = ea_buf->mp->data;
555 ea_buf->max_size = (ea_size + sb->s_blocksize - 1) &
559 if (EALIST_SIZE(ea_buf->xattr) != ea_size) {
562 ea_buf->xattr, ea_size, 1);
563 ea_release(inode, ea_buf);
578 static void ea_release(struct inode *inode, struct ea_buffer *ea_buf)
580 if (ea_buf->flag & EA_MALLOC)
581 kfree(ea_buf->xattr);
582 else if (ea_buf->flag & EA_EXTENT) {
583 assert(ea_buf->mp);
584 release_metapage(ea_buf->mp);
586 if (ea_buf->flag & EA_NEW)
587 dbFree(inode, addressDXD(&ea_buf->new_ea),
588 lengthDXD(&ea_buf->new_ea));
592 static int ea_put(tid_t tid, struct inode *inode, struct ea_buffer *ea_buf,
600 ea_release(inode, ea_buf);
601 ea_buf = NULL;
602 } else if (ea_buf->flag & EA_INLINE) {
605 ea_buf->new_ea.flag = DXD_INLINE;
606 DXDsize(&ea_buf->new_ea, new_size);
607 DXDaddress(&ea_buf->new_ea, 0);
608 DXDlength(&ea_buf->new_ea, 0);
609 } else if (ea_buf->flag & EA_MALLOC) {
610 rc = ea_write(inode, ea_buf->xattr, new_size, &ea_buf->new_ea);
611 kfree(ea_buf->xattr);
612 } else if (ea_buf->flag & EA_NEW) {
614 flush_metapage(ea_buf->mp);
617 rc = ea_write(inode, ea_buf->xattr, new_size, &ea_buf->new_ea);
618 discard_metapage(ea_buf->mp);
630 if (ea_buf) {
631 txEA(tid, inode, &ji->ea, &ea_buf->new_ea);
632 if (ea_buf->new_ea.flag & DXD_EXTENT) {
633 new_blocks = lengthDXD(&ea_buf->new_ea);
637 ji->ea = ea_buf->new_ea;
660 struct ea_buffer ea_buf;
671 xattr_size = ea_get(inode, &ea_buf, 0);
678 ealist = (struct jfs_ea_list *) ea_buf.xattr;
712 if (new_size > ea_buf.max_size) {
717 ea_release(inode, &ea_buf);
718 xattr_size = ea_get(inode, &ea_buf, new_size);
783 rc = ea_put(tid, inode, &ea_buf, new_size);
787 ea_release(inode, &ea_buf);
799 struct ea_buffer ea_buf;
807 xattr_size = ea_get(inode, &ea_buf, 0);
817 ealist = (struct jfs_ea_list *) ea_buf.xattr;
838 ea_release(inode, &ea_buf);
863 struct ea_buffer ea_buf;
867 xattr_size = ea_get(inode, &ea_buf, 0);
876 ealist = (struct jfs_ea_list *) ea_buf.xattr;
902 ea_release(inode, &ea_buf);