|
@@ -1296,6 +1296,7 @@ fail:
|
|
|
|
|
|
int gfs2_xattr_acl_chmod(struct gfs2_inode *ip, struct iattr *attr, char *data)
|
|
|
{
|
|
|
+ struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
|
|
|
struct gfs2_ea_location el;
|
|
|
struct buffer_head *dibh;
|
|
|
int error;
|
|
@@ -1305,16 +1306,17 @@ int gfs2_xattr_acl_chmod(struct gfs2_inode *ip, struct iattr *attr, char *data)
|
|
|
return error;
|
|
|
|
|
|
if (GFS2_EA_IS_STUFFED(el.el_ea)) {
|
|
|
- error = gfs2_trans_begin(GFS2_SB(&ip->i_inode), RES_DINODE + RES_EATTR, 0);
|
|
|
- if (error)
|
|
|
- return error;
|
|
|
-
|
|
|
- gfs2_trans_add_bh(ip->i_gl, el.el_bh, 1);
|
|
|
- memcpy(GFS2_EA2DATA(el.el_ea), data,
|
|
|
- GFS2_EA_DATA_LEN(el.el_ea));
|
|
|
- } else
|
|
|
+ error = gfs2_trans_begin(sdp, RES_DINODE + RES_EATTR, 0);
|
|
|
+ if (error == 0) {
|
|
|
+ gfs2_trans_add_bh(ip->i_gl, el.el_bh, 1);
|
|
|
+ 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;
|
|
|
|
|
@@ -1327,8 +1329,7 @@ int gfs2_xattr_acl_chmod(struct gfs2_inode *ip, struct iattr *attr, char *data)
|
|
|
brelse(dibh);
|
|
|
}
|
|
|
|
|
|
- gfs2_trans_end(GFS2_SB(&ip->i_inode));
|
|
|
-
|
|
|
+ gfs2_trans_end(sdp);
|
|
|
return error;
|
|
|
}
|
|
|
|