722 return retval;
723}
724inline int scull_write(int tid, int filp, int buf, int count,
725 int f_pos)
726{
727 int dev = filp;
728 int dptr;
729 int quantum = dev_quantum, qset = dev_qset;
730 int itemsize = quantum * qset;
731 int item, s_pos, q_pos, rest;
732 int retval = -4;
733 if (down_interruptible())
734 return -512;
735 item = f_pos / itemsize;
736 rest = f_pos;
737 s_pos = rest / quantum; q_pos = rest;
738 dptr = scull_follow(dev, item);
739 if (dptr == 0)
740 goto out;
741 if (count > quantum - q_pos)
742 count = quantum - q_pos;
743 __X__ = 1;
744 if (copy_from_user(dev_data+s_pos+q_pos, buf, count)) {
745 retval = -2;
746 goto out;
747 }
748 f_pos += count;
749 retval = count;
750 if (dev_size < f_pos)
751 dev_size = f_pos;
752 if (!(__X__ == 1)) ERROR: goto ERROR;;
753 out:
754 up();
755 return retval;
756}
757inline int scull_ioctl(int i, int filp,
758 int cmd, int arg)
759{
760 int err = 0, tmp;
761 int retval = 0;
762 switch(cmd) {