### Summary

When using the file module to iterate over a list of files, some of which could be hardlinks, the file module fails with "src is required for creating new hardlinks"  However, I am simply trying to modify the permissions of the files, not create new ones. 

For example, I gather the list of files like so (keep in mind some of these are regular files, some of them are hardlinks):

```
  - name: Finding all *.crt files in the pki directory
    find:
      paths: "{{ item }}"
      patterns: '*.crt'
    loop: "{{ crt_directories }}"
    register: crt_find
```

So at this point, `crt_find` is a list of files and hard links.

Then, I iterate over `crt_find` to set the permissions on all of the files and hardlinks using the file module:

```
  - name: Setting certificate file Permissions
    file:
      path: "{{ item.1.path }}"
      mode: 0644
    loop: "{{ crt_find.results | subelements('files') }}"
```

This works perfectly fine for regular files. When it gets to a hardlink, it fails with "src is required for creating new hardlinks."  The problem is, I'm not trying to create a new hardlink. I'm simply trying to modify the permissions. 

Interestingly, this goes away if I explicitly define `state: file` as a parameter on the file module task:

```
  - name: Setting certificate file Permissions
    file:
      path: "{{ item.1.path }}"
      state: file  # <---------------This fixes the problem
      mode: 0644
    loop: "{{ crt_find.results | subelements('files') }}"
```

While I've clearly found a solution to my problem, it definitely seems like a bug with the file module, as `state: file` is the default if omitted.

### Issue Type

Bug Report

### Component Name

ansible.builtin.file 

### Ansible Version

```console
$ ansible --version
ansible [core 2.11.5]
  config file = /Users/me/.ansible.cfg
  configured module search path = ['/Users/me/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/me/venv/lib/python3.8/site-packages/ansible
  ansible collection location = /Users/me/.ansible/collections:/usr/share/ansible/collections
  executable location = /Users/me/venv/bin/ansible
  python version = 3.8.2 (default, Jun  8 2021, 11:59:35) [Clang 12.0.5 (clang-1205.0.22.11)]
  jinja version = 3.0.1
  libyaml = False
```


### Configuration

```console
$ ansible-config dump --only-changed
DEFAULT_ROLES_PATH(/Users/me/.ansible.cfg) = ['/Users/me/repos']
DEFAULT_STDOUT_CALLBACK(env: ANSIBLE_STDOUT_CALLBACK) = yaml
HOST_KEY_CHECKING(/Users/me/.ansible.cfg) = False
```


### OS / Environment

Control machine = MacOS
Target machine = Ubuntu 20

### Steps to Reproduce

Stated in the Summary

### Expected Results

Stated in the Summary

### Actual Results

```console
Stated in the Summary
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
for dirname in path.strip('/').split('/'):
                curpath = '/'.join([curpath, dirname])
                
                if not os.path.isabs(path):
                    curpath = curpath.lstrip('/')
                b_curpath = to_bytes(curpath, errors='surrogate_or_strict')
                if not os.path.exists(b_curpath):
                    try:
                        os.mkdir(b_curpath)
                        changed = True
                    except OSError as ex:
                        
                        
                        if not (ex.errno == errno.EEXIST and os.path.isdir(b_curpath)):
                            raise
                    tmp_file_args = file_args.copy()
                    tmp_file_args['path'] = curpath
                    changed = module.set_fs_attributes_if_different(tmp_file_args, changed, diff, expand=False)
                    changed |= update_timestamp_for_file(file_args['path'], mtime, atime, diff)
        except Exception as e:
            raise AnsibleModuleError(results={'msg': 'There was an issue creating %s as requested:'
                                                     ' %s' % (curpath, to_native(e)),
                                              'path': path})
        return {'path': path, 'changed': changed, 'diff': diff}
    elif prev_state != 'directory':