1*aa98d7cfSKaiGai Kohei /*-------------------------------------------------------------------------* 2*aa98d7cfSKaiGai Kohei * File: fs/jffs2/xattr_user.c 3*aa98d7cfSKaiGai Kohei * XATTR support on JFFS2 FileSystem 4*aa98d7cfSKaiGai Kohei * 5*aa98d7cfSKaiGai Kohei * Implemented by KaiGai Kohei <kaigai@ak.jp.nec.com> 6*aa98d7cfSKaiGai Kohei * Copyright (C) 2006 NEC Corporation 7*aa98d7cfSKaiGai Kohei * 8*aa98d7cfSKaiGai Kohei * For licensing information, see the file 'LICENCE' in the jffs2 directory. 9*aa98d7cfSKaiGai Kohei *-------------------------------------------------------------------------*/ 10*aa98d7cfSKaiGai Kohei #include <linux/kernel.h> 11*aa98d7cfSKaiGai Kohei #include <linux/fs.h> 12*aa98d7cfSKaiGai Kohei #include <linux/jffs2.h> 13*aa98d7cfSKaiGai Kohei #include <linux/xattr.h> 14*aa98d7cfSKaiGai Kohei #include <linux/mtd/mtd.h> 15*aa98d7cfSKaiGai Kohei #include "nodelist.h" 16*aa98d7cfSKaiGai Kohei 17*aa98d7cfSKaiGai Kohei static int jffs2_user_getxattr(struct inode *inode, const char *name, 18*aa98d7cfSKaiGai Kohei void *buffer, size_t size) 19*aa98d7cfSKaiGai Kohei { 20*aa98d7cfSKaiGai Kohei if (!strcmp(name, "")) 21*aa98d7cfSKaiGai Kohei return -EINVAL; 22*aa98d7cfSKaiGai Kohei return do_jffs2_getxattr(inode, JFFS2_XPREFIX_USER, name, buffer, size); 23*aa98d7cfSKaiGai Kohei } 24*aa98d7cfSKaiGai Kohei 25*aa98d7cfSKaiGai Kohei static int jffs2_user_setxattr(struct inode *inode, const char *name, const void *buffer, 26*aa98d7cfSKaiGai Kohei size_t size, int flags) 27*aa98d7cfSKaiGai Kohei { 28*aa98d7cfSKaiGai Kohei if (!strcmp(name, "")) 29*aa98d7cfSKaiGai Kohei return -EINVAL; 30*aa98d7cfSKaiGai Kohei return do_jffs2_setxattr(inode, JFFS2_XPREFIX_USER, name, buffer, size, flags); 31*aa98d7cfSKaiGai Kohei } 32*aa98d7cfSKaiGai Kohei 33*aa98d7cfSKaiGai Kohei static size_t jffs2_user_listxattr(struct inode *inode, char *list, size_t list_size, 34*aa98d7cfSKaiGai Kohei const char *name, size_t name_len) 35*aa98d7cfSKaiGai Kohei { 36*aa98d7cfSKaiGai Kohei size_t retlen = XATTR_USER_PREFIX_LEN + name_len + 1; 37*aa98d7cfSKaiGai Kohei 38*aa98d7cfSKaiGai Kohei if (list && retlen <= list_size) { 39*aa98d7cfSKaiGai Kohei strcpy(list, XATTR_USER_PREFIX); 40*aa98d7cfSKaiGai Kohei strcpy(list + XATTR_USER_PREFIX_LEN, name); 41*aa98d7cfSKaiGai Kohei } 42*aa98d7cfSKaiGai Kohei 43*aa98d7cfSKaiGai Kohei return retlen; 44*aa98d7cfSKaiGai Kohei } 45*aa98d7cfSKaiGai Kohei 46*aa98d7cfSKaiGai Kohei struct xattr_handler jffs2_user_xattr_handler = { 47*aa98d7cfSKaiGai Kohei .prefix = XATTR_USER_PREFIX, 48*aa98d7cfSKaiGai Kohei .list = jffs2_user_listxattr, 49*aa98d7cfSKaiGai Kohei .set = jffs2_user_setxattr, 50*aa98d7cfSKaiGai Kohei .get = jffs2_user_getxattr 51*aa98d7cfSKaiGai Kohei }; 52