Bug 1654753
| Summary: | A distributed-disperse volume crashes when a symbolic link is renamed | ||
|---|---|---|---|
| Product: | [Community] GlusterFS | Reporter: | Xavi Hernandez <jahernan> |
| Component: | distribute | Assignee: | Susant Kumar Palai <spalai> |
| Status: | CLOSED DEFERRED | QA Contact: | |
| Severity: | high | Docs Contact: | |
| Priority: | high | ||
| Version: | mainline | CC: | bugs, nchilaka, pasik, spalai |
| Target Milestone: | --- | ||
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | If docs needed, set a value | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2020-03-03 07:57:06 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
REVIEW: https://review.gluster.org/22666 (dht: use separate inode for linkto file create and setattr) posted (#2) for review on master by Susant Palai Not being actively worked on. It will be reopened when someone works on it. |
Description of problem: On a distributed-disperse volume, if you try to rename a symbolic link, the fuse process dies. Version-Release number of selected component (if applicable): mainline How reproducible: Often, depends on the names used as original and renamed names Steps to Reproduce: 1. gluster volume create test disperse 6 redundancy 2 host:/bricks/test_{1..12} 2. gluster volume start test 3. mount -t glusterfs host:/test /mnt 4. ln -s /dummy /mnt/symlink 5. mv /mnt/symlink /mnt/symlink.2 Actual results: Fuse mount crashes Expected results: The rename should not cause a crash Additional info: The problem appears at the creation of the linkto file when the new name doesn't go to the same brick the symlink was residing before the rename. In this case DHT creates the symlink and tries to set some attributes calling setattr fop. When setattr is called, the passed inode references the "real" file (i.e. a symlink). However, when ec receives the answers from bricks, statpre and statpost say that the inode is a regular file (because linkto files are regular files on the bricks). This makes ec assume that it's a file, so it must have a defined size, but symlinks do not have size, which causes an assertion to fail. We shouldn't use the same inode structure to represent two different things.