summaryrefslogtreecommitdiffstats
path: root/api
diff options
context:
space:
mode:
authorRaghavendra Bhat <raghavendra@redhat.com>2019-04-30 15:38:55 -0400
committerXavi Hernandez <xhernandez@redhat.com>2019-06-25 16:21:03 +0000
commitd58594d802d617ed81b8f991fd312c224f1f85d4 (patch)
treea5db1a417f5c10c89b7ac23f64f4037878f2c546 /api
parentbee5d7bd8a602184c94c12115c7e30572eb7588c (diff)
* core: do not assert in inode_unref if the inode table cleanup has started
There is a good chance that, the inode on which unref came has already been zero refed and added to the purge list. This can happen when inode table is being destroyed (glfs_fini is something which destroys the inode table). Consider a directory 'a' which has a file 'b'. Now as part of inode table destruction zero refing of inodes does not happen from leaf to the root. It happens in the order inodes are present in the list. So, in this example, the dentry of 'b' would have its parent set to the inode of 'a'. So if 'a' gets zero refed first (as part of inode table cleanup) and then 'b' has to zero refed, then dentry_unset is called on the dentry of 'b' and it further goes on to call inode_unref on b's parent which is 'a'. In this situation, GF_ASSERT would be called as the refcount of 'a' has been already set to zero. So, return the inode (in the function inode_unref without doing anything) if the inode table cleanup has already started and inode's refcount is zero. Change-Id: I91e0a807d5c9ce0daae5a611c38da379fd11076e fixes: bz#1722546 Signed-off-by: Raghavendra Bhat <raghavendra@redhat.com>
Diffstat (limited to 'api')
0 files changed, 0 insertions, 0 deletions