Merge tag 'gfs2-merge-window' of git://git.kernel.org/pub/scm/linux/kernel/git/gfs2...
[cascardo/linux.git] / fs / gfs2 / xattr.c
index f0fe884..e8dfb47 100644 (file)
@@ -583,11 +583,13 @@ out:
  *
  * Returns: actual size of data on success, -errno on error
  */
-static int gfs2_xattr_get(struct dentry *dentry, const char *name,
-               void *buffer, size_t size, int type)
+static int gfs2_xattr_get(const struct xattr_handler *handler,
+                         struct dentry *dentry, const char *name,
+                         void *buffer, size_t size)
 {
        struct gfs2_inode *ip = GFS2_I(d_inode(dentry));
        struct gfs2_ea_location el;
+       int type = handler->flags;
        int error;
 
        if (!ip->i_eattr)
@@ -1227,61 +1229,12 @@ int __gfs2_xattr_set(struct inode *inode, const char *name,
        return error;
 }
 
-static int gfs2_xattr_set(struct dentry *dentry, const char *name,
-               const void *value, size_t size, int flags, int type)
+static int gfs2_xattr_set(const struct xattr_handler *handler,
+                         struct dentry *dentry, const char *name,
+                         const void *value, size_t size, int flags)
 {
        return __gfs2_xattr_set(d_inode(dentry), name, value,
-                               size, flags, type);
-}
-
-
-static int ea_acl_chmod_unstuffed(struct gfs2_inode *ip,
-                                 struct gfs2_ea_header *ea, char *data)
-{
-       struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
-       unsigned int amount = GFS2_EA_DATA_LEN(ea);
-       unsigned int nptrs = DIV_ROUND_UP(amount, sdp->sd_jbsize);
-       int ret;
-
-       ret = gfs2_trans_begin(sdp, nptrs + RES_DINODE, 0);
-       if (ret)
-               return ret;
-
-       ret = gfs2_iter_unstuffed(ip, ea, data, NULL);
-       gfs2_trans_end(sdp);
-
-       return ret;
-}
-
-int gfs2_xattr_acl_chmod(struct gfs2_inode *ip, struct iattr *attr, char *data)
-{
-       struct inode *inode = &ip->i_inode;
-       struct gfs2_sbd *sdp = GFS2_SB(inode);
-       struct gfs2_ea_location el;
-       int error;
-
-       error = gfs2_ea_find(ip, GFS2_EATYPE_SYS, GFS2_POSIX_ACL_ACCESS, &el);
-       if (error)
-               return error;
-
-       if (GFS2_EA_IS_STUFFED(el.el_ea)) {
-               error = gfs2_trans_begin(sdp, RES_DINODE + RES_EATTR, 0);
-               if (error == 0) {
-                       gfs2_trans_add_meta(ip->i_gl, el.el_bh);
-                       memcpy(GFS2_EA2DATA(el.el_ea), data,
-                              GFS2_EA_DATA_LEN(el.el_ea));
-               }
-       } else {
-               error = ea_acl_chmod_unstuffed(ip, el.el_ea, data);
-       }
-
-       brelse(el.el_bh);
-       if (error)
-               return error;
-
-       error = gfs2_setattr_simple(inode, attr);
-       gfs2_trans_end(sdp);
-       return error;
+                               size, flags, handler->flags);
 }
 
 static int ea_dealloc_indirect(struct gfs2_inode *ip)