btrfs-progs: property set: skip opening char devices completely
Previous fix for char devices and properties opens the path in non blocking mode but this still triggers the watchdog, as reported. Add a workaround to properties to completely skip opening the path and just stat() it. Issue: #699 Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
f5ad6b0444
commit
4d7ea19ca0
|
@ -286,6 +286,19 @@ static int check_btrfs_object(const char *object)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
u8 fsid[BTRFS_FSID_SIZE];
|
u8 fsid[BTRFS_FSID_SIZE];
|
||||||
|
struct stat st;
|
||||||
|
|
||||||
|
ret = stat(object, &st);
|
||||||
|
if (ret < 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Don't try to read fsid on char devices, this will fail anyway. In
|
||||||
|
* some cases opening the device can trigger some system events (like a
|
||||||
|
* watchdog) so do only stat.
|
||||||
|
*/
|
||||||
|
if ((st.st_mode & S_IFMT) == S_IFCHR || (st.st_mode & S_IFMT) == S_IFIFO)
|
||||||
|
return 0;
|
||||||
|
|
||||||
ret = get_fsid(object, fsid, 0);
|
ret = get_fsid(object, fsid, 0);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
Loading…
Reference in New Issue