Il 03/07/2012 04:49, Vivek Goyal ha scritto: >> > + /* Zero-sector (unknown) and one-sector granularities are the same. */ >> > + granularity = max(q->limits.discard_granularity >> 9, 1U); >> > + >> > /* >> > * Ensure that max_discard_sectors is of the proper >> > * granularity >> > */ >> > max_discard_sectors = min(q->limits.max_discard_sectors, UINT_MAX >> 9); >> > + max_discard_sectors = round_down(max_discard_sectors, granularity); >> > if (unlikely(!max_discard_sectors)) { >> > /* Avoid infinite loop below. Being cautious never hurts. */ >> > return -EOPNOTSUPP; >> > - } else if (q->limits.discard_granularity) { >> > - unsigned int disc_sects = q->limits.discard_granularity >> 9; >> > - >> > - max_discard_sectors &= ~(disc_sects - 1); > This is kind of odd. If discard_granularity is zero, we assume that > discards are supported and granularity is 1. But if max_discard_sectors > is zero, we assume discards are disabled. Not sure if we should treat > max_discard_sectors and discard_granularity in same way or not. Yes, this keeps the same behavior as before. It is also the one that is consistent with drivers/scsi/sd.c. sd_config_discard always sets limits.discard_granularity and then uses limits.max_discard_sectors to disable discards. Paolo -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel