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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]