From: gord-fig Date: Thu, 25 Oct 2001 16:50:17 +0000 (+0000) Subject: Back out size/blocks changes. X-Git-Tag: v1_7_100~6045 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;ds=sidebyside;h=e8e53303782215914c3e051ca18a1b61edc84472;p=fs%2Flustre-release.git Back out size/blocks changes. --- diff --git a/lustre/obdfs/namei.c b/lustre/obdfs/namei.c index d2f54e30..55a58ba 100644 --- a/lustre/obdfs/namei.c +++ b/lustre/obdfs/namei.c @@ -85,8 +85,7 @@ static struct dentry *obdfs_lookup(struct inode * dir, struct dentry *dentry) struct obdo *oa; struct inode * inode = NULL; ino_t ino; - int err; - + ENTRY; if (dentry->d_name.len > EXT2_NAME_LEN) return ERR_PTR(-ENAMETOOLONG); @@ -103,24 +102,10 @@ static struct dentry *obdfs_lookup(struct inode * dir, struct dentry *dentry) } inode = iget4(dir->i_sb, ino, NULL, oa); + obdo_free(oa); - if (!inode) { - obdo_free(oa); + if (!inode) return ERR_PTR(-EACCES); - } - - err = IOPS(inode, getattr)(IID(inode), oa); - if (err) { - printk(__FUNCTION__ ": obd_getattr fails (%d)\n", err); - } else { -#ifdef CHECK_SIZE - if (inode->i_size != oa->o_size) - CDEBUG(D_SUPER, "update %Ld size to %Ld\n", - inode->i_size, oa->o_size); -#endif - obdfs_set_size (inode, oa->o_size); - } - obdo_free(oa); negative: d_add(dentry, inode); diff --git a/lustre/obdfs/rw.c b/lustre/obdfs/rw.c index d94c965..09c6362 100644 --- a/lustre/obdfs/rw.c +++ b/lustre/obdfs/rw.c @@ -67,9 +67,7 @@ static int obdfs_brw(int rw, struct inode *inode, struct page *page, int create) err = IOPS(inode, brw)(rw, IID(inode), num_obdo, &oa, &bufs_per_obdo, &page, &count, &offset, &flags); if ( !err ) - obdfs_set_size (inode, oa->o_size); /* copy o_blocks to i_blocks */ - - + obdfs_to_inode(inode, oa); /* copy o_blocks to i_blocks */ obdo_free(oa); EXIT; @@ -280,7 +278,7 @@ int obdfs_do_vec_wr(struct inode **inodes, obd_count num_io, --num_obdos; CDEBUG(D_INFO, "free obdo %ld\n",(long)obdos[num_obdos]->o_id); /* copy o_blocks to i_blocks */ - obdfs_set_size (inodes[num_obdos], obdos[num_obdos]->o_size); + obdfs_to_inode(inodes[num_obdos], obdos[num_obdos]); obdo_free(obdos[num_obdos]); } CDEBUG(D_INFO, "obdo_free done\n"); @@ -392,11 +390,10 @@ int obdfs_commit_write(struct file *file, struct page *page, unsigned from, unsi int rc; struct inode *inode = page->mapping->host; loff_t pos = ((loff_t)page->index << PAGE_CACHE_SHIFT) + to; - // XXX test with synchronous writes - rc = obdfs_do_writepage(page, 1); + rc = obdfs_do_writepage(page, 0); kunmap(page); if (pos > inode->i_size) { - obdfs_set_size (inode, pos); + inode->i_size = pos; obdfs_change_inode(inode); } return 0; @@ -526,8 +523,6 @@ void obdfs_truncate(struct inode *inode) EXIT; return; } - - obdfs_set_size (inode, inode->i_size); oa = obdo_alloc(); if ( !oa ) { /* XXX This would give an inconsistent FS, so deal with it as diff --git a/lustre/obdfs/super.c b/lustre/obdfs/super.c index 96435a1..8827bfb 100644 --- a/lustre/obdfs/super.c +++ b/lustre/obdfs/super.c @@ -124,6 +124,8 @@ static struct super_block * obdfs_read_super(struct super_block *sb, char *version = NULL; int devno; int err; + unsigned long blocksize; + unsigned long blocksize_bits; unsigned long root_ino; int scratch; struct obdo *oa; @@ -197,6 +199,26 @@ static struct super_block * obdfs_read_super(struct super_block *sb, sbi->osi_super = sb; CDEBUG(D_INFO, "\n"); + err = sbi->osi_ops->o_get_info(&sbi->osi_conn, strlen("blocksize"), + "blocksize", &scratch, + (void *)&blocksize); + if ( err ) { + printk("getinfo call to drive failed (blocksize)\n"); + EXIT; + goto ERR; + } + + CDEBUG(D_INFO, "\n"); + err = sbi->osi_ops->o_get_info(&sbi->osi_conn, strlen("blocksize_bits"), + "blocksize_bits", &scratch, + (void *)&blocksize_bits); + if ( err ) { + printk("getinfo call to drive failed (blocksize_bits)\n"); + EXIT; + goto ERR; + } + + CDEBUG(D_INFO, "\n"); err = sbi->osi_ops->o_get_info(&sbi->osi_conn, strlen("root_ino"), "root_ino", &scratch, (void *)&root_ino); if ( err ) { @@ -206,8 +228,8 @@ static struct super_block * obdfs_read_super(struct super_block *sb, } CDEBUG(D_INFO, "\n"); - sb->s_blocksize = PAGE_SIZE; - sb->s_blocksize_bits = (unsigned char)PAGE_SHIFT; + sb->s_blocksize = blocksize; + sb->s_blocksize_bits = (unsigned char)blocksize_bits; sb->s_magic = OBDFS_SUPER_MAGIC; sb->s_op = &obdfs_super_operations; @@ -237,9 +259,9 @@ static struct super_block * obdfs_read_super(struct super_block *sb, } CDEBUG(D_INFO, "obdfs_read_super: sbdev %d, rootino: %ld, dev %s, " - "minor: %d, blocksize: %ld, blocksize bits %d\n", + "minor: %d, blocksize: %ld, blocksize bits %ld\n", sb->s_dev, root->i_ino, device, MINOR(devno), - sb->s_blocksize, sb->s_blocksize_bits); + blocksize, blocksize_bits); sb->s_root = d_alloc_root(root); list_add(&sbi->osi_list, &obdfs_super_list); OBD_FREE(device, strlen(device) + 1); @@ -303,7 +325,7 @@ void obdfs_do_change_inode(struct inode *inode, int mask) return; } - oa->o_valid = OBD_MD_FLNOTOBD & ~(mask | OBD_MD_FLSIZE | OBD_MD_FLBLOCKS); + oa->o_valid = OBD_MD_FLNOTOBD & (~mask); obdfs_from_inode(oa, inode); err = IOPS(inode, setattr)(IID(inode), oa); @@ -415,7 +437,7 @@ out: int obdfs_setattr(struct dentry *de, struct iattr *attr) { struct inode *inode = de->d_inode; - struct obdo *oa, ooa; + struct obdo *oa; int err; ENTRY; @@ -433,21 +455,6 @@ int obdfs_setattr(struct dentry *de, struct iattr *attr) inode_copy_attr(inode, attr); oa->o_id = inode->i_ino; obdo_from_iattr(oa, attr); - - memcpy (&ooa, oa, sizeof (ooa)); - err = IOPS(inode, getattr)(IID(inode), &ooa); - if (err) { - printk(__FUNCTION__ ": obd_getattr fails (%d)\n", err); - } else { -#ifdef CHECK_SIZE - if (oa->o_size != ooa.o_size) { - printk(__FUNCTION__ ": oa->o_size %Ld != ooa.o_size %Ld\n", - oa->o_size, ooa.o_size); - } -#endif - } - - oa->o_valid &= ~(OBD_MD_FLSIZE | OBD_MD_FLBLOCKS); err = IOPS(inode, setattr)(IID(inode), oa); if ( err ) @@ -484,7 +491,7 @@ static inline void obdfs_read_inode2(struct inode *inode, void *opaque) struct obdo *oa = opaque; ENTRY; - obdfs_to_inode(inode, oa); + obdfs_to_inode(inode, oa); INIT_LIST_HEAD(obdfs_iplist(inode)); /* list of dirty pages on inode */ INIT_LIST_HEAD(obdfs_islist(inode)); /* list of inodes in superblock */