file.c (ffc18879903e55487bc5ac3c774b99a07de06029) | file.c (155130a4f7848b1aac439cab6bda1a175507c71c) |
---|---|
1/* 2 * OMFS (as used by RIO Karma) file operations. 3 * Copyright (C) 2005 Bob Copeland <me@bobcopeland.com> 4 * Released under GPL v2. 5 */ 6 7#include <linux/version.h> 8#include <linux/module.h> --- 36 unchanged lines hidden (view full) --- 45 */ 46 next = inode->i_ino; 47 48 /* only support truncate -> 0 for now */ 49 ret = -EIO; 50 if (inode->i_size != 0) 51 goto out; 52 | 1/* 2 * OMFS (as used by RIO Karma) file operations. 3 * Copyright (C) 2005 Bob Copeland <me@bobcopeland.com> 4 * Released under GPL v2. 5 */ 6 7#include <linux/version.h> 8#include <linux/module.h> --- 36 unchanged lines hidden (view full) --- 45 */ 46 next = inode->i_ino; 47 48 /* only support truncate -> 0 for now */ 49 ret = -EIO; 50 if (inode->i_size != 0) 51 goto out; 52 |
53 bh = omfs_bread(inode->i_sb, next); | 53 bh = sb_bread(inode->i_sb, clus_to_blk(sbi, next)); |
54 if (!bh) 55 goto out; 56 57 oe = (struct omfs_extent *)(&bh->b_data[OMFS_EXTENT_START]); 58 max_extents = omfs_max_extents(sbi, OMFS_EXTENT_START); 59 60 for (;;) { 61 --- 23 unchanged lines hidden (view full) --- 85 brelse(bh); 86 87 if (last != inode->i_ino) 88 omfs_clear_range(inode->i_sb, last, sbi->s_mirrors); 89 90 if (next == ~0) 91 break; 92 | 54 if (!bh) 55 goto out; 56 57 oe = (struct omfs_extent *)(&bh->b_data[OMFS_EXTENT_START]); 58 max_extents = omfs_max_extents(sbi, OMFS_EXTENT_START); 59 60 for (;;) { 61 --- 23 unchanged lines hidden (view full) --- 85 brelse(bh); 86 87 if (last != inode->i_ino) 88 omfs_clear_range(inode->i_sb, last, sbi->s_mirrors); 89 90 if (next == ~0) 91 break; 92 |
93 bh = omfs_bread(inode->i_sb, next); | 93 bh = sb_bread(inode->i_sb, clus_to_blk(sbi, next)); |
94 if (!bh) 95 goto out; 96 oe = (struct omfs_extent *) (&bh->b_data[OMFS_EXTENT_CONT]); 97 max_extents = omfs_max_extents(sbi, OMFS_EXTENT_CONT); 98 } 99 ret = 0; 100out: 101 return ret; --- 115 unchanged lines hidden (view full) --- 217} 218 219static int omfs_get_block(struct inode *inode, sector_t block, 220 struct buffer_head *bh_result, int create) 221{ 222 struct buffer_head *bh; 223 sector_t next, offset; 224 int ret; | 94 if (!bh) 95 goto out; 96 oe = (struct omfs_extent *) (&bh->b_data[OMFS_EXTENT_CONT]); 97 max_extents = omfs_max_extents(sbi, OMFS_EXTENT_CONT); 98 } 99 ret = 0; 100out: 101 return ret; --- 115 unchanged lines hidden (view full) --- 217} 218 219static int omfs_get_block(struct inode *inode, sector_t block, 220 struct buffer_head *bh_result, int create) 221{ 222 struct buffer_head *bh; 223 sector_t next, offset; 224 int ret; |
225 u64 uninitialized_var(new_block); | 225 u64 new_block; |
226 u32 max_extents; 227 int extent_count; 228 struct omfs_extent *oe; 229 struct omfs_extent_entry *entry; 230 struct omfs_sb_info *sbi = OMFS_SB(inode->i_sb); 231 int max_blocks = bh_result->b_size >> inode->i_blkbits; 232 int remain; 233 234 ret = -EIO; | 226 u32 max_extents; 227 int extent_count; 228 struct omfs_extent *oe; 229 struct omfs_extent_entry *entry; 230 struct omfs_sb_info *sbi = OMFS_SB(inode->i_sb); 231 int max_blocks = bh_result->b_size >> inode->i_blkbits; 232 int remain; 233 234 ret = -EIO; |
235 bh = omfs_bread(inode->i_sb, inode->i_ino); | 235 bh = sb_bread(inode->i_sb, clus_to_blk(sbi, inode->i_ino)); |
236 if (!bh) 237 goto out; 238 239 oe = (struct omfs_extent *)(&bh->b_data[OMFS_EXTENT_START]); 240 max_extents = omfs_max_extents(sbi, OMFS_EXTENT_START); 241 next = inode->i_ino; 242 243 for (;;) { --- 16 unchanged lines hidden (view full) --- 260 remain = max_blocks; 261 bh_result->b_size = (remain << inode->i_blkbits); 262 goto out_brelse; 263 } 264 if (next == ~0) 265 break; 266 267 brelse(bh); | 236 if (!bh) 237 goto out; 238 239 oe = (struct omfs_extent *)(&bh->b_data[OMFS_EXTENT_START]); 240 max_extents = omfs_max_extents(sbi, OMFS_EXTENT_START); 241 next = inode->i_ino; 242 243 for (;;) { --- 16 unchanged lines hidden (view full) --- 260 remain = max_blocks; 261 bh_result->b_size = (remain << inode->i_blkbits); 262 goto out_brelse; 263 } 264 if (next == ~0) 265 break; 266 267 brelse(bh); |
268 bh = omfs_bread(inode->i_sb, next); | 268 bh = sb_bread(inode->i_sb, clus_to_blk(sbi, next)); |
269 if (!bh) 270 goto out; 271 oe = (struct omfs_extent *) (&bh->b_data[OMFS_EXTENT_CONT]); 272 max_extents = omfs_max_extents(sbi, OMFS_EXTENT_CONT); 273 } 274 if (create) { 275 ret = omfs_grow_extent(inode, oe, &new_block); 276 if (ret == 0) { --- 30 unchanged lines hidden (view full) --- 307{ 308 return mpage_writepages(mapping, wbc, omfs_get_block); 309} 310 311static int omfs_write_begin(struct file *file, struct address_space *mapping, 312 loff_t pos, unsigned len, unsigned flags, 313 struct page **pagep, void **fsdata) 314{ | 269 if (!bh) 270 goto out; 271 oe = (struct omfs_extent *) (&bh->b_data[OMFS_EXTENT_CONT]); 272 max_extents = omfs_max_extents(sbi, OMFS_EXTENT_CONT); 273 } 274 if (create) { 275 ret = omfs_grow_extent(inode, oe, &new_block); 276 if (ret == 0) { --- 30 unchanged lines hidden (view full) --- 307{ 308 return mpage_writepages(mapping, wbc, omfs_get_block); 309} 310 311static int omfs_write_begin(struct file *file, struct address_space *mapping, 312 loff_t pos, unsigned len, unsigned flags, 313 struct page **pagep, void **fsdata) 314{ |
315 *pagep = NULL; 316 return block_write_begin(file, mapping, pos, len, flags, 317 pagep, fsdata, omfs_get_block); | 315 int ret; 316 317 ret = block_write_begin(mapping, pos, len, flags, pagep, 318 omfs_get_block); 319 if (unlikely(ret)) { 320 loff_t isize = mapping->host->i_size; 321 if (pos + len > isize) 322 vmtruncate(mapping->host, isize); 323 } 324 325 return ret; |
318} 319 320static sector_t omfs_bmap(struct address_space *mapping, sector_t block) 321{ 322 return generic_block_bmap(mapping, block, omfs_get_block); 323} 324 325const struct file_operations omfs_file_operations = { --- 25 unchanged lines hidden --- | 326} 327 328static sector_t omfs_bmap(struct address_space *mapping, sector_t block) 329{ 330 return generic_block_bmap(mapping, block, omfs_get_block); 331} 332 333const struct file_operations omfs_file_operations = { --- 25 unchanged lines hidden --- |