diff options
author | David Woodhouse <David.Woodhouse@intel.com> | 2016-02-01 14:04:46 +0000 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-03-09 15:34:53 -0800 |
commit | 3ef98fdea9a9bb8d0ba653faadcf16525d6e0f9c (patch) | |
tree | 6ef1fd1046b3eb6f3d59b6b43f855012762d47de /drivers/accessibility | |
parent | 17d919c7379efbe5489243cd7ffa8a24fe09470b (diff) | |
download | talos-op-linux-3ef98fdea9a9bb8d0ba653faadcf16525d6e0f9c.tar.gz talos-op-linux-3ef98fdea9a9bb8d0ba653faadcf16525d6e0f9c.zip |
Fix directory hardlinks from deleted directories
commit be629c62a603e5935f8177fd8a19e014100a259e upstream.
When a directory is deleted, we don't take too much care about killing off
all the dirents that belong to it — on the basis that on remount, the scan
will conclude that the directory is dead anyway.
This doesn't work though, when the deleted directory contained a child
directory which was moved *out*. In the early stages of the fs build
we can then end up with an apparent hard link, with the child directory
appearing both in its true location, and as a child of the original
directory which are this stage of the mount process we don't *yet* know
is defunct.
To resolve this, take out the early special-casing of the "directories
shall not have hard links" rule in jffs2_build_inode_pass1(), and let the
normal nlink processing happen for directories as well as other inodes.
Then later in the build process we can set ic->pino_nlink to the parent
inode#, as is required for directories during normal operaton, instead
of the nlink. And complain only *then* about hard links which are still
in evidence even after killing off all the unreachable paths.
Reported-by: Liu Song <liu.song11@zte.com.cn>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/accessibility')
0 files changed, 0 insertions, 0 deletions