From: adilger Date: Mon, 22 Apr 2002 18:11:30 +0000 (+0000) Subject: Fix MDS dir truncation bug. X-Git-Tag: 0.4.2~360 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=e275bcefc461f7250866367398b8daa607609376;p=fs%2Flustre-release.git Fix MDS dir truncation bug. --- diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c index 5413342..189b1f1 100644 --- a/lustre/llite/dir.c +++ b/lustre/llite/dir.c @@ -1,4 +1,5 @@ -/* +/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- + * vim:expandtab:shiftwidth=8:tabstop=8: * * Copyright (C) 1992, 1993, 1994, 1995 * Remy Card (card@masi.ibp.fr) @@ -64,8 +65,7 @@ static int ll_dir_readpage(struct file *file, struct page *page) ENTRY; - if ( ((inode->i_size + PAGE_CACHE_SIZE -1)>>PAGE_SHIFT) - <= page->index) { + if ((inode->i_size + PAGE_CACHE_SIZE - 1) >> PAGE_SHIFT <= page->index){ memset(kmap(page), 0, PAGE_CACHE_SIZE); kunmap(page); EXIT; @@ -139,10 +139,12 @@ extern void set_page_clean(struct page *page); static int ext2_commit_chunk(struct page *page, unsigned from, unsigned to) { struct inode *dir = page->mapping->host; + loff_t new_size = (page->index << PAGE_CACHE_SHIFT) + to; int err = 0; dir->i_version = ++event; - dir->i_size = (page->index << PAGE_CACHE_SHIFT) + to; + if (new_size > dir->i_size) + dir->i_size = new_size; SetPageUptodate(page); set_page_clean(page); @@ -348,7 +350,7 @@ new_ll_readdir (struct file * filp, void * dirent, filldir_t filldir) int need_revalidate = (filp->f_version != inode->i_version); if (pos > inode->i_size - EXT2_DIR_REC_LEN(1)) - goto done; + GOTO(done, 0); types = ext2_filetype_table; @@ -380,7 +382,7 @@ new_ll_readdir (struct file * filp, void * dirent, filldir_t filldir) le32_to_cpu(de->inode), d_type); if (over) { ext2_put_page(page); - goto done; + GOTO(done,0); } } ext2_put_page(page);