ěTRFS_I(inode)->flags = btrfs_inode_flags(leaf, inode_item) rdev = btrfs_inode_rdev(leaf, inode_item) inode->i_generation = BTRFS_I(inode)->generation inode->i_version = btrfs_inode_sequence(leaf, inode_item) If (BTRFS_I(inode)->last_trans = root->fs_info->generation) + * This is required for both inode re-read from disk and delayed inode * idea about which extents were modified before we were evicted from * and then re-read we need to do a full sync since we don't have any * If we were modified in the current generation and evicted from memory +ěTRFS_I(inode)->flags = btrfs_inode_flags(leaf, inode_item) + rdev = btrfs_inode_rdev(leaf, inode_item) + inode->i_generation = BTRFS_I(inode)->generation + inode->i_version = btrfs_inode_sequence(leaf, inode_item) +++ -3511,25 +3511,28 static void btrfs_read_locked_inode(struīTRFS_I(inode)->generation = btrfs_inode_generation(leaf, inode_item) īTRFS_I(inode)->last_trans = btrfs_inode_transid(leaf, inode_item) *rdev = btrfs_stack_inode_rdev(inode_item) Inode->i_version = btrfs_stack_inode_sequence(inode_item) ![]() + BTRFS_I(inode)->last_trans = btrfs_stack_inode_transid(inode_item) Inode_set_bytes(inode, btrfs_stack_inode_nbytes(inode_item)) īTRFS_I(inode)->generation = btrfs_stack_inode_generation(inode_item) Set_nlink(inode, btrfs_stack_inode_nlink(inode_item)) Log entries we expected after (6) and generic/311 passed.įs/btrfs/inode.c | 21 ++++++++++++-Ģ files changed, 14 insertions(+), 9 deletions(-) Runtime_flags if needed in this situation. This patch fill the ->last_trans properly and set the Is already in our tree which is commited, not recording the extents Will check the ->last_trans and found it's 0 then say this inode Last_trans is not filled, then the fsync() drop_all_caches() /proc/sys/vm/drop_caches" We need to fill inode when we found a node for it in delayed_nodes_tree.īut we did not fill the ->last_trans currently, it will cause the test ` (74 subsequent siblings) 99 siblings, 0 replies 106+ messages in threadĬc: akpm, Denis Kirjanov, Chris Mason, Miao Xie, Yang DongshengĬommit 6e17d30bfaf43e04d991392d8484f1c556810c33 upstream. 13:38 ` pcrypt: use format specifier in kobject_add Ben Hutchings ![]() 13:38 ` powerpc/configs: Don't enable PPC_EARLY_DEBUG in defconfigs Ben 13:38 ` Ben Hutchings ![]() * Btrfs: fill ->last_trans for delayed inode in btrfs_fill_inode. Struct cache_head *key, int -94,6 +98,7 struct cache_head *sunrpc_cache_lookup(sįreeme = -109,8 +114,10 struct cache_head *sunrpc_cache_lookup(s Struct cache_head *sunrpc_cache_lookup(struct cache_detail *detail, +static void cache_fresh_unlocked(struct cache_head *head, +static void cache_fresh_locked(struct cache_head *head, time_t expiry) ![]() +++ -50,6 +50,10 static void cache_init(struct cache_head cache_fresh_lock() doesn't take a struct cache_detail pointerġ file changed, 9 insertions(+), 1 deletion(-) In our case we noticed it because an entry in the export cache wasįixes d202cce8963d ("sunrpc: never return expired entries in sunrpc_cache_lookup") Refcounter and therefore it won't be freed after cache_put(freeme).īecause the cache_head was removed from the hash it cannot be foundĭuring cache_clean() and can be leaked forever, together with stalled However, the expired cache_head may be waiting for a reply from a If anyone has any objections, please let me know.Ĭommit 4ecd55ea074217473f94cfee21bb72864d39f8d7 upstream.Īfter commit d202cce8963d, an expired cache_head can be removed from the ` (89 subsequent siblings) 99 siblings, 0 replies 106+ messages in threadįrom: Ben Hutchings 13:38 UTC ( / raw)Ĭc: akpm, Denis Kirjanov, NeilBrown, J. 13:38 ` USB: serial: pl2303: add ids for Hewlett-Packard HP POS pole displays Ben Hutchings 13:38 ` perf svghelper: Fix unchecked usage of strncpy() Ben 13:38 ` Ben Hutchings Sunrpc: fix cache_head leak due to queued request archive mirror help / color / mirror / Atom feed * sunrpc: fix cache_head leak due to queued request
0 Comments
Leave a Reply. |