|
@@ -162,7 +162,7 @@ static int zero_readpage(struct page *page)
|
|
|
|
|
|
kaddr = kmap_atomic(page, KM_USER0);
|
|
kaddr = kmap_atomic(page, KM_USER0);
|
|
memset(kaddr, 0, PAGE_CACHE_SIZE);
|
|
memset(kaddr, 0, PAGE_CACHE_SIZE);
|
|
- kunmap_atomic(page, KM_USER0);
|
|
|
|
|
|
+ kunmap_atomic(kaddr, KM_USER0);
|
|
|
|
|
|
SetPageUptodate(page);
|
|
SetPageUptodate(page);
|
|
|
|
|
|
@@ -195,7 +195,7 @@ static int stuffed_readpage(struct gfs2_inode *ip, struct page *page)
|
|
memcpy(kaddr, dibh->b_data + sizeof(struct gfs2_dinode),
|
|
memcpy(kaddr, dibh->b_data + sizeof(struct gfs2_dinode),
|
|
ip->i_di.di_size);
|
|
ip->i_di.di_size);
|
|
memset(kaddr + ip->i_di.di_size, 0, PAGE_CACHE_SIZE - ip->i_di.di_size);
|
|
memset(kaddr + ip->i_di.di_size, 0, PAGE_CACHE_SIZE - ip->i_di.di_size);
|
|
- kunmap_atomic(page, KM_USER0);
|
|
|
|
|
|
+ kunmap_atomic(kaddr, KM_USER0);
|
|
|
|
|
|
brelse(dibh);
|
|
brelse(dibh);
|
|
|
|
|
|
@@ -370,19 +370,22 @@ static int gfs2_prepare_write(struct file *file, struct page *page,
|
|
loff_t pos = ((loff_t)page->index << PAGE_CACHE_SHIFT) + from;
|
|
loff_t pos = ((loff_t)page->index << PAGE_CACHE_SHIFT) + from;
|
|
loff_t end = ((loff_t)page->index << PAGE_CACHE_SHIFT) + to;
|
|
loff_t end = ((loff_t)page->index << PAGE_CACHE_SHIFT) + to;
|
|
struct gfs2_alloc *al;
|
|
struct gfs2_alloc *al;
|
|
|
|
+ unsigned int write_len = to - from;
|
|
|
|
+
|
|
|
|
|
|
gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_ATIME|GL_AOP, &ip->i_gh);
|
|
gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_ATIME|GL_AOP, &ip->i_gh);
|
|
error = gfs2_glock_nq_m_atime(1, &ip->i_gh);
|
|
error = gfs2_glock_nq_m_atime(1, &ip->i_gh);
|
|
if (error)
|
|
if (error)
|
|
goto out_uninit;
|
|
goto out_uninit;
|
|
|
|
|
|
- gfs2_write_calc_reserv(ip, to - from, &data_blocks, &ind_blocks);
|
|
|
|
|
|
+ gfs2_write_calc_reserv(ip, write_len, &data_blocks, &ind_blocks);
|
|
|
|
|
|
- error = gfs2_write_alloc_required(ip, pos, from - to, &alloc_required);
|
|
|
|
|
|
+ error = gfs2_write_alloc_required(ip, pos, write_len, &alloc_required);
|
|
if (error)
|
|
if (error)
|
|
goto out_unlock;
|
|
goto out_unlock;
|
|
|
|
|
|
|
|
|
|
|
|
+ ip->i_alloc.al_requested = 0;
|
|
if (alloc_required) {
|
|
if (alloc_required) {
|
|
al = gfs2_alloc_get(ip);
|
|
al = gfs2_alloc_get(ip);
|
|
|
|
|
|
@@ -482,7 +485,7 @@ static int gfs2_commit_write(struct file *file, struct page *page,
|
|
kaddr = kmap_atomic(page, KM_USER0);
|
|
kaddr = kmap_atomic(page, KM_USER0);
|
|
memcpy(dibh->b_data + sizeof(struct gfs2_dinode) + from,
|
|
memcpy(dibh->b_data + sizeof(struct gfs2_dinode) + from,
|
|
kaddr + from, to - from);
|
|
kaddr + from, to - from);
|
|
- kunmap_atomic(page, KM_USER0);
|
|
|
|
|
|
+ kunmap_atomic(kaddr, KM_USER0);
|
|
|
|
|
|
SetPageUptodate(page);
|
|
SetPageUptodate(page);
|
|
|
|
|