On Tue, Mar 26, 2019 at 09:40:08PM +0800, Qu Wenruo wrote: > > > On 2019/3/26 下午8:17, Nikolay Borisov wrote: > > > > > > On 26.03.19 г. 12:49 ч., fdman...@kernel.org wrote: > >> From: Filipe Manana <fdman...@suse.com> > >> > >> Whan a filesystem is mounted with the nologreplay mount option, which > >> requires it to be mounted in RO mode as well, we can not allow discard on > >> free space inside block groups, because log trees refer to extents that > >> are not pinned in a block group's free space cache (pinning the extents is > >> precisely the first phase of replaying a log tree). > >> > >> So do not allow the fitrim ioctl to do anything when the filesystem is > >> mounted with the nologreplay option, because later it can be mounted RW > >> without that option, which causes log replay to happen and result in > >> either a failure to replay the log trees (leading to a mount failure), a > >> crash or some silent corruption. > >> > >> Reported-by: Darrick J. Wong <darrick.w...@oracle.com> > >> Signed-off-by: Filipe Manana <fdman...@suse.com> > > > > Does it make sense to make the check a bit more specific and only return > > EROFS when NOLOGREPLAY and the log tree has non-null generation? > > To me fstrim is a WRITE operation, why it is allowed even in RO mount?
It's write to the block device, not to the filesystem.