On Fri, Apr 07, 2017 at 07:59:08PM +0000, Bart Van Assche wrote: > On Wed, 2017-04-05 at 07:41 -0400, Martin K. Petersen wrote: > > +static ssize_t > > +zeroing_mode_store(struct device *dev, struct device_attribute *attr, > > + const char *buf, size_t count) > > +{ > > + struct scsi_disk *sdkp = to_scsi_disk(dev); > > + > > + if (!capable(CAP_SYS_ADMIN)) > > + return -EACCES; > > + > > + if (!strncmp(buf, zeroing_mode[SD_ZERO_WRITE], 20)) > > + sdkp->zeroing_mode = SD_ZERO_WRITE; > > + else if (!strncmp(buf, zeroing_mode[SD_ZERO_WS], 20)) > > + sdkp->zeroing_mode = SD_ZERO_WS; > > + else if (!strncmp(buf, zeroing_mode[SD_ZERO_WS16_UNMAP], 20)) > > + sdkp->zeroing_mode = SD_ZERO_WS16_UNMAP; > > + else if (!strncmp(buf, zeroing_mode[SD_ZERO_WS10_UNMAP], 20)) > > + sdkp->zeroing_mode = SD_ZERO_WS10_UNMAP; > > + else > > + return -EINVAL; > > + > > + return count; > > +} > > An additional question about this function: if the shell command "echo" is used > without command-line option -n to modify the "zeroing_mode" sysfs attribute then > a newline character will be present in buf. Does the above code handle newline > characters correctly? It ignores the newlines. But we have a helper called sysfs_streq to possible ignore it. It might be a good idea to move the various sysfs files in scsi to use it.