
##### SUMMARY
NVMe devices can have their serial number read by reading (eg) /sys/block/nvme1n1/device/serial, without having to try and run sg_inq, which requires root.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
Facts collection, linux.py

##### ANSIBLE VERSION
```paste below
$ ansible --version
ansible 2.10.0.dev0
  config file = None
  configured module search path = ['/local/apps/egsadmin/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /local/apps/egsadmin/randy/ansible-src-current/lib/ansible
  executable location = /local/apps/egsadmin/randy/ansible-src-current/bin/ansible
  python version = 3.6.8 (default, Jun 11 2019, 15:15:01) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]

```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below
$ ansible-config dump --only-changed
<nothing>
```

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
AWS NVMe-based systems

##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->
Run setup task with and without "become" on a system or VM with NVMe and observe that "serial" only appears with "become"

<!--- HINT: You can paste gist.github.com links for larger files -->

##### EXPECTED RESULTS
<!--- Describe what you expected to happen when running the steps above -->
ansible_devices[*].serial is populated for NVMe, regardless of become

##### ACTUAL RESULTS
<!--- Describe what actually happened. If possible run with extra verbosity (-vvvv) -->
ansible_devices[*].serial is populated for NVMe, regardless of become

try:
            retval = collections.defaultdict(set)
            for path in glob.glob('/sys/block/*/slaves/*'):
                elements = path.split('/')
                device = elements[3]
                target = elements[5]
                retval[target].add(device)
            return dict((k, list(sorted(v))) for (k, v) in iteritems(retval))
        except OSError:
            return {}
    def get_all_device_links(self):
        return {
            'ids': self.get_device_links('/dev/disk/by-id'),
            'uuids': self.get_device_links('/dev/disk/by-uuid'),
            'labels': self.get_device_links('/dev/disk/by-label'),
            'masters': self.get_all_device_owners(),
        }
    def get_holders(self, block_dev_dict, sysdir):
        block_dev_dict['holders'] = []
        if os.path.isdir(sysdir + "/holders"):
            for folder in os.listdir(sysdir + "/holders"):
                if not folder.startswith("dm-"):
                    continue
                name = get_file_content(sysdir + "/holders/" + folder + "/dm/name")
                if name:
                    block_dev_dict['holders'].append(name)
                else:
                    block_dev_dict['holders'].append(folder)
    def get_device_facts(self):