-------- Original Message --------
Subject: Re: libblkid: Idea to force given cached entry to be invalidated?
From: Karel Zak <kzak@xxxxxxxxxx>
To: Qu Wenruo <quwenruo@xxxxxxxxxxxxxx>
Date: 2014年04月16日 17:03
On Wed, Apr 16, 2014 at 08:53:27AM +0800, Qu Wenruo wrote:
So the problem is not that btrfs is fast enough ;-)
According to your explaination, it seems that if there is any modification
to the block device, libblkid will rescan it and not
to use the old cache, do I understand it right?
Yes, blkid_verify():
if (now >= dev->bid_time &&
#ifdef HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC
(st.st_mtime < dev->bid_time ||
(st.st_mtime == dev->bid_time &&
st.st_mtim.tv_nsec / 1000 <= dev->bid_utime)) &&
#else
st.st_mtime <= dev->bid_time &&
#endif
(diff < BLKID_PROBE_MIN ||
(dev->bid_flags & BLKID_BID_FL_VERIFIED &&
diff < BLKID_PROBE_INTERVAL)))
return dev;
It checks two basic things:
a) compare device st_mtime with cache entry time (bid_time and bid_utime),
the valid cache entry has not to be older than device mtime.
b) valid cache entry has not to be older than BLKID_PROBE_MIN (2 sec)
and previous blkid_verify() validation remaining in memory has not
to be older than BLKID_PROBE_INTERVAL (200s).
BTW, it would be nice to have --verbose option for btrfs-scan, now it
seems like black box.
I'd like to add it, but as you know, 'btrfs dev scan' just calls a btrfs
ioctl, so even '--verbose' is added,
nothing useful will be printed out. :(
Well, I mean at least info about for what devices it calls the ioctls.
Karel
Thanks for all your explaination.
Now I think I am somewhat clear of the libblkid cache now.
But after some tests, it seems that the ctime/mtime based cache seems
not perfect due to the fact that multiple
device file can be created in different fs with same major/minor number.
especially each of them has individual ctime/mtime timestamp.
So if someone (maybe insane) use mknod to create as block device file
and use 'btrfs dev del' on the newly created
block device file, libblkid will still be unable to detect the change
since the ctime/mtime of block device file in /dev/
does not change.
Will libblkid be able to deal with it in later versions? (Although not
related to my original problem now)
Thanks,
Qu
--
To unsubscribe from this list: send the line "unsubscribe util-linux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html