Lines Matching refs:ea_buf

119 static void ea_release(struct inode *inode, struct ea_buffer *ea_buf);
426 static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size) in ea_get() argument
437 memset(&ea_buf->new_ea, 0, sizeof(ea_buf->new_ea)); in ea_get()
445 ea_buf->flag = 0; in ea_get()
446 ea_buf->max_size = 0; in ea_get()
447 ea_buf->xattr = NULL; in ea_get()
452 ea_buf->flag = EA_INLINE | EA_NEW; in ea_get()
453 ea_buf->max_size = sizeof (ji->i_inline_ea); in ea_get()
454 ea_buf->xattr = (struct jfs_ea_list *) ji->i_inline_ea; in ea_get()
455 DXDlength(&ea_buf->new_ea, 0); in ea_get()
456 DXDaddress(&ea_buf->new_ea, 0); in ea_get()
457 ea_buf->new_ea.flag = DXD_INLINE; in ea_get()
458 DXDsize(&ea_buf->new_ea, min_size); in ea_get()
464 ea_buf->flag = EA_INLINE; in ea_get()
465 ea_buf->max_size = sizeof (ji->i_inline_ea); in ea_get()
466 ea_buf->xattr = (struct jfs_ea_list *) ji->i_inline_ea; in ea_get()
486 ea_buf->max_size = (size + sb->s_blocksize - 1) & in ea_get()
489 ea_buf->xattr = kmalloc(ea_buf->max_size, GFP_KERNEL); in ea_get()
490 if (ea_buf->xattr == NULL) in ea_get()
493 ea_buf->flag = EA_MALLOC; in ea_get()
498 if ((rc = ea_read(inode, ea_buf->xattr))) { in ea_get()
499 kfree(ea_buf->xattr); in ea_get()
500 ea_buf->xattr = NULL; in ea_get()
521 DXDlength(&ea_buf->new_ea, blocks_needed); in ea_get()
522 DXDaddress(&ea_buf->new_ea, blkno); in ea_get()
523 ea_buf->new_ea.flag = DXD_EXTENT; in ea_get()
524 DXDsize(&ea_buf->new_ea, min_size); in ea_get()
526 ea_buf->flag = EA_EXTENT | EA_NEW; in ea_get()
528 ea_buf->mp = get_metapage(inode, blkno, in ea_get()
531 if (ea_buf->mp == NULL) { in ea_get()
536 ea_buf->xattr = ea_buf->mp->data; in ea_get()
537 ea_buf->max_size = (min_size + sb->s_blocksize - 1) & in ea_get()
541 if ((rc = ea_read(inode, ea_buf->xattr))) { in ea_get()
542 discard_metapage(ea_buf->mp); in ea_get()
548 ea_buf->flag = EA_EXTENT; in ea_get()
549 ea_buf->mp = read_metapage(inode, addressDXD(&ji->ea), in ea_get()
552 if (ea_buf->mp == NULL) { in ea_get()
556 ea_buf->xattr = ea_buf->mp->data; in ea_get()
557 ea_buf->max_size = (ea_size + sb->s_blocksize - 1) & in ea_get()
561 if (EALIST_SIZE(ea_buf->xattr) != ea_size) { in ea_get()
562 int size = clamp_t(int, ea_size, 0, EALIST_SIZE(ea_buf->xattr)); in ea_get()
566 ea_buf->xattr, size, 1); in ea_get()
567 ea_release(inode, ea_buf); in ea_get()
582 static void ea_release(struct inode *inode, struct ea_buffer *ea_buf) in ea_release() argument
584 if (ea_buf->flag & EA_MALLOC) in ea_release()
585 kfree(ea_buf->xattr); in ea_release()
586 else if (ea_buf->flag & EA_EXTENT) { in ea_release()
587 assert(ea_buf->mp); in ea_release()
588 release_metapage(ea_buf->mp); in ea_release()
590 if (ea_buf->flag & EA_NEW) in ea_release()
591 dbFree(inode, addressDXD(&ea_buf->new_ea), in ea_release()
592 lengthDXD(&ea_buf->new_ea)); in ea_release()
596 static int ea_put(tid_t tid, struct inode *inode, struct ea_buffer *ea_buf, in ea_put() argument
604 ea_release(inode, ea_buf); in ea_put()
605 ea_buf = NULL; in ea_put()
606 } else if (ea_buf->flag & EA_INLINE) { in ea_put()
609 ea_buf->new_ea.flag = DXD_INLINE; in ea_put()
610 DXDsize(&ea_buf->new_ea, new_size); in ea_put()
611 DXDaddress(&ea_buf->new_ea, 0); in ea_put()
612 DXDlength(&ea_buf->new_ea, 0); in ea_put()
613 } else if (ea_buf->flag & EA_MALLOC) { in ea_put()
614 rc = ea_write(inode, ea_buf->xattr, new_size, &ea_buf->new_ea); in ea_put()
615 kfree(ea_buf->xattr); in ea_put()
616 } else if (ea_buf->flag & EA_NEW) { in ea_put()
618 flush_metapage(ea_buf->mp); in ea_put()
621 rc = ea_write(inode, ea_buf->xattr, new_size, &ea_buf->new_ea); in ea_put()
622 discard_metapage(ea_buf->mp); in ea_put()
634 if (ea_buf) { in ea_put()
635 txEA(tid, inode, &ji->ea, &ea_buf->new_ea); in ea_put()
636 if (ea_buf->new_ea.flag & DXD_EXTENT) { in ea_put()
637 new_blocks = lengthDXD(&ea_buf->new_ea); in ea_put()
641 ji->ea = ea_buf->new_ea; in ea_put()
664 struct ea_buffer ea_buf; in __jfs_setxattr() local
675 xattr_size = ea_get(inode, &ea_buf, 0); in __jfs_setxattr()
682 ealist = (struct jfs_ea_list *) ea_buf.xattr; in __jfs_setxattr()
716 if (new_size > ea_buf.max_size) { in __jfs_setxattr()
721 ea_release(inode, &ea_buf); in __jfs_setxattr()
722 xattr_size = ea_get(inode, &ea_buf, new_size); in __jfs_setxattr()
787 rc = ea_put(tid, inode, &ea_buf, new_size); in __jfs_setxattr()
791 ea_release(inode, &ea_buf); in __jfs_setxattr()
803 struct ea_buffer ea_buf; in __jfs_getxattr() local
811 xattr_size = ea_get(inode, &ea_buf, 0); in __jfs_getxattr()
821 ealist = (struct jfs_ea_list *) ea_buf.xattr; in __jfs_getxattr()
850 ea_release(inode, &ea_buf); in __jfs_getxattr()
875 struct ea_buffer ea_buf; in jfs_listxattr() local
879 xattr_size = ea_get(inode, &ea_buf, 0); in jfs_listxattr()
888 ealist = (struct jfs_ea_list *) ea_buf.xattr; in jfs_listxattr()
921 ea_release(inode, &ea_buf); in jfs_listxattr()