mirror of
https://github.com/gluster/glusterfs.git
synced 2026-02-07 03:48:44 +01:00
This patch fixes 3 problems: First problem: After commitc0bd592e, the pl_inode_t object was also created in the cbk of lookup requests. Lookup requests are a bit different than any other request because the inode received may not be completely initialized. In particular, inode->gfid may be null. This caused that the gfid stored in the pl_inode_t object was null in some cases. This gfid is used mostly for logs, but also to send lock contention notifications. This meant that some notifications could be sent with a null gfid, making impossible for the client xlator to correctly identify the contending inode, so the lock was not released immediately when eager-lock was also enabled. Second problem: The feature introduced byc0bd592eneeded to track the number of hardlinks of each inode to detect when it was deleted. However it was done using the 'get-link-count' special xattr on lookup, while posix only implements it for unlink and rename. Also, the number of hardlinks was not incremented for mkdir, mknod, rename, ..., so it didn't work correctly for directories. Third problem: When the last hardlink of an open file is deleted, all locks will be denied with ESTALE error, but that's not correct. Access to the open fd must succeed. The first problem is fixed by avoiding creating pl_inode_t objects during lookup. Second and third problems are fixed by completely ignoring if the file has been deleted or not. Even if we grant a lock on a non-existing file, the next operation done by the client inside the lock will return the correct error, which should be enough. Fixes: #2551 Change-Id: Ic73e82f6b725b838c1600b6a128ea36a75f13253 Signed-off-by: Xavi Hernandez <xhernandez@redhat.com>