mirror of
https://github.com/versity/scoutfs.git
synced 2026-09-04 23:27:05 +00:00
scoutfs: add end to _item_delete
Add the end argument to scoutfs_item_delete() to limit how many items it will read into the cache. Signed-off-by: Zach Brown <zab@versity.com>
This commit is contained in:
+3
-3
@@ -351,16 +351,16 @@ static int modify_items(struct super_block *sb, struct native_extent *ext,
|
||||
|
||||
init_extent_key(&key, key_bytes, ext, arg, type);
|
||||
ret = create ? scoutfs_item_create(sb, &key, NULL) :
|
||||
scoutfs_item_delete(sb, &key);
|
||||
scoutfs_item_delete(sb, &key, NULL);
|
||||
|
||||
if (ret == 0 && type == SCOUTFS_FREE_EXTENT_BLKNO_TYPE) {
|
||||
init_extent_key(&key, key_bytes, ext, arg,
|
||||
SCOUTFS_FREE_EXTENT_BLOCKS_TYPE);
|
||||
ret = create ? scoutfs_item_create(sb, &key, NULL) :
|
||||
scoutfs_item_delete(sb, &key);
|
||||
scoutfs_item_delete(sb, &key, NULL);
|
||||
if (ret) {
|
||||
init_extent_key(&key, key_bytes, ext, arg, type);
|
||||
err = create ? scoutfs_item_delete(sb, &key) :
|
||||
err = create ? scoutfs_item_delete(sb, &key, NULL) :
|
||||
scoutfs_item_create(sb, &key, NULL);
|
||||
BUG_ON(err);
|
||||
}
|
||||
|
||||
+2
-2
@@ -443,7 +443,7 @@ static int add_entry_items(struct inode *dir, struct dentry *dentry,
|
||||
ret = 0;
|
||||
out:
|
||||
while (ret < 0 && --del >= 0) {
|
||||
err = scoutfs_item_delete(sb, del_keys[del]);
|
||||
err = scoutfs_item_delete(sb, del_keys[del], NULL);
|
||||
/* can always delete dirty while holding */
|
||||
BUG_ON(err);
|
||||
}
|
||||
@@ -692,7 +692,7 @@ static int symlink_item_ops(struct super_block *sb, int op, u64 ino,
|
||||
ret = scoutfs_item_lookup_exact(sb, &key, val, bytes,
|
||||
NULL);
|
||||
else if (op == SYM_DELETE)
|
||||
ret = scoutfs_item_delete(sb, &key);
|
||||
ret = scoutfs_item_delete(sb, &key, NULL);
|
||||
if (ret)
|
||||
break;
|
||||
|
||||
|
||||
+4
-4
@@ -498,9 +498,9 @@ static int update_index(struct inode *inode, u8 type, u64 now_major,
|
||||
del_ikey.ino = cpu_to_be64(scoutfs_ino(inode));
|
||||
scoutfs_key_init(&del, &del_ikey, sizeof(del_ikey));
|
||||
|
||||
ret = scoutfs_item_delete(sb, &del);
|
||||
ret = scoutfs_item_delete(sb, &del, NULL);
|
||||
if (ret) {
|
||||
err = scoutfs_item_delete(sb, &ins);
|
||||
err = scoutfs_item_delete(sb, &ins, NULL);
|
||||
BUG_ON(err);
|
||||
}
|
||||
|
||||
@@ -775,7 +775,7 @@ static int remove_orphan_item(struct super_block *sb, u64 ino)
|
||||
|
||||
init_orphan_key(&key, &okey, sbi->node_id, ino);
|
||||
|
||||
ret = scoutfs_item_delete(sb, &key);
|
||||
ret = scoutfs_item_delete(sb, &key, NULL);
|
||||
if (ret == -ENOENT)
|
||||
ret = 0;
|
||||
|
||||
@@ -811,7 +811,7 @@ static int __delete_inode(struct super_block *sb, struct scoutfs_key_buf *key,
|
||||
goto out;
|
||||
|
||||
#endif
|
||||
ret = scoutfs_item_delete(sb, key);
|
||||
ret = scoutfs_item_delete(sb, key, NULL);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
|
||||
+4
-11
@@ -1353,11 +1353,11 @@ out:
|
||||
* there are any ways for userspace to overwhelm the system with
|
||||
* deletion items for items that didn't exist in the first place.
|
||||
*/
|
||||
int scoutfs_item_delete(struct super_block *sb, struct scoutfs_key_buf *key)
|
||||
int scoutfs_item_delete(struct super_block *sb, struct scoutfs_key_buf *key,
|
||||
struct scoutfs_key_buf *end)
|
||||
{
|
||||
struct scoutfs_sb_info *sbi = SCOUTFS_SB(sb);
|
||||
struct item_cache *cac = sbi->item_cache;
|
||||
struct scoutfs_key_buf *end;
|
||||
struct cached_item *item;
|
||||
SCOUTFS_DECLARE_KVEC(del_val);
|
||||
unsigned long flags;
|
||||
@@ -1365,12 +1365,6 @@ int scoutfs_item_delete(struct super_block *sb, struct scoutfs_key_buf *key)
|
||||
|
||||
scoutfs_kvec_init_null(del_val);
|
||||
|
||||
end = scoutfs_key_alloc(sb, SCOUTFS_MAX_KEY_SIZE);
|
||||
if (!end) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
do {
|
||||
spin_lock_irqsave(&cac->lock, flags);
|
||||
|
||||
@@ -1378,7 +1372,7 @@ int scoutfs_item_delete(struct super_block *sb, struct scoutfs_key_buf *key)
|
||||
if (item) {
|
||||
become_deletion_item(sb, cac, item, del_val);
|
||||
ret = 0;
|
||||
} else if (check_range(sb, &cac->ranges, key, end)) {
|
||||
} else if (check_range(sb, &cac->ranges, key, NULL)) {
|
||||
ret = -ENOENT;
|
||||
} else {
|
||||
ret = -ENODATA;
|
||||
@@ -1389,9 +1383,8 @@ int scoutfs_item_delete(struct super_block *sb, struct scoutfs_key_buf *key)
|
||||
} while (ret == -ENODATA &&
|
||||
(ret = scoutfs_manifest_read_items(sb, key, end)) == 0);
|
||||
|
||||
scoutfs_key_free(sb, end);
|
||||
scoutfs_kvec_kfree(del_val);
|
||||
out:
|
||||
|
||||
trace_printk("ret %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
+2
-1
@@ -39,7 +39,8 @@ void scoutfs_item_delete_dirty(struct super_block *sb,
|
||||
int scoutfs_item_delete_many(struct super_block *sb,
|
||||
struct scoutfs_key_buf **keys, unsigned nr,
|
||||
struct scoutfs_key_buf *end);
|
||||
int scoutfs_item_delete(struct super_block *sb, struct scoutfs_key_buf *key);
|
||||
int scoutfs_item_delete(struct super_block *sb, struct scoutfs_key_buf *key,
|
||||
struct scoutfs_key_buf *end);
|
||||
|
||||
int scoutfs_item_add_batch(struct super_block *sb, struct list_head *list,
|
||||
struct scoutfs_key_buf *key, struct kvec *val);
|
||||
|
||||
+1
-1
@@ -483,7 +483,7 @@ int scoutfs_xattr_drop(struct super_block *sb, u64 ino)
|
||||
break;
|
||||
}
|
||||
|
||||
ret = scoutfs_item_delete(sb, key);
|
||||
ret = scoutfs_item_delete(sb, key, lck->end);
|
||||
if (ret)
|
||||
break;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user