+ switch (attr->propagation) {
+ case 0:
+ kattr->propagation = 0;
+ break;
+ case MS_UNBINDABLE:
+ kattr->propagation = MS_UNBINDABLE;
+ break;
+ case MS_PRIVATE:
+ kattr->propagation = MS_PRIVATE;
+ break;
+ case MS_SLAVE:
+ kattr->propagation = MS_SLAVE;
+ break;
+ case MS_SHARED:
+ kattr->propagation = MS_SHARED;
+ break;
+ default:
+ return -EINVAL;
+ }
This can be shortened to:
#define MOUNT_SETATTR_PROPAGATION_FLAGS \
(MS_UNBINDABLE | MS_PRIVATE | MS_SLAVE | MS_SHARED)
if (attr->propagation & ~MOUNT_SETATTR_PROPAGATION_FLAGS)
return -EINVAL;
if (hweight32(attr->propagation & MOUNT_SETATTR_PROPAGATION_FLAGS) > 1)
return -EINVAL;
kattr->propagation = attr->propagation;
+asmlinkage long sys_mount_setattr(int dfd, const char __user *path, unsigned int flags,
Overly long line.
Otherwise looks good:
Reviewed-by: Christoph Hellwig <hch@lst.de>