/* Write a block of bytes into one EMD file. The block of data is NOT in user space. Return 0 if ok, a negative error code if not. */ int umsdos_emd_dir_write ( struct inode *emd_dir, struct file *filp, char *buf, /* buffer in kernel memory, not in user space */ int count) { int written; filp->f_flags = 0; written = umsdos_file_write_kmem (emd_dir,filp,buf,count); return written != count ? -EIO : 0; }
ssize_t umsdos_emd_dir_write ( struct file *filp, char *buf, size_t count) { int written; #ifdef __BIG_ENDIAN struct umsdos_dirent *d = (struct umsdos_dirent *) buf; d->nlink = cpu_to_le16 (d->nlink); d->uid = cpu_to_le16 (d->uid); d->gid = cpu_to_le16 (d->gid); d->atime = cpu_to_le32 (d->atime); d->mtime = cpu_to_le32 (d->mtime); d->ctime = cpu_to_le32 (d->ctime); d->rdev = cpu_to_le16 (d->rdev); d->mode = cpu_to_le16 (d->mode); #endif filp->f_flags = 0; Printk (("umsdos_emd_dir_write /mn/: calling write_kmem with %p, %p, %d, %Ld\n", filp, buf, count, filp->f_pos)); written = umsdos_file_write_kmem (filp, buf, count); #ifdef __BIG_ENDIAN d->nlink = le16_to_cpu (d->nlink); d->uid = le16_to_cpu (d->uid); d->gid = le16_to_cpu (d->gid); d->atime = le32_to_cpu (d->atime); d->mtime = le32_to_cpu (d->mtime); d->ctime = le32_to_cpu (d->ctime); d->rdev = le16_to_cpu (d->rdev); d->mode = le16_to_cpu (d->mode); #endif #ifdef UMSDOS_PARANOIA if (written != count) printk(KERN_ERR "umsdos_emd_dir_write: ERROR: written (%d) != count (%d)\n", written, count); #endif return (written != count) ? -EIO : 0; }