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/

Reply via email to