<!--- Verify first that your issue is not already reported on GitHub -->
<!--- Also test if the latest release and devel branch are affected too -->
<!--- Complete *all* sections as described, this form is processed automatically -->

##### SUMMARY
<!--- Explain the problem briefly below -->
Given a directory containing files and symlinks, if one tries to copy the directory recursively using the `copy` module and sets `local_follow=no` and `mode=preserve`, the copy module fails with:
```
bad symbolic permission for mode: preserve
```

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
<!--- Write the short name of the module, plugin, task or feature below, use your best guess if unsure -->
copy

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```
ansible 2.9.6
  config file = /home/mbroe/.ansible.cfg
  configured module search path = ['/home/mbroe/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.7.6 (default, Jan 30 2020, 10:29:04) [GCC 9.2.1 20190827 (Red Hat 9.2.1-1)]
```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```
DEFAULT_VAULT_PASSWORD_FILE(/home/mbroe/.ansible.cfg) = /home/mbroe/.vault_pass.txt
```

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
`lsb_release -a`:
```
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	Fedora
Description:	Fedora release 30 (Thirty)
Release:	30
Codename:	Thirty
```

##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->

<!--- Paste example playbooks or commands between quotes below -->

<!--- HINT: You can paste gist.github.com links for larger files -->
https://gist.github.com/mitchellroe/08be2d69cf7c961067a4a3071fa57c75

##### EXPECTED RESULTS
<!--- Describe what you expected to happen when running the steps above -->
The file and symlink are copied with their modes preserved.

##### ACTUAL RESULTS
<!--- Describe what actually happened. If possible run with extra verbosity (-vvvv) -->
The file is copied, the link is copied, but ansible-playbook fails with `bad symbolic permission for mode: preserve`.

<!--- Paste verbatim command output between quotes -->
[Output](https://gist.github.com/mitchellroe/76bac2153ad37a47f1e056d8c92b2ece)
if trailing_slash_detector and not trailing_slash_detector(base_path):
        offset += 1
    elif not base_path.endswith(os.path.sep):
        offset += 1
    if os.path.islink(topdir) and not local_follow:
        r_files['symlinks'] = (os.readlink(topdir), os.path.basename(topdir))
        return r_files
    dir_stats = os.stat(topdir)
    parents = frozenset(((dir_stats.st_dev, dir_stats.st_ino),))
    
    _recurse(topdir, offset, parents)
    return r_files
class ActionModule(ActionBase):
    TRANSFERS_FILES = True
    def _ensure_invocation(self, result):
        
        
        
        if 'invocation' not in result:
            if self._play_context.no_log:
                result['invocation'] = "CENSORED: no_log is set"
            else:
                
                
                result['invocation'] = self._task.args.copy()
                result['invocation']['module_args'] = self._task.args.copy()
        if isinstance(result['invocation'], dict) and 'content' in result['invocation']:
            result['invocation']['content'] = 'CENSORED: content is a no_log parameter'
        return result
    def _copy_file(self, source_full, source_rel, content, content_tempfile,