Messages in this thread | | | Date | Tue, 31 Mar 2009 01:04:20 -0700 | From | Andrew Morton <> | Subject | Re: [PATCH 4/8 ver5] exofs: address_space_operations |
| |
On Sun, 22 Mar 2009 15:58:46 +0200 Boaz Harrosh <bharrosh@panasas.com> wrote:
> > OK Now we start to read and write from osd-objects. We try to > collect at most contiguous pages as possible in a single write/read. > The first page index is the object's offset. > > TODO: > In 64-bit a single bio can carry at most 128 pages. > Add support of chaining multiple bios > > > ... > > +static int write_exec(struct page_collect *pcol) > +{ > + struct exofs_i_info *oi = exofs_i(pcol->inode); > + struct osd_obj_id obj = {pcol->sbi->s_pid, > + pcol->inode->i_ino + EXOFS_OBJ_OFF}; > + struct osd_request *or = NULL; > + struct page_collect *pcol_copy = NULL; > + loff_t i_start = pcol->pg_first << PAGE_CACHE_SHIFT;
bug. On 32-bit this shift will overflow prior to getting promoted to 64-bit. Do:
loff_t i_start = (loff_t)pcol->pg_first << PAGE_CACHE_SHIFT;
> > ... > > +static int writepage_strip(struct page *page, > + struct writeback_control *wbc_unused, void *data)
Some of these functions could do with some comments explaining why they exist.
> + struct page_collect *pcol = data; > + struct inode *inode = pcol->inode; > + struct exofs_i_info *oi = exofs_i(inode); > + loff_t i_size = i_size_read(inode); > + pgoff_t end_index = i_size >> PAGE_CACHE_SHIFT; > + size_t len; > + int ret; > + > > ... >
| |