linux-2.6.33/__generic_file_aio_write()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#ma0f0012]
#backlinks
*説明 [#j6deac7d]
-パス: [[linux-2.6.33/mm/filemap.c]]
-FIXME: これは何?
--説明
**引数 [#l5ea757d]
-struct kiocb *iocb
--
--[[linux-2.6.33/kiocb]]
-const struct iovec *iov
--
--[[linux-2.6.33/iovec]]
-unsigned long nr_segs
--
-loff_t *ppos
--
**返り値 [#l060fdd7]
-ssize_t
--
**参考 [#la70e4ed]
*実装 [#nbae314b]
/**
* __generic_file_aio_write - write data to a file
* @iocb: IO state structure (file, offset, etc.)
* @iov: vector with data to write
* @nr_segs: number of segments in the vector
* @ppos: position where to write
*
* This function does all the work needed for actually w...
* file. It does all basic checks, removes SUID from the...
* modification times and calls proper subroutines depen...
* do direct IO or a standard buffered write.
*
* It expects i_mutex to be grabbed unless we work on a ...
* object which does not need locking at all.
*
* This function does *not* take care of syncing data in...
* A caller has to handle it. This is mainly due to the ...
* avoid syncing under i_mutex.
*/
ssize_t __generic_file_aio_write(struct kiocb *iocb, con...
unsigned long nr_segs, loff_t *ppos)
{
struct file *file = iocb->ki_filp;
struct address_space * mapping = file->f_mapping;
size_t ocount; /* original count */
size_t count; /* after file limit checks */
struct inode *inode = mapping->host;
loff_t pos;
ssize_t written;
ssize_t err;
-
--[[linux-2.6.33/file]]
-
--[[linux-2.6.33/address_space]]
-
--[[linux-2.6.33/inode]]
ocount = 0;
err = generic_segment_checks(iov, &nr_segs, &ocount, VE...
if (err)
return err;
-
--[[linux-2.6.33/generic_segment_checks()]]
count = ocount;
pos = *ppos;
vfs_check_frozen(inode->i_sb, SB_FREEZE_WRITE);
-
--[[linux-2.6.33/vfs_check_frozen()]]
/* We can write back this queue in page reclaim */
current->backing_dev_info = mapping->backing_dev_info;
written = 0;
err = generic_write_checks(file, &pos, &count, S_ISBLK(...
if (err)
goto out;
-
--[[linux-2.6.33/generic_write_checks()]]
-
--[[linux-2.6.33/S_ISBLK()]]
if (count == 0)
goto out;
err = file_remove_suid(file);
if (err)
goto out;
-
--[[linux-2.6.33/file_remove_suid()]]
file_update_time(file);
-
--[[linux-2.6.33/file_update_time()]]
/* coalesce the iovecs and go direct-to-BIO for O_DIREC...
if (unlikely(file->f_flags & O_DIRECT)) {
-
--[[linux-2.6.33/unlikely()]]
loff_t endbyte;
ssize_t written_buffered;
written = generic_file_direct_write(iocb, iov, &nr_seg...
ppos, count, ocount);
if (written < 0 || written == count)
goto out;
-
--[[linux-2.6.33/generic_file_direct_write()]]
/*
* direct-io write to a hole: fall through to buffered...
* for completing the rest of the request.
*/
pos += written;
count -= written;
written_buffered = generic_file_buffered_write(iocb, i...
nr_segs, pos, ppos, count,
written);
-
--[[linux-2.6.33/generic_file_buffered_write()]]
/*
* If generic_file_buffered_write() retuned a synchron...
* then we want to return the number of bytes which were
* direct-written, or the error code if that was zero....
* that this differs from normal direct-io semantics, ...
* will return -EFOO even if some bytes were written.
*/
if (written_buffered < 0) {
err = written_buffered;
goto out;
}
/*
* We need to ensure that the page cache pages are wri...
* disk and invalidated to preserve the expected O_DIR...
* semantics.
*/
endbyte = pos + written_buffered - written - 1;
err = filemap_write_and_wait_range(file->f_mapping, po...
-
--[[linux-2.6.33/filemap_write_and_wait_range()]]
if (err == 0) {
written = written_buffered;
invalidate_mapping_pages(mapping,
pos >> PAGE_CACHE_SHIFT,
endbyte >> PAGE_CACHE_SHIFT);
-
--[[linux-2.6.33/invalidate_mapping_pages()]]
-
--[[linux-2.6.33/PAGE_CACHE_SHIFT]]
} else {
/*
* We don't know how much we wrote, so just return
* the number of bytes which were direct-written
*/
}
} else {
written = generic_file_buffered_write(iocb, iov, nr_se...
pos, ppos, count, written);
}
out:
current->backing_dev_info = NULL;
return written ? written : err;
}
EXPORT_SYMBOL(__generic_file_aio_write);
-ライセンスに関わらずシンボルを公開する。
--[[linux-2.6.33/EXPORT_SYMBOL()]]
*コメント [#b5813b22]
終了行:
*参照元 [#ma0f0012]
#backlinks
*説明 [#j6deac7d]
-パス: [[linux-2.6.33/mm/filemap.c]]
-FIXME: これは何?
--説明
**引数 [#l5ea757d]
-struct kiocb *iocb
--
--[[linux-2.6.33/kiocb]]
-const struct iovec *iov
--
--[[linux-2.6.33/iovec]]
-unsigned long nr_segs
--
-loff_t *ppos
--
**返り値 [#l060fdd7]
-ssize_t
--
**参考 [#la70e4ed]
*実装 [#nbae314b]
/**
* __generic_file_aio_write - write data to a file
* @iocb: IO state structure (file, offset, etc.)
* @iov: vector with data to write
* @nr_segs: number of segments in the vector
* @ppos: position where to write
*
* This function does all the work needed for actually w...
* file. It does all basic checks, removes SUID from the...
* modification times and calls proper subroutines depen...
* do direct IO or a standard buffered write.
*
* It expects i_mutex to be grabbed unless we work on a ...
* object which does not need locking at all.
*
* This function does *not* take care of syncing data in...
* A caller has to handle it. This is mainly due to the ...
* avoid syncing under i_mutex.
*/
ssize_t __generic_file_aio_write(struct kiocb *iocb, con...
unsigned long nr_segs, loff_t *ppos)
{
struct file *file = iocb->ki_filp;
struct address_space * mapping = file->f_mapping;
size_t ocount; /* original count */
size_t count; /* after file limit checks */
struct inode *inode = mapping->host;
loff_t pos;
ssize_t written;
ssize_t err;
-
--[[linux-2.6.33/file]]
-
--[[linux-2.6.33/address_space]]
-
--[[linux-2.6.33/inode]]
ocount = 0;
err = generic_segment_checks(iov, &nr_segs, &ocount, VE...
if (err)
return err;
-
--[[linux-2.6.33/generic_segment_checks()]]
count = ocount;
pos = *ppos;
vfs_check_frozen(inode->i_sb, SB_FREEZE_WRITE);
-
--[[linux-2.6.33/vfs_check_frozen()]]
/* We can write back this queue in page reclaim */
current->backing_dev_info = mapping->backing_dev_info;
written = 0;
err = generic_write_checks(file, &pos, &count, S_ISBLK(...
if (err)
goto out;
-
--[[linux-2.6.33/generic_write_checks()]]
-
--[[linux-2.6.33/S_ISBLK()]]
if (count == 0)
goto out;
err = file_remove_suid(file);
if (err)
goto out;
-
--[[linux-2.6.33/file_remove_suid()]]
file_update_time(file);
-
--[[linux-2.6.33/file_update_time()]]
/* coalesce the iovecs and go direct-to-BIO for O_DIREC...
if (unlikely(file->f_flags & O_DIRECT)) {
-
--[[linux-2.6.33/unlikely()]]
loff_t endbyte;
ssize_t written_buffered;
written = generic_file_direct_write(iocb, iov, &nr_seg...
ppos, count, ocount);
if (written < 0 || written == count)
goto out;
-
--[[linux-2.6.33/generic_file_direct_write()]]
/*
* direct-io write to a hole: fall through to buffered...
* for completing the rest of the request.
*/
pos += written;
count -= written;
written_buffered = generic_file_buffered_write(iocb, i...
nr_segs, pos, ppos, count,
written);
-
--[[linux-2.6.33/generic_file_buffered_write()]]
/*
* If generic_file_buffered_write() retuned a synchron...
* then we want to return the number of bytes which were
* direct-written, or the error code if that was zero....
* that this differs from normal direct-io semantics, ...
* will return -EFOO even if some bytes were written.
*/
if (written_buffered < 0) {
err = written_buffered;
goto out;
}
/*
* We need to ensure that the page cache pages are wri...
* disk and invalidated to preserve the expected O_DIR...
* semantics.
*/
endbyte = pos + written_buffered - written - 1;
err = filemap_write_and_wait_range(file->f_mapping, po...
-
--[[linux-2.6.33/filemap_write_and_wait_range()]]
if (err == 0) {
written = written_buffered;
invalidate_mapping_pages(mapping,
pos >> PAGE_CACHE_SHIFT,
endbyte >> PAGE_CACHE_SHIFT);
-
--[[linux-2.6.33/invalidate_mapping_pages()]]
-
--[[linux-2.6.33/PAGE_CACHE_SHIFT]]
} else {
/*
* We don't know how much we wrote, so just return
* the number of bytes which were direct-written
*/
}
} else {
written = generic_file_buffered_write(iocb, iov, nr_se...
pos, ppos, count, written);
}
out:
current->backing_dev_info = NULL;
return written ? written : err;
}
EXPORT_SYMBOL(__generic_file_aio_write);
-ライセンスに関わらずシンボルを公開する。
--[[linux-2.6.33/EXPORT_SYMBOL()]]
*コメント [#b5813b22]
ページ名: