Re: [PATCH 1/3] VFS: apply coding standards to fs/ioctl.c

From: Christoph Hellwig
Date: Sun Oct 28 2007 - 10:12:52 EST


Nice, I always hated these double-indented switch statements.

> + case FIBMAP:
> + {
> + struct address_space *mapping = filp->f_mapping;
> + int res;
> + /* do we support this mess? */
> + if (!mapping->a_ops->bmap)
> + return -EINVAL;
> + if (!capable(CAP_SYS_RAWIO))
> + return -EPERM;
> + error = get_user(block, p);
> + if (error)
> + return error;
> + lock_kernel();
> + res = mapping->a_ops->bmap(mapping, block);
> + unlock_kernel();
> + return put_user(res, p);

While you're at it, it's probably worth splitting this out into
a small helper function.

> + case FIONBIO:
> + error = get_user(on, (int __user *)arg);
> + if (error)
> + break;
> + flag = O_NONBLOCK;
> #ifdef __sparc__
> + /* SunOS compatibility item. */
> + if (O_NONBLOCK != O_NDELAY)
> + flag |= O_NDELAY;
> #endif
> + if (on)
> + filp->f_flags |= flag;
> + else
> + filp->f_flags &= ~flag;
> + break;

Same here.

> + case FIOASYNC:
> + error = get_user(on, (int __user *)arg);
> + if (error)
> break;
> + flag = on ? FASYNC : 0;
> +
> + /* Did FASYNC state change ? */
> + if ((flag ^ filp->f_flags) & FASYNC) {
> + if (filp->f_op && filp->f_op->fasync) {
> + lock_kernel();
> + error = filp->f_op->fasync(fd, filp, on);
> + unlock_kernel();
> + } else
> error = -ENOTTY;
> + }
> + if (error != 0)
> break;
> +
> + if (on)
> + filp->f_flags |= FASYNC;
> + else
> + filp->f_flags &= ~FASYNC;
> + break;

And here.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/