*参照元 [#a7288b0b] #backlinks *説明 [#q6b6389a] -パス: [[linux-2.6.33/fs/read_write.c]] -FIXME: これは何? --説明 **引数 [#ff3bd40b] -struct file *filp -- --[[linux-2.6.33/file]] -const char __user *buf -- -size_t len -- -loff_t *ppos -- **返り値 [#md83fee2] - -ssize_t -- **参考 [#z587c6e4] 関数内でファイルシステムの aio_write を呼び出す。 -標準の非同期 write 関数を使用するファイルシステム .aio_write = generic_file_aio_write, fs/adfs/file.c: .aio_write = generic_file_aio_write, fs/affs/file.c: .aio_write = generic_file_aio_write, fs/bfs/file.c: .aio_write = generic_file_aio_write, fs/ecryptfs/file.c: .aio_write = generic_file_aio_write, fs/exofs/file.c: .aio_write = generic_file_aio_write, fs/ext2/file.c: .aio_write = generic_file_aio_write, fs/ext3/file.c: .aio_write = generic_file_aio_write, fs/fat/file.c: .aio_write = generic_file_aio_write, fs/hfs/inode.c: .aio_write = generic_file_aio_write, fs/hfsplus/inode.c: .aio_write = generic_file_aio_write, fs/hostfs/hostfs_kern.c: .aio_write = generic_file_aio_write, fs/hpfs/file.c: .aio_write = generic_file_aio_write, fs/jffs2/file.c: .aio_write = generic_file_aio_write, fs/jfs/file.c: .aio_write = generic_file_aio_write, fs/minix/file.c: .aio_write = generic_file_aio_write, fs/nilfs2/file.c: .aio_write = generic_file_aio_write, fs/omfs/file.c: .aio_write = generic_file_aio_write, fs/ramfs/file-mmu.c: .aio_write = generic_file_aio_write, fs/ramfs/file-nommu.c: .aio_write = generic_file_aio_write, fs/reiserfs/file.c: .aio_write = generic_file_aio_write, fs/sysv/file.c: .aio_write = generic_file_aio_write, fs/ufs/file.c: -独自の非同期 write 関数を使用するファイルシステム .aio_write = afs_file_write, fs/afs/file.c: .aio_write = bad_file_aio_write, fs/bad_inode.c: .aio_write = blkdev_aio_write, fs/block_dev.c: .aio_write = cifs_file_aio_write, fs/cifs/cifsfs.c: .aio_write = ext4_file_write, fs/ext4/file.c: .aio_write = fuse_dev_write, fs/fuse/dev.c: .aio_write = fuse_file_aio_write, fs/fuse/file.c: .aio_write = gfs2_file_aio_write, fs/gfs2/file.c: .aio_write = nfs_file_write, fs/nfs/file.c: .aio_write = ntfs_file_aio_write, fs/ntfs/file.c: .aio_write = ocfs2_file_aio_write, fs/ocfs2/file.c: .aio_write = pipe_write, fs/pipe.c: .aio_write = smb_file_aio_write, fs/smbfs/file.c: .aio_write = ubifs_aio_write, fs/ubifs/file.c: .aio_write = udf_file_aio_write, fs/udf/file.c: .aio_write = xfs_file_aio_write, fs/xfs/linux-2.6/xfs_file.c: *実装 [#v49bb27c] ssize_t do_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos) { struct iovec iov = { .iov_base = (void __user *)buf, .iov_len = len }; struct kiocb kiocb; ssize_t ret; - --[[linux-2.6.33/iovec]] - --[[linux-2.6.33/kiocb]] init_sync_kiocb(&kiocb, filp); kiocb.ki_pos = *ppos; kiocb.ki_left = len; - --[[linux-2.6.33/init_sync_kiocb()]] for (;;) { ret = filp->f_op->aio_write(&kiocb, &iov, 1, kiocb.ki_pos); if (ret != -EIOCBRETRY) break; wait_on_retry_sync_kiocb(&kiocb); -filp->f_op は struct file_operations 型 --[[linux-2.6.33/file_operations]] - --[[linux-2.6.33/wait_on_retry_sync_kiocb()]] } if (-EIOCBQUEUED == ret) ret = wait_on_sync_kiocb(&kiocb); *ppos = kiocb.ki_pos; - --[[linux-2.6.33/wait_on_sync_kiocb()]] return ret; } EXPORT_SYMBOL(do_sync_write); -ライセンスに関係なくシンボルを公開する。 --[[linux-2.6.33/EXPORT_SYMBOL()]] *コメント [#r39d8e85]