Message ID | 147200548998.15538.11330546457799095768.stgit@birch.djwong.org (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
On Tue, Aug 23, 2016 at 07:24:50PM -0700, Darrick J. Wong wrote: > It turns out that glibc's hasmntopt implementation returns NULL > if the opt parameter ends with an equals ('='). Therefore, we > cannot directly search for the option 'rtdev='; we must instead > have hasmntopt look for 'rtdev' and look for the trailing equals > sign ourselves. This fixes xfs_info's reporting of external > log and realtime device paths, and xfs_scrub will need it for > data block scrubbing of realtime extents. Looks good, Reviewed-by: Christoph Hellwig <hch@lst.de>
diff --git a/libxcmd/paths.c b/libxcmd/paths.c index 71af25f..b08985f 100644 --- a/libxcmd/paths.c +++ b/libxcmd/paths.c @@ -234,10 +234,17 @@ fs_extract_mount_options( { char *fslog, *fsrt; - /* Extract log device and realtime device from mount options */ - if ((fslog = hasmntopt(mnt, "logdev="))) + /* + * Extract log device and realtime device from mount options. + * + * Note: the glibc hasmntopt implementation requires that the + * character in mnt_opts immediately after the search string + * must be a NULL ('\0'), a comma (','), or an equals ('='). + * Therefore we cannot search for 'logdev=' directly. + */ + if ((fslog = hasmntopt(mnt, "logdev")) && fslog[6] == '=') fslog += 7; - if ((fsrt = hasmntopt(mnt, "rtdev="))) + if ((fsrt = hasmntopt(mnt, "rtdev")) && fsrt[5] == '=') fsrt += 6; /* Do this only after we've finished processing mount options */
It turns out that glibc's hasmntopt implementation returns NULL if the opt parameter ends with an equals ('='). Therefore, we cannot directly search for the option 'rtdev='; we must instead have hasmntopt look for 'rtdev' and look for the trailing equals sign ourselves. This fixes xfs_info's reporting of external log and realtime device paths, and xfs_scrub will need it for data block scrubbing of realtime extents. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> --- libxcmd/paths.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)