.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. |
---|
3 | 4 | * Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved. |
---|
4 | | - * |
---|
5 | | - * This copyrighted material is made available to anyone wishing to use, |
---|
6 | | - * modify, copy, or redistribute it subject to the terms and conditions |
---|
7 | | - * of the GNU General Public License version 2. |
---|
8 | 5 | */ |
---|
9 | 6 | |
---|
10 | 7 | #include <linux/slab.h> |
---|
.. | .. |
---|
283 | 280 | blen++; |
---|
284 | 281 | else { |
---|
285 | 282 | if (bstart) |
---|
286 | | - gfs2_free_meta(ip, bstart, blen); |
---|
| 283 | + gfs2_free_meta(ip, rgd, bstart, blen); |
---|
287 | 284 | bstart = bn; |
---|
288 | 285 | blen = 1; |
---|
289 | 286 | } |
---|
.. | .. |
---|
292 | 289 | gfs2_add_inode_blocks(&ip->i_inode, -1); |
---|
293 | 290 | } |
---|
294 | 291 | if (bstart) |
---|
295 | | - gfs2_free_meta(ip, bstart, blen); |
---|
| 292 | + gfs2_free_meta(ip, rgd, bstart, blen); |
---|
296 | 293 | |
---|
297 | 294 | if (prev && !leave) { |
---|
298 | 295 | u32 len; |
---|
.. | .. |
---|
591 | 588 | |
---|
592 | 589 | static int gfs2_xattr_get(const struct xattr_handler *handler, |
---|
593 | 590 | struct dentry *unused, struct inode *inode, |
---|
594 | | - const char *name, void *buffer, size_t size) |
---|
| 591 | + const char *name, void *buffer, size_t size, |
---|
| 592 | + int flags) |
---|
595 | 593 | { |
---|
596 | 594 | struct gfs2_inode *ip = GFS2_I(inode); |
---|
597 | 595 | struct gfs2_holder gh; |
---|
.. | .. |
---|
631 | 629 | error = gfs2_alloc_blocks(ip, &block, &n, 0, NULL); |
---|
632 | 630 | if (error) |
---|
633 | 631 | return error; |
---|
634 | | - gfs2_trans_add_unrevoke(sdp, block, 1); |
---|
| 632 | + gfs2_trans_remove_revoke(sdp, block, 1); |
---|
635 | 633 | *bhp = gfs2_meta_new(ip->i_gl, block); |
---|
636 | 634 | gfs2_trans_add_meta(ip->i_gl, *bhp); |
---|
637 | 635 | gfs2_metatype_set(*bhp, GFS2_METATYPE_EA, GFS2_FORMAT_EA); |
---|
.. | .. |
---|
693 | 691 | error = gfs2_alloc_blocks(ip, &block, &n, 0, NULL); |
---|
694 | 692 | if (error) |
---|
695 | 693 | return error; |
---|
696 | | - gfs2_trans_add_unrevoke(sdp, block, 1); |
---|
| 694 | + gfs2_trans_remove_revoke(sdp, block, 1); |
---|
697 | 695 | bh = gfs2_meta_new(ip->i_gl, block); |
---|
698 | 696 | gfs2_trans_add_meta(ip->i_gl, bh); |
---|
699 | 697 | gfs2_metatype_set(bh, GFS2_METATYPE_ED, GFS2_FORMAT_ED); |
---|
.. | .. |
---|
997 | 995 | error = gfs2_alloc_blocks(ip, &blk, &n, 0, NULL); |
---|
998 | 996 | if (error) |
---|
999 | 997 | return error; |
---|
1000 | | - gfs2_trans_add_unrevoke(sdp, blk, 1); |
---|
| 998 | + gfs2_trans_remove_revoke(sdp, blk, 1); |
---|
1001 | 999 | indbh = gfs2_meta_new(ip->i_gl, blk); |
---|
1002 | 1000 | gfs2_trans_add_meta(ip->i_gl, indbh); |
---|
1003 | 1001 | gfs2_metatype_set(indbh, GFS2_METATYPE_IN, GFS2_FORMAT_IN); |
---|
.. | .. |
---|
1225 | 1223 | struct gfs2_holder gh; |
---|
1226 | 1224 | int ret; |
---|
1227 | 1225 | |
---|
1228 | | - ret = gfs2_rsqa_alloc(ip); |
---|
| 1226 | + ret = gfs2_qa_get(ip); |
---|
1229 | 1227 | if (ret) |
---|
1230 | 1228 | return ret; |
---|
1231 | 1229 | |
---|
.. | .. |
---|
1234 | 1232 | if (!gfs2_glock_is_locked_by_me(ip->i_gl)) { |
---|
1235 | 1233 | ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh); |
---|
1236 | 1234 | if (ret) |
---|
1237 | | - return ret; |
---|
| 1235 | + goto out; |
---|
1238 | 1236 | } else { |
---|
1239 | | - if (WARN_ON_ONCE(ip->i_gl->gl_state != LM_ST_EXCLUSIVE)) |
---|
1240 | | - return -EIO; |
---|
| 1237 | + if (WARN_ON_ONCE(ip->i_gl->gl_state != LM_ST_EXCLUSIVE)) { |
---|
| 1238 | + ret = -EIO; |
---|
| 1239 | + goto out; |
---|
| 1240 | + } |
---|
1241 | 1241 | gfs2_holder_mark_uninitialized(&gh); |
---|
1242 | 1242 | } |
---|
1243 | 1243 | ret = __gfs2_xattr_set(inode, name, value, size, flags, handler->flags); |
---|
1244 | 1244 | if (gfs2_holder_initialized(&gh)) |
---|
1245 | 1245 | gfs2_glock_dq_uninit(&gh); |
---|
| 1246 | +out: |
---|
| 1247 | + gfs2_qa_put(ip); |
---|
1246 | 1248 | return ret; |
---|
1247 | 1249 | } |
---|
1248 | 1250 | |
---|
.. | .. |
---|
1250 | 1252 | { |
---|
1251 | 1253 | struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); |
---|
1252 | 1254 | struct gfs2_rgrp_list rlist; |
---|
| 1255 | + struct gfs2_rgrpd *rgd; |
---|
1253 | 1256 | struct buffer_head *indbh, *dibh; |
---|
1254 | 1257 | __be64 *eablk, *end; |
---|
1255 | 1258 | unsigned int rg_blocks = 0; |
---|
.. | .. |
---|
1299 | 1302 | else |
---|
1300 | 1303 | goto out; |
---|
1301 | 1304 | |
---|
1302 | | - gfs2_rlist_alloc(&rlist, LM_ST_EXCLUSIVE); |
---|
| 1305 | + gfs2_rlist_alloc(&rlist); |
---|
1303 | 1306 | |
---|
1304 | 1307 | for (x = 0; x < rlist.rl_rgrps; x++) { |
---|
1305 | | - struct gfs2_rgrpd *rgd = gfs2_glock2rgrp(rlist.rl_ghs[x].gh_gl); |
---|
1306 | | - |
---|
| 1308 | + rgd = gfs2_glock2rgrp(rlist.rl_ghs[x].gh_gl); |
---|
1307 | 1309 | rg_blocks += rgd->rd_length; |
---|
1308 | 1310 | } |
---|
1309 | 1311 | |
---|
.. | .. |
---|
1320 | 1322 | |
---|
1321 | 1323 | eablk = (__be64 *)(indbh->b_data + sizeof(struct gfs2_meta_header)); |
---|
1322 | 1324 | bstart = 0; |
---|
| 1325 | + rgd = NULL; |
---|
1323 | 1326 | blen = 0; |
---|
1324 | 1327 | |
---|
1325 | 1328 | for (; eablk < end; eablk++) { |
---|
.. | .. |
---|
1333 | 1336 | blen++; |
---|
1334 | 1337 | else { |
---|
1335 | 1338 | if (bstart) |
---|
1336 | | - gfs2_free_meta(ip, bstart, blen); |
---|
| 1339 | + gfs2_free_meta(ip, rgd, bstart, blen); |
---|
1337 | 1340 | bstart = bn; |
---|
| 1341 | + rgd = gfs2_blk2rgrpd(sdp, bstart, true); |
---|
1338 | 1342 | blen = 1; |
---|
1339 | 1343 | } |
---|
1340 | 1344 | |
---|
.. | .. |
---|
1342 | 1346 | gfs2_add_inode_blocks(&ip->i_inode, -1); |
---|
1343 | 1347 | } |
---|
1344 | 1348 | if (bstart) |
---|
1345 | | - gfs2_free_meta(ip, bstart, blen); |
---|
| 1349 | + gfs2_free_meta(ip, rgd, bstart, blen); |
---|
1346 | 1350 | |
---|
1347 | 1351 | ip->i_diskflags &= ~GFS2_DIF_EA_INDIRECT; |
---|
1348 | 1352 | |
---|
.. | .. |
---|
1391 | 1395 | if (error) |
---|
1392 | 1396 | goto out_gunlock; |
---|
1393 | 1397 | |
---|
1394 | | - gfs2_free_meta(ip, ip->i_eattr, 1); |
---|
| 1398 | + gfs2_free_meta(ip, rgd, ip->i_eattr, 1); |
---|
1395 | 1399 | |
---|
1396 | 1400 | ip->i_eattr = 0; |
---|
1397 | 1401 | gfs2_add_inode_blocks(&ip->i_inode, -1); |
---|