+++ /dev/null
-dev_read_only_2.4.20-rh.patch
-exports_2.4.20-rh-hp.patch
-kmem_cache_validate_2.4.20-rh.patch
-lustre_version.patch
-vfs_intent_2.4.20_chaos.patch
-invalidate_show_2.4.20_chaos.patch
-iod-rmap-exports-2.4.20.patch
-export-truncate.patch
-ext-2.4-patch-1-chaos.patch
-ext-2.4-patch-2.patch
-ext-2.4-patch-3.patch
-ext-2.4-patch-4.patch
-linux-2.4.20-xattr-0.8.54-chaos.patch
-ext3-2.4.20-fixes.patch
-ext3_orphan_lock-2.4.20-rh.patch
-ext3_delete_thread_2.4.20_chaos.patch
-ext3-noread-2.4.20.patch
-extN-wantedi.patch
-ext3-san-2.4.20.patch
-ext3-map_inode_page.patch
-ext3-error-export.patch
-iopen-2.4.20.patch
-tcp_zero_copy_2.4.20_chaos.patch
-gpl_header-chaos-2.4.20.patch
-add_page_private.patch
-jbd-flushtime.patch
-jbd-get_write_access.patch
}
up(&exp->exp_obd->u.filter.fo_alloc_lock);
- filter_tally_write(&obd->u.filter, iobuf->maplist, iobuf->nr_pages,
+ filter_tally_write(&obd->u.filter, iobuf->maplist, iobuf->nr_pages,
iobuf->blocks, blocks_per_page);
if (attr->ia_size > inode->i_size)
check_pending_bhs(iobuf->blocks, iobuf->nr_pages, inode->i_dev,
1 << inode->i_blkbits);
+ rc = filemap_fdatasync(inode->i_mapping);
+ if (rc == 0)
+ rc = fsync_inode_data_buffers(inode);
+ if (rc == 0)
+ rc = filemap_fdatawait(inode->i_mapping);
+ if (rc < 0)
+ GOTO(cleanup, rc);
+
rc = brw_kiovec(WRITE, 1, &iobuf, inode->i_dev, iobuf->blocks,
1 << inode->i_blkbits);
CDEBUG(D_INFO, "tried to write %d pages, rc = %d\n",
atomic_t numreqs; /* number of reqs being processed */
struct bio *bio_list; /* list of completed bios */
wait_queue_head_t wait;
- int created[MAX_BLOCKS_PER_PAGE];
- unsigned long blocks[MAX_BLOCKS_PER_PAGE];
+ int created[MAX_BLOCKS_PER_PAGE];
+ unsigned long blocks[MAX_BLOCKS_PER_PAGE];
spinlock_t lock;
};
static int can_be_merged(struct bio *bio, sector_t sector)
{
- int size;
-
- if (!bio)
- return 0;
-
- size = bio->bi_size >> 9;
- return bio->bi_sector + size == sector ? 1 : 0;
+ int size;
+
+ if (!bio)
+ return 0;
+
+ size = bio->bi_size >> 9;
+ return bio->bi_sector + size == sector ? 1 : 0;
}
int filter_commitrw_write(struct obd_export *exp, struct obdo *oa, int objcount,
struct inode *inode = NULL;
int rc = 0, i, k, cleanup_phase = 0, err;
unsigned long now = jiffies; /* DEBUGGING OST TIMEOUTS */
- int blocks_per_page;
+ int blocks_per_page;
struct dio_request *dreq;
struct bio *bio = NULL;
ENTRY;
inode = res->dentry->d_inode;
blocks_per_page = PAGE_SIZE >> inode->i_blkbits;
- LASSERT(blocks_per_page <= MAX_BLOCKS_PER_PAGE);
+ LASSERT(blocks_per_page <= MAX_BLOCKS_PER_PAGE);
OBD_ALLOC(dreq, sizeof(*dreq));
if (dreq == NULL)
fso.fso_bufcnt = obj->ioo_bufcnt;
push_ctxt(&saved, &obd->obd_ctxt, NULL);
- cleanup_phase = 2;
+ cleanup_phase = 2;
oti->oti_handle = fsfilt_brw_start(obd, objcount, &fso, niocount, oti);
if (IS_ERR(oti->oti_handle)) {
for (i = 0, lnb = res; i < obj->ioo_bufcnt; i++, lnb++) {
loff_t this_size;
- sector_t sector;
- int offs;
+ sector_t sector;
+ int offs;
- /* get block number for next page */
+ /* get block number for next page */
rc = ext3_map_inode_page(inode, lnb->page, dreq->blocks,
dreq->created, 1);
if (rc)
GOTO(cleanup, rc);
- for (k = 0; k < blocks_per_page; k++) {
- sector = dreq->blocks[k] * (inode->i_sb->s_blocksize >> 9);
- offs = k * inode->i_sb->s_blocksize;
+ for (k = 0; k < blocks_per_page; k++) {
+ sector = dreq->blocks[k] *(inode->i_sb->s_blocksize>>9);
+ offs = k * inode->i_sb->s_blocksize;
- if (!bio || !can_be_merged(bio, sector) ||
- !bio_add_page(bio, lnb->page, lnb->len, offs)) {
- if (bio) {
+ if (!bio || !can_be_merged(bio, sector) ||
+ !bio_add_page(bio, lnb->page, lnb->len, offs)) {
+ if (bio) {
atomic_inc(&dreq->numreqs);
- submit_bio(WRITE, bio);
- bio = NULL;
- }
- /* allocate new bio */
- bio = bio_alloc(GFP_NOIO, obj->ioo_bufcnt);
- bio->bi_bdev = inode->i_sb->s_bdev;
- bio->bi_sector = sector;
- bio->bi_end_io = dio_complete_routine;
+ submit_bio(WRITE, bio);
+ bio = NULL;
+ }
+ /* allocate new bio */
+ bio = bio_alloc(GFP_NOIO, obj->ioo_bufcnt);
+ bio->bi_bdev = inode->i_sb->s_bdev;
+ bio->bi_sector = sector;
+ bio->bi_end_io = dio_complete_routine;
bio->bi_private = dreq;
- if (!bio_add_page(bio, lnb->page, lnb->len, 0))
- LBUG();
- }
- }
+ if (!bio_add_page(bio, lnb->page, lnb->len, 0))
+ LBUG();
+ }
+ }
/* We expect these pages to be in offset order, but we'll
* be forgiving */
if (this_size > iattr.ia_size)
iattr.ia_size = this_size;
}
- if (bio) {
+
+#warning This probably needs filemap_fdatasync() like filter_io_24 (bug 2366)
+ if (bio) {
atomic_inc(&dreq->numreqs);
submit_bio(WRITE, bio);
}
- /* time to wait for I/O completion */
+ /* time to wait for I/O completion */
wait_event(dreq->wait, atomic_read(&dreq->numreqs) == 0);
/* free all bios */