summaryrefslogtreecommitdiffstats
path: root/fs/reiserfs/inode.c
diff options
context:
space:
mode:
authorJeff Mahoney <jeffm@suse.com>2014-04-23 10:00:36 -0400
committerJan Kara <jack@suse.cz>2014-05-06 16:52:19 -0400
commit098297b27d23ad9d0fc302e3417474d9342c6c14 (patch)
tree58f2054cd9933225ef1ae9c7febedc9160041af6 /fs/reiserfs/inode.c
parent4cf5f7addf18ecae2ea49b11944976cbd26d5281 (diff)
reiserfs: cleanup, reformat comments to normal kernel style
This patch reformats comments in the reiserfs code to fit in 80 columns and to follow the style rules. There is no functional change but it helps make my eyes bleed less. Signed-off-by: Jeff Mahoney <jeffm@suse.com> Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/reiserfs/inode.c')
-rw-r--r--fs/reiserfs/inode.c1063
1 files changed, 634 insertions, 429 deletions
diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
index b8d3ffb1f722..cc2095943ec6 100644
--- a/fs/reiserfs/inode.c
+++ b/fs/reiserfs/inode.c
@@ -25,7 +25,10 @@ int reiserfs_commit_write(struct file *f, struct page *page,
25 25
26void reiserfs_evict_inode(struct inode *inode) 26void reiserfs_evict_inode(struct inode *inode)
27{ 27{
28 /* We need blocks for transaction + (user+group) quota update (possibly delete) */ 28 /*
29 * We need blocks for transaction + (user+group) quota
30 * update (possibly delete)
31 */
29 int jbegin_count = 32 int jbegin_count =
30 JOURNAL_PER_BALANCE_CNT * 2 + 33 JOURNAL_PER_BALANCE_CNT * 2 +
31 2 * REISERFS_QUOTA_INIT_BLOCKS(inode->i_sb); 34 2 * REISERFS_QUOTA_INIT_BLOCKS(inode->i_sb);
@@ -39,8 +42,12 @@ void reiserfs_evict_inode(struct inode *inode)
39 if (inode->i_nlink) 42 if (inode->i_nlink)
40 goto no_delete; 43 goto no_delete;
41 44
42 /* The = 0 happens when we abort creating a new inode for some reason like lack of space.. */ 45 /*
43 if (!(inode->i_state & I_NEW) && INODE_PKEY(inode)->k_objectid != 0) { /* also handles bad_inode case */ 46 * The = 0 happens when we abort creating a new inode
47 * for some reason like lack of space..
48 * also handles bad_inode case
49 */
50 if (!(inode->i_state & I_NEW) && INODE_PKEY(inode)->k_objectid != 0) {
44 51
45 reiserfs_delete_xattrs(inode); 52 reiserfs_delete_xattrs(inode);
46 53
@@ -54,9 +61,11 @@ void reiserfs_evict_inode(struct inode *inode)
54 61
55 err = reiserfs_delete_object(&th, inode); 62 err = reiserfs_delete_object(&th, inode);
56 63
57 /* Do quota update inside a transaction for journaled quotas. We must do that 64 /*
58 * after delete_object so that quota updates go into the same transaction as 65 * Do quota update inside a transaction for journaled quotas.
59 * stat data deletion */ 66 * We must do that after delete_object so that quota updates
67 * go into the same transaction as stat data deletion
68 */
60 if (!err) { 69 if (!err) {
61 int depth = reiserfs_write_unlock_nested(inode->i_sb); 70 int depth = reiserfs_write_unlock_nested(inode->i_sb);
62 dquot_free_inode(inode); 71 dquot_free_inode(inode);
@@ -66,22 +75,29 @@ void reiserfs_evict_inode(struct inode *inode)
66 if (journal_end(&th, inode->i_sb, jbegin_count)) 75 if (journal_end(&th, inode->i_sb, jbegin_count))
67 goto out; 76 goto out;
68 77
69 /* check return value from reiserfs_delete_object after 78 /*
79 * check return value from reiserfs_delete_object after
70 * ending the transaction 80 * ending the transaction
71 */ 81 */
72 if (err) 82 if (err)
73 goto out; 83 goto out;
74 84
75 /* all items of file are deleted, so we can remove "save" link */ 85 /*
76 remove_save_link(inode, 0 /* not truncate */ ); /* we can't do anything 86 * all items of file are deleted, so we can remove
77 * about an error here */ 87 * "save" link
88 * we can't do anything about an error here
89 */
90 remove_save_link(inode, 0 /* not truncate */);
78out: 91out:
79 reiserfs_write_unlock(inode->i_sb); 92 reiserfs_write_unlock(inode->i_sb);
80 } else { 93 } else {
81 /* no object items are in the tree */ 94 /* no object items are in the tree */
82 ; 95 ;
83 } 96 }
84 clear_inode(inode); /* note this must go after the journal_end to prevent deadlock */ 97
98 /* note this must go after the journal_end to prevent deadlock */
99 clear_inode(inode);
100
85 dquot_drop(inode); 101 dquot_drop(inode);
86 inode->i_blocks = 0; 102 inode->i_blocks = 0;
87 return; 103 return;
@@ -103,8 +119,10 @@ static void _make_cpu_key(struct cpu_key *key, int version, __u32 dirid,
103 key->key_length = length; 119 key->key_length = length;
104} 120}
105 121
106/* take base of inode_key (it comes from inode always) (dirid, objectid) and version from an inode, set 122/*
107 offset and type of key */ 123 * take base of inode_key (it comes from inode always) (dirid, objectid)
124 * and version from an inode, set offset and type of key
125 */
108void make_cpu_key(struct cpu_key *key, struct inode *inode, loff_t offset, 126void make_cpu_key(struct cpu_key *key, struct inode *inode, loff_t offset,
109 int type, int length) 127 int type, int length)
110{ 128{
@@ -114,9 +132,7 @@ void make_cpu_key(struct cpu_key *key, struct inode *inode, loff_t offset,
114 length); 132 length);
115} 133}
116 134
117// 135/* when key is 0, do not set version and short key */
118// when key is 0, do not set version and short key
119//
120inline void make_le_item_head(struct item_head *ih, const struct cpu_key *key, 136inline void make_le_item_head(struct item_head *ih, const struct cpu_key *key,
121 int version, 137 int version,
122 loff_t offset, int type, int length, 138 loff_t offset, int type, int length,
@@ -132,43 +148,47 @@ inline void make_le_item_head(struct item_head *ih, const struct cpu_key *key,
132 set_le_ih_k_type(ih, type); 148 set_le_ih_k_type(ih, type);
133 put_ih_item_len(ih, length); 149 put_ih_item_len(ih, length);
134 /* set_ih_free_space (ih, 0); */ 150 /* set_ih_free_space (ih, 0); */
135 // for directory items it is entry count, for directs and stat 151 /*
136 // datas - 0xffff, for indirects - 0 152 * for directory items it is entry count, for directs and stat
153 * datas - 0xffff, for indirects - 0
154 */
137 put_ih_entry_count(ih, entry_count); 155 put_ih_entry_count(ih, entry_count);
138} 156}
139 157
140// 158/*
141// FIXME: we might cache recently accessed indirect item 159 * FIXME: we might cache recently accessed indirect item
142 160 * Ugh. Not too eager for that....
143// Ugh. Not too eager for that.... 161 * I cut the code until such time as I see a convincing argument (benchmark).
144// I cut the code until such time as I see a convincing argument (benchmark). 162 * I don't want a bloated inode struct..., and I don't like code complexity....
145// I don't want a bloated inode struct..., and I don't like code complexity.... 163 */
146
147/* cutting the code is fine, since it really isn't in use yet and is easy
148** to add back in. But, Vladimir has a really good idea here. Think
149** about what happens for reading a file. For each page,
150** The VFS layer calls reiserfs_readpage, who searches the tree to find
151** an indirect item. This indirect item has X number of pointers, where
152** X is a big number if we've done the block allocation right. But,
153** we only use one or two of these pointers during each call to readpage,
154** needlessly researching again later on.
155**
156** The size of the cache could be dynamic based on the size of the file.
157**
158** I'd also like to see us cache the location the stat data item, since
159** we are needlessly researching for that frequently.
160**
161** --chris
162*/
163 164
164/* If this page has a file tail in it, and 165/*
165** it was read in by get_block_create_0, the page data is valid, 166 * cutting the code is fine, since it really isn't in use yet and is easy
166** but tail is still sitting in a direct item, and we can't write to 167 * to add back in. But, Vladimir has a really good idea here. Think
167** it. So, look through this page, and check all the mapped buffers 168 * about what happens for reading a file. For each page,
168** to make sure they have valid block numbers. Any that don't need 169 * The VFS layer calls reiserfs_readpage, who searches the tree to find
169** to be unmapped, so that __block_write_begin will correctly call 170 * an indirect item. This indirect item has X number of pointers, where
170** reiserfs_get_block to convert the tail into an unformatted node 171 * X is a big number if we've done the block allocation right. But,
171*/ 172 * we only use one or two of these pointers during each call to readpage,
173 * needlessly researching again later on.
174 *
175 * The size of the cache could be dynamic based on the size of the file.
176 *
177 * I'd also like to see us cache the location the stat data item, since
178 * we are needlessly researching for that frequently.
179 *
180 * --chris
181 */
182
183/*
184 * If this page has a file tail in it, and
185 * it was read in by get_block_create_0, the page data is valid,
186 * but tail is still sitting in a direct item, and we can't write to
187 * it. So, look through this page, and check all the mapped buffers
188 * to make sure they have valid block numbers. Any that don't need
189 * to be unmapped, so that __block_write_begin will correctly call
190 * reiserfs_get_block to convert the tail into an unformatted node
191 */
172static inline void fix_tail_page_for_writing(struct page *page) 192static inline void fix_tail_page_for_writing(struct page *page)
173{ 193{
174 struct buffer_head *head, *next, *bh; 194 struct buffer_head *head, *next, *bh;
@@ -186,8 +206,10 @@ static inline void fix_tail_page_for_writing(struct page *page)
186 } 206 }
187} 207}
188 208
189/* reiserfs_get_block does not need to allocate a block only if it has been 209/*
190 done already or non-hole position has been found in the indirect item */ 210 * reiserfs_get_block does not need to allocate a block only if it has been
211 * done already or non-hole position has been found in the indirect item
212 */
191static inline int allocation_needed(int retval, b_blocknr_t allocated, 213static inline int allocation_needed(int retval, b_blocknr_t allocated,
192 struct item_head *ih, 214 struct item_head *ih,
193 __le32 * item, int pos_in_item) 215 __le32 * item, int pos_in_item)
@@ -211,14 +233,16 @@ static inline void set_block_dev_mapped(struct buffer_head *bh,
211 map_bh(bh, inode->i_sb, block); 233 map_bh(bh, inode->i_sb, block);
212} 234}
213 235
214// 236/*
215// files which were created in the earlier version can not be longer, 237 * files which were created in the earlier version can not be longer,
216// than 2 gb 238 * than 2 gb
217// 239 */
218static int file_capable(struct inode *inode, sector_t block) 240static int file_capable(struct inode *inode, sector_t block)
219{ 241{
220 if (get_inode_item_key_version(inode) != KEY_FORMAT_3_5 || // it is new file. 242 /* it is new file. */
221 block < (1 << (31 - inode->i_sb->s_blocksize_bits))) // old file, but 'block' is inside of 2gb 243 if (get_inode_item_key_version(inode) != KEY_FORMAT_3_5 ||
244 /* old file, but 'block' is inside of 2gb */
245 block < (1 << (31 - inode->i_sb->s_blocksize_bits)))
222 return 1; 246 return 1;
223 247
224 return 0; 248 return 0;
@@ -250,14 +274,14 @@ static int restart_transaction(struct reiserfs_transaction_handle *th,
250 return err; 274 return err;
251} 275}
252 276
253// it is called by get_block when create == 0. Returns block number 277/*
254// for 'block'-th logical block of file. When it hits direct item it 278 * it is called by get_block when create == 0. Returns block number
255// returns 0 (being called from bmap) or read direct item into piece 279 * for 'block'-th logical block of file. When it hits direct item it
256// of page (bh_result) 280 * returns 0 (being called from bmap) or read direct item into piece
257 281 * of page (bh_result)
258// Please improve the english/clarity in the comment above, as it is 282 * Please improve the english/clarity in the comment above, as it is
259// hard to understand. 283 * hard to understand.
260 284 */
261static int _get_block_create_0(struct inode *inode, sector_t block, 285static int _get_block_create_0(struct inode *inode, sector_t block,
262 struct buffer_head *bh_result, int args) 286 struct buffer_head *bh_result, int args)
263{ 287{
@@ -273,7 +297,7 @@ static int _get_block_create_0(struct inode *inode, sector_t block,
273 int done = 0; 297 int done = 0;
274 unsigned long offset; 298 unsigned long offset;
275 299
276 // prepare the key to look for the 'block'-th block of file 300 /* prepare the key to look for the 'block'-th block of file */
277 make_cpu_key(&key, inode, 301 make_cpu_key(&key, inode,
278 (loff_t) block * inode->i_sb->s_blocksize + 1, TYPE_ANY, 302 (loff_t) block * inode->i_sb->s_blocksize + 1, TYPE_ANY,
279 3); 303 3);
@@ -285,23 +309,28 @@ static int _get_block_create_0(struct inode *inode, sector_t block,
285 kunmap(bh_result->b_page); 309 kunmap(bh_result->b_page);
286 if (result == IO_ERROR) 310 if (result == IO_ERROR)
287 return -EIO; 311 return -EIO;
288 // We do not return -ENOENT if there is a hole but page is uptodate, because it means 312 /*
289 // That there is some MMAPED data associated with it that is yet to be written to disk. 313 * We do not return -ENOENT if there is a hole but page is
314 * uptodate, because it means that there is some MMAPED data
315 * associated with it that is yet to be written to disk.
316 */
290 if ((args & GET_BLOCK_NO_HOLE) 317 if ((args & GET_BLOCK_NO_HOLE)
291 && !PageUptodate(bh_result->b_page)) { 318 && !PageUptodate(bh_result->b_page)) {
292 return -ENOENT; 319 return -ENOENT;
293 } 320 }
294 return 0; 321 return 0;
295 } 322 }
296 // 323
297 bh = get_last_bh(&path); 324 bh = get_last_bh(&path);
298 ih = tp_item_head(&path); 325 ih = tp_item_head(&path);
299 if (is_indirect_le_ih(ih)) { 326 if (is_indirect_le_ih(ih)) {
300 __le32 *ind_item = (__le32 *) ih_item_body(bh, ih); 327 __le32 *ind_item = (__le32 *) ih_item_body(bh, ih);
301 328
302 /* FIXME: here we could cache indirect item or part of it in 329 /*
303 the inode to avoid search_by_key in case of subsequent 330 * FIXME: here we could cache indirect item or part of it in
304 access to file */ 331 * the inode to avoid search_by_key in case of subsequent
332 * access to file
333 */
305 blocknr = get_block_num(ind_item, path.pos_in_item); 334 blocknr = get_block_num(ind_item, path.pos_in_item);
306 ret = 0; 335 ret = 0;
307 if (blocknr) { 336 if (blocknr) {
@@ -311,8 +340,12 @@ static int _get_block_create_0(struct inode *inode, sector_t block,
311 set_buffer_boundary(bh_result); 340 set_buffer_boundary(bh_result);
312 } 341 }
313 } else 342 } else
314 // We do not return -ENOENT if there is a hole but page is uptodate, because it means 343 /*
315 // That there is some MMAPED data associated with it that is yet to be written to disk. 344 * We do not return -ENOENT if there is a hole but
345 * page is uptodate, because it means that there is
346 * some MMAPED data associated with it that is
347 * yet to be written to disk.
348 */
316 if ((args & GET_BLOCK_NO_HOLE) 349 if ((args & GET_BLOCK_NO_HOLE)
317 && !PageUptodate(bh_result->b_page)) { 350 && !PageUptodate(bh_result->b_page)) {
318 ret = -ENOENT; 351 ret = -ENOENT;
@@ -323,41 +356,45 @@ static int _get_block_create_0(struct inode *inode, sector_t block,
323 kunmap(bh_result->b_page); 356 kunmap(bh_result->b_page);
324 return ret; 357 return ret;
325 } 358 }
326 // requested data are in direct item(s) 359 /* requested data are in direct item(s) */
327 if (!(args & GET_BLOCK_READ_DIRECT)) { 360 if (!(args & GET_BLOCK_READ_DIRECT)) {
328 // we are called by bmap. FIXME: we can not map block of file 361 /*
329 // when it is stored in direct item(s) 362 * we are called by bmap. FIXME: we can not map block of file
363 * when it is stored in direct item(s)
364 */
330 pathrelse(&path); 365 pathrelse(&path);
331 if (p) 366 if (p)
332 kunmap(bh_result->b_page); 367 kunmap(bh_result->b_page);
333 return -ENOENT; 368 return -ENOENT;
334 } 369 }
335 370
336 /* if we've got a direct item, and the buffer or page was uptodate, 371 /*
337 ** we don't want to pull data off disk again. skip to the 372 * if we've got a direct item, and the buffer or page was uptodate,
338 ** end, where we map the buffer and return 373 * we don't want to pull data off disk again. skip to the
374 * end, where we map the buffer and return
339 */ 375 */
340 if (buffer_uptodate(bh_result)) { 376 if (buffer_uptodate(bh_result)) {
341 goto finished; 377 goto finished;
342 } else 378 } else
343 /* 379 /*
344 ** grab_tail_page can trigger calls to reiserfs_get_block on up to date 380 * grab_tail_page can trigger calls to reiserfs_get_block on
345 ** pages without any buffers. If the page is up to date, we don't want 381 * up to date pages without any buffers. If the page is up
346 ** read old data off disk. Set the up to date bit on the buffer instead 382 * to date, we don't want read old data off disk. Set the up
347 ** and jump to the end 383 * to date bit on the buffer instead and jump to the end
348 */ 384 */
349 if (!bh_result->b_page || PageUptodate(bh_result->b_page)) { 385 if (!bh_result->b_page || PageUptodate(bh_result->b_page)) {
350 set_buffer_uptodate(bh_result); 386 set_buffer_uptodate(bh_result);
351 goto finished; 387 goto finished;
352 } 388 }
353 // read file tail into part of page 389 /* read file tail into part of page */
354 offset = (cpu_key_k_offset(&key) - 1) & (PAGE_CACHE_SIZE - 1); 390 offset = (cpu_key_k_offset(&key) - 1) & (PAGE_CACHE_SIZE - 1);
355 copy_item_head(&tmp_ih, ih); 391 copy_item_head(&tmp_ih, ih);
356 392
357 /* we only want to kmap if we are reading the tail into the page. 393 /*
358 ** this is not the common case, so we don't kmap until we are 394 * we only want to kmap if we are reading the tail into the page.
359 ** sure we need to. But, this means the item might move if 395 * this is not the common case, so we don't kmap until we are
360 ** kmap schedules 396 * sure we need to. But, this means the item might move if
397 * kmap schedules
361 */ 398 */
362 if (!p) 399 if (!p)
363 p = (char *)kmap(bh_result->b_page); 400 p = (char *)kmap(bh_result->b_page);
@@ -368,10 +405,11 @@ static int _get_block_create_0(struct inode *inode, sector_t block,
368 if (!is_direct_le_ih(ih)) { 405 if (!is_direct_le_ih(ih)) {
369 BUG(); 406 BUG();
370 } 407 }
371 /* make sure we don't read more bytes than actually exist in 408 /*
372 ** the file. This can happen in odd cases where i_size isn't 409 * make sure we don't read more bytes than actually exist in
373 ** correct, and when direct item padding results in a few 410 * the file. This can happen in odd cases where i_size isn't
374 ** extra bytes at the end of the direct item 411 * correct, and when direct item padding results in a few
412 * extra bytes at the end of the direct item
375 */ 413 */
376 if ((le_ih_k_offset(ih) + path.pos_in_item) > inode->i_size) 414 if ((le_ih_k_offset(ih) + path.pos_in_item) > inode->i_size)
377 break; 415 break;
@@ -390,18 +428,20 @@ static int _get_block_create_0(struct inode *inode, sector_t block,
390 428
391 p += chars; 429 p += chars;
392 430
431 /*
432 * we done, if read direct item is not the last item of
433 * node FIXME: we could try to check right delimiting key
434 * to see whether direct item continues in the right
435 * neighbor or rely on i_size
436 */
393 if (PATH_LAST_POSITION(&path) != (B_NR_ITEMS(bh) - 1)) 437 if (PATH_LAST_POSITION(&path) != (B_NR_ITEMS(bh) - 1))
394 // we done, if read direct item is not the last item of
395 // node FIXME: we could try to check right delimiting key
396 // to see whether direct item continues in the right
397 // neighbor or rely on i_size
398 break; 438 break;
399 439
400 // update key to look for the next piece 440 /* update key to look for the next piece */
401 set_cpu_key_k_offset(&key, cpu_key_k_offset(&key) + chars); 441 set_cpu_key_k_offset(&key, cpu_key_k_offset(&key) + chars);
402 result = search_for_position_by_key(inode->i_sb, &key, &path); 442 result = search_for_position_by_key(inode->i_sb, &key, &path);
403 if (result != POSITION_FOUND) 443 if (result != POSITION_FOUND)
404 // i/o error most likely 444 /* i/o error most likely */
405 break; 445 break;
406 bh = get_last_bh(&path); 446 bh = get_last_bh(&path);
407 ih = tp_item_head(&path); 447 ih = tp_item_head(&path);
@@ -416,7 +456,8 @@ static int _get_block_create_0(struct inode *inode, sector_t block,
416 if (result == IO_ERROR) 456 if (result == IO_ERROR)
417 return -EIO; 457 return -EIO;
418 458
419 /* this buffer has valid data, but isn't valid for io. mapping it to 459 /*
460 * this buffer has valid data, but isn't valid for io. mapping it to
420 * block #0 tells the rest of reiserfs it just has a tail in it 461 * block #0 tells the rest of reiserfs it just has a tail in it
421 */ 462 */
422 map_bh(bh_result, inode->i_sb, 0); 463 map_bh(bh_result, inode->i_sb, 0);
@@ -424,8 +465,10 @@ static int _get_block_create_0(struct inode *inode, sector_t block,
424 return 0; 465 return 0;
425} 466}
426 467
427// this is called to create file map. So, _get_block_create_0 will not 468/*
428// read direct item 469 * this is called to create file map. So, _get_block_create_0 will not
470 * read direct item
471 */
429static int reiserfs_bmap(struct inode *inode, sector_t block, 472static int reiserfs_bmap(struct inode *inode, sector_t block,
430 struct buffer_head *bh_result, int create) 473 struct buffer_head *bh_result, int create)
431{ 474{
@@ -439,22 +482,23 @@ static int reiserfs_bmap(struct inode *inode, sector_t block,
439 return 0; 482 return 0;
440} 483}
441 484
442/* special version of get_block that is only used by grab_tail_page right 485/*
443** now. It is sent to __block_write_begin, and when you try to get a 486 * special version of get_block that is only used by grab_tail_page right
444** block past the end of the file (or a block from a hole) it returns 487 * now. It is sent to __block_write_begin, and when you try to get a
445** -ENOENT instead of a valid buffer. __block_write_begin expects to 488 * block past the end of the file (or a block from a hole) it returns
446** be able to do i/o on the buffers returned, unless an error value 489 * -ENOENT instead of a valid buffer. __block_write_begin expects to
447** is also returned. 490 * be able to do i/o on the buffers returned, unless an error value
448** 491 * is also returned.
449** So, this allows __block_write_begin to be used for reading a single block 492 *
450** in a page. Where it does not produce a valid page for holes, or past the 493 * So, this allows __block_write_begin to be used for reading a single block
451** end of the file. This turns out to be exactly what we need for reading 494 * in a page. Where it does not produce a valid page for holes, or past the
452** tails for conversion. 495 * end of the file. This turns out to be exactly what we need for reading
453** 496 * tails for conversion.
454** The point of the wrapper is forcing a certain value for create, even 497 *
455** though the VFS layer is calling this function with create==1. If you 498 * The point of the wrapper is forcing a certain value for create, even
456** don't want to send create == GET_BLOCK_NO_HOLE to reiserfs_get_block, 499 * though the VFS layer is calling this function with create==1. If you
457** don't use this function. 500 * don't want to send create == GET_BLOCK_NO_HOLE to reiserfs_get_block,
501 * don't use this function.
458*/ 502*/
459static int reiserfs_get_block_create_0(struct inode *inode, sector_t block, 503static int reiserfs_get_block_create_0(struct inode *inode, sector_t block,
460 struct buffer_head *bh_result, 504 struct buffer_head *bh_result,
@@ -463,8 +507,10 @@ static int reiserfs_get_block_create_0(struct inode *inode, sector_t block,
463 return reiserfs_get_block(inode, block, bh_result, GET_BLOCK_NO_HOLE); 507 return reiserfs_get_block(inode, block, bh_result, GET_BLOCK_NO_HOLE);
464} 508}
465 509
466/* This is special helper for reiserfs_get_block in case we are executing 510/*
467 direct_IO request. */ 511 * This is special helper for reiserfs_get_block in case we are executing
512 * direct_IO request.
513 */
468static int reiserfs_get_blocks_direct_io(struct inode *inode, 514static int reiserfs_get_blocks_direct_io(struct inode *inode,
469 sector_t iblock, 515 sector_t iblock,
470 struct buffer_head *bh_result, 516 struct buffer_head *bh_result,
@@ -474,9 +520,11 @@ static int reiserfs_get_blocks_direct_io(struct inode *inode,
474 520
475 bh_result->b_page = NULL; 521 bh_result->b_page = NULL;
476 522
477 /* We set the b_size before reiserfs_get_block call since it is 523 /*
478 referenced in convert_tail_for_hole() that may be called from 524 * We set the b_size before reiserfs_get_block call since it is
479 reiserfs_get_block() */ 525 * referenced in convert_tail_for_hole() that may be called from
526 * reiserfs_get_block()
527 */
480 bh_result->b_size = (1 << inode->i_blkbits); 528 bh_result->b_size = (1 << inode->i_blkbits);
481 529
482 ret = reiserfs_get_block(inode, iblock, bh_result, 530 ret = reiserfs_get_block(inode, iblock, bh_result,
@@ -486,14 +534,18 @@ static int reiserfs_get_blocks_direct_io(struct inode *inode,
486 534
487 /* don't allow direct io onto tail pages */ 535 /* don't allow direct io onto tail pages */
488 if (buffer_mapped(bh_result) && bh_result->b_blocknr == 0) { 536 if (buffer_mapped(bh_result) && bh_result->b_blocknr == 0) {
489 /* make sure future calls to the direct io funcs for this offset 537 /*
490 ** in the file fail by unmapping the buffer 538 * make sure future calls to the direct io funcs for this
539 * offset in the file fail by unmapping the buffer
491 */ 540 */
492 clear_buffer_mapped(bh_result); 541 clear_buffer_mapped(bh_result);
493 ret = -EINVAL; 542 ret = -EINVAL;
494 } 543 }
495 /* Possible unpacked tail. Flush the data before pages have 544
496 disappeared */ 545 /*
546 * Possible unpacked tail. Flush the data before pages have
547 * disappeared
548 */
497 if (REISERFS_I(inode)->i_flags & i_pack_on_close_mask) { 549 if (REISERFS_I(inode)->i_flags & i_pack_on_close_mask) {
498 int err; 550 int err;
499 551
@@ -512,15 +564,15 @@ static int reiserfs_get_blocks_direct_io(struct inode *inode,
512} 564}
513 565
514/* 566/*
515** helper function for when reiserfs_get_block is called for a hole 567 * helper function for when reiserfs_get_block is called for a hole
516** but the file tail is still in a direct item 568 * but the file tail is still in a direct item
517** bh_result is the buffer head for the hole 569 * bh_result is the buffer head for the hole
518** tail_offset is the offset of the start of the tail in the file 570 * tail_offset is the offset of the start of the tail in the file
519** 571 *
520** This calls prepare_write, which will start a new transaction 572 * This calls prepare_write, which will start a new transaction
521** you should not be in a transaction, or have any paths held when you 573 * you should not be in a transaction, or have any paths held when you
522** call this. 574 * call this.
523*/ 575 */
524static int convert_tail_for_hole(struct inode *inode, 576static int convert_tail_for_hole(struct inode *inode,
525 struct buffer_head *bh_result, 577 struct buffer_head *bh_result,
526 loff_t tail_offset) 578 loff_t tail_offset)
@@ -540,9 +592,10 @@ static int convert_tail_for_hole(struct inode *inode,
540 tail_end = (tail_start | (bh_result->b_size - 1)) + 1; 592 tail_end = (tail_start | (bh_result->b_size - 1)) + 1;
541 593
542 index = tail_offset >> PAGE_CACHE_SHIFT; 594 index = tail_offset >> PAGE_CACHE_SHIFT;
543 /* hole_page can be zero in case of direct_io, we are sure 595 /*
544 that we cannot get here if we write with O_DIRECT into 596 * hole_page can be zero in case of direct_io, we are sure
545 tail page */ 597 * that we cannot get here if we write with O_DIRECT into tail page
598 */
546 if (!hole_page || index != hole_page->index) { 599 if (!hole_page || index != hole_page->index) {
547 tail_page = grab_cache_page(inode->i_mapping, index); 600 tail_page = grab_cache_page(inode->i_mapping, index);
548 retval = -ENOMEM; 601 retval = -ENOMEM;
@@ -553,14 +606,15 @@ static int convert_tail_for_hole(struct inode *inode,
553 tail_page = hole_page; 606 tail_page = hole_page;
554 } 607 }
555 608
556 /* we don't have to make sure the conversion did not happen while 609 /*
557 ** we were locking the page because anyone that could convert 610 * we don't have to make sure the conversion did not happen while
558 ** must first take i_mutex. 611 * we were locking the page because anyone that could convert
559 ** 612 * must first take i_mutex.
560 ** We must fix the tail page for writing because it might have buffers 613 *
561 ** that are mapped, but have a block number of 0. This indicates tail 614 * We must fix the tail page for writing because it might have buffers
562 ** data that has been read directly into the page, and 615 * that are mapped, but have a block number of 0. This indicates tail
563 ** __block_write_begin won't trigger a get_block in this case. 616 * data that has been read directly into the page, and
617 * __block_write_begin won't trigger a get_block in this case.
564 */ 618 */
565 fix_tail_page_for_writing(tail_page); 619 fix_tail_page_for_writing(tail_page);
566 retval = __reiserfs_write_begin(tail_page, tail_start, 620 retval = __reiserfs_write_begin(tail_page, tail_start,
@@ -604,7 +658,8 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
604 struct buffer_head *bh_result, int create) 658 struct buffer_head *bh_result, int create)
605{ 659{
606 int repeat, retval = 0; 660 int repeat, retval = 0;
607 b_blocknr_t allocated_block_nr = 0; // b_blocknr_t is (unsigned) 32 bit int 661 /* b_blocknr_t is (unsigned) 32 bit int*/
662 b_blocknr_t allocated_block_nr = 0;
608 INITIALIZE_PATH(path); 663 INITIALIZE_PATH(path);
609 int pos_in_item; 664 int pos_in_item;
610 struct cpu_key key; 665 struct cpu_key key;
@@ -614,12 +669,14 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
614 int done; 669 int done;
615 int fs_gen; 670 int fs_gen;
616 struct reiserfs_transaction_handle *th = NULL; 671 struct reiserfs_transaction_handle *th = NULL;
617 /* space reserved in transaction batch: 672 /*
618 . 3 balancings in direct->indirect conversion 673 * space reserved in transaction batch:
619 . 1 block involved into reiserfs_update_sd() 674 * . 3 balancings in direct->indirect conversion
620 XXX in practically impossible worst case direct2indirect() 675 * . 1 block involved into reiserfs_update_sd()
621 can incur (much) more than 3 balancings. 676 * XXX in practically impossible worst case direct2indirect()
622 quota update for user, group */ 677 * can incur (much) more than 3 balancings.
678 * quota update for user, group
679 */
623 int jbegin_count = 680 int jbegin_count =
624 JOURNAL_PER_BALANCE_CNT * 3 + 1 + 681 JOURNAL_PER_BALANCE_CNT * 3 + 1 +
625 2 * REISERFS_QUOTA_TRANS_BLOCKS(inode->i_sb); 682 2 * REISERFS_QUOTA_TRANS_BLOCKS(inode->i_sb);
@@ -636,8 +693,9 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
636 return -EFBIG; 693 return -EFBIG;
637 } 694 }
638 695
639 /* if !create, we aren't changing the FS, so we don't need to 696 /*
640 ** log anything, so we don't need to start a transaction 697 * if !create, we aren't changing the FS, so we don't need to
698 * log anything, so we don't need to start a transaction
641 */ 699 */
642 if (!(create & GET_BLOCK_CREATE)) { 700 if (!(create & GET_BLOCK_CREATE)) {
643 int ret; 701 int ret;
@@ -647,6 +705,7 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
647 reiserfs_write_unlock(inode->i_sb); 705 reiserfs_write_unlock(inode->i_sb);
648 return ret; 706 return ret;
649 } 707 }
708
650 /* 709 /*
651 * if we're already in a transaction, make sure to close 710 * if we're already in a transaction, make sure to close
652 * any new transactions we start in this func 711 * any new transactions we start in this func
@@ -655,8 +714,10 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
655 reiserfs_transaction_running(inode->i_sb)) 714 reiserfs_transaction_running(inode->i_sb))
656 dangle = 0; 715 dangle = 0;
657 716
658 /* If file is of such a size, that it might have a tail and tails are enabled 717 /*
659 ** we should mark it as possibly needing tail packing on close 718 * If file is of such a size, that it might have a tail and
719 * tails are enabled we should mark it as possibly needing
720 * tail packing on close
660 */ 721 */
661 if ((have_large_tails(inode->i_sb) 722 if ((have_large_tails(inode->i_sb)
662 && inode->i_size < i_block_size(inode) * 4) 723 && inode->i_size < i_block_size(inode) * 4)
@@ -703,11 +764,12 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
703 _allocate_block(th, block, inode, &allocated_block_nr, 764 _allocate_block(th, block, inode, &allocated_block_nr,
704 &path, create); 765 &path, create);
705 766
767 /*
768 * restart the transaction to give the journal a chance to free
769 * some blocks. releases the path, so we have to go back to
770 * research if we succeed on the second try
771 */
706 if (repeat == NO_DISK_SPACE || repeat == QUOTA_EXCEEDED) { 772 if (repeat == NO_DISK_SPACE || repeat == QUOTA_EXCEEDED) {
707 /* restart the transaction to give the journal a chance to free
708 ** some blocks. releases the path, so we have to go back to
709 ** research if we succeed on the second try
710 */
711 SB_JOURNAL(inode->i_sb)->j_next_async_flush = 1; 773 SB_JOURNAL(inode->i_sb)->j_next_async_flush = 1;
712 retval = restart_transaction(th, inode, &path); 774 retval = restart_transaction(th, inode, &path);
713 if (retval) 775 if (retval)
@@ -734,9 +796,11 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
734 796
735 if (indirect_item_found(retval, ih)) { 797 if (indirect_item_found(retval, ih)) {
736 b_blocknr_t unfm_ptr; 798 b_blocknr_t unfm_ptr;
737 /* 'block'-th block is in the file already (there is 799 /*
738 corresponding cell in some indirect item). But it may be 800 * 'block'-th block is in the file already (there is
739 zero unformatted node pointer (hole) */ 801 * corresponding cell in some indirect item). But it may be
802 * zero unformatted node pointer (hole)
803 */
740 unfm_ptr = get_block_num(item, pos_in_item); 804 unfm_ptr = get_block_num(item, pos_in_item);
741 if (unfm_ptr == 0) { 805 if (unfm_ptr == 0) {
742 /* use allocated block to plug the hole */ 806 /* use allocated block to plug the hole */
@@ -764,9 +828,10 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
764 828
765 reiserfs_write_unlock(inode->i_sb); 829 reiserfs_write_unlock(inode->i_sb);
766 830
767 /* the item was found, so new blocks were not added to the file 831 /*
768 ** there is no need to make sure the inode is updated with this 832 * the item was found, so new blocks were not added to the file
769 ** transaction 833 * there is no need to make sure the inode is updated with this
834 * transaction
770 */ 835 */
771 return retval; 836 return retval;
772 } 837 }
@@ -776,9 +841,11 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
776 goto start_trans; 841 goto start_trans;
777 } 842 }
778 843
779 /* desired position is not found or is in the direct item. We have 844 /*
780 to append file with holes up to 'block'-th block converting 845 * desired position is not found or is in the direct item. We have
781 direct items to indirect one if necessary */ 846 * to append file with holes up to 'block'-th block converting
847 * direct items to indirect one if necessary
848 */
782 done = 0; 849 done = 0;
783 do { 850 do {
784 if (is_statdata_le_ih(ih)) { 851 if (is_statdata_le_ih(ih)) {
@@ -790,16 +857,18 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
790 TYPE_INDIRECT, UNFM_P_SIZE, 857 TYPE_INDIRECT, UNFM_P_SIZE,
791 0 /* free_space */ ); 858 0 /* free_space */ );
792 859
860 /*
861 * we are going to add 'block'-th block to the file.
862 * Use allocated block for that
863 */
793 if (cpu_key_k_offset(&key) == 1) { 864 if (cpu_key_k_offset(&key) == 1) {
794 /* we are going to add 'block'-th block to the file. Use
795 allocated block for that */
796 unp = cpu_to_le32(allocated_block_nr); 865 unp = cpu_to_le32(allocated_block_nr);
797 set_block_dev_mapped(bh_result, 866 set_block_dev_mapped(bh_result,
798 allocated_block_nr, inode); 867 allocated_block_nr, inode);
799 set_buffer_new(bh_result); 868 set_buffer_new(bh_result);
800 done = 1; 869 done = 1;
801 } 870 }
802 tmp_key = key; // ;) 871 tmp_key = key; /* ;) */
803 set_cpu_key_k_offset(&tmp_key, 1); 872 set_cpu_key_k_offset(&tmp_key, 1);
804 PATH_LAST_POSITION(&path)++; 873 PATH_LAST_POSITION(&path)++;
805 874
@@ -809,9 +878,12 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
809 if (retval) { 878 if (retval) {
810 reiserfs_free_block(th, inode, 879 reiserfs_free_block(th, inode,
811 allocated_block_nr, 1); 880 allocated_block_nr, 1);
812 goto failure; // retval == -ENOSPC, -EDQUOT or -EIO or -EEXIST 881 /*
882 * retval == -ENOSPC, -EDQUOT or -EIO
883 * or -EEXIST
884 */
885 goto failure;
813 } 886 }
814 //mark_tail_converted (inode);
815 } else if (is_direct_le_ih(ih)) { 887 } else if (is_direct_le_ih(ih)) {
816 /* direct item has to be converted */ 888 /* direct item has to be converted */
817 loff_t tail_offset; 889 loff_t tail_offset;
@@ -819,18 +891,24 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
819 tail_offset = 891 tail_offset =
820 ((le_ih_k_offset(ih) - 892 ((le_ih_k_offset(ih) -
821 1) & ~(inode->i_sb->s_blocksize - 1)) + 1; 893 1) & ~(inode->i_sb->s_blocksize - 1)) + 1;
894
895 /*
896 * direct item we just found fits into block we have
897 * to map. Convert it into unformatted node: use
898 * bh_result for the conversion
899 */
822 if (tail_offset == cpu_key_k_offset(&key)) { 900 if (tail_offset == cpu_key_k_offset(&key)) {
823 /* direct item we just found fits into block we have
824 to map. Convert it into unformatted node: use
825 bh_result for the conversion */
826 set_block_dev_mapped(bh_result, 901 set_block_dev_mapped(bh_result,
827 allocated_block_nr, inode); 902 allocated_block_nr, inode);
828 unbh = bh_result; 903 unbh = bh_result;
829 done = 1; 904 done = 1;
830 } else { 905 } else {
831 /* we have to padd file tail stored in direct item(s) 906 /*
832 up to block size and convert it to unformatted 907 * we have to pad file tail stored in direct
833 node. FIXME: this should also get into page cache */ 908 * item(s) up to block size and convert it
909 * to unformatted node. FIXME: this should
910 * also get into page cache
911 */
834 912
835 pathrelse(&path); 913 pathrelse(&path);
836 /* 914 /*
@@ -859,7 +937,10 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
859 inode->i_ino, 937 inode->i_ino,
860 retval); 938 retval);
861 if (allocated_block_nr) { 939 if (allocated_block_nr) {
862 /* the bitmap, the super, and the stat data == 3 */ 940 /*
941 * the bitmap, the super,
942 * and the stat data == 3
943 */
863 if (!th) 944 if (!th)
864 th = reiserfs_persistent_transaction(inode->i_sb, 3); 945 th = reiserfs_persistent_transaction(inode->i_sb, 3);
865 if (th) 946 if (th)
@@ -881,43 +962,57 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
881 allocated_block_nr, 1); 962 allocated_block_nr, 1);
882 goto failure; 963 goto failure;
883 } 964 }
884 /* it is important the set_buffer_uptodate is done after 965 /*
885 ** the direct2indirect. The buffer might contain valid 966 * it is important the set_buffer_uptodate is done
886 ** data newer than the data on disk (read by readpage, changed, 967 * after the direct2indirect. The buffer might
887 ** and then sent here by writepage). direct2indirect needs 968 * contain valid data newer than the data on disk
888 ** to know if unbh was already up to date, so it can decide 969 * (read by readpage, changed, and then sent here by
889 ** if the data in unbh needs to be replaced with data from 970 * writepage). direct2indirect needs to know if unbh
890 ** the disk 971 * was already up to date, so it can decide if the
972 * data in unbh needs to be replaced with data from
973 * the disk
891 */ 974 */
892 set_buffer_uptodate(unbh); 975 set_buffer_uptodate(unbh);
893 976
894 /* unbh->b_page == NULL in case of DIRECT_IO request, this means 977 /*
895 buffer will disappear shortly, so it should not be added to 978 * unbh->b_page == NULL in case of DIRECT_IO request,
979 * this means buffer will disappear shortly, so it
980 * should not be added to
896 */ 981 */
897 if (unbh->b_page) { 982 if (unbh->b_page) {
898 /* we've converted the tail, so we must 983 /*
899 ** flush unbh before the transaction commits 984 * we've converted the tail, so we must
985 * flush unbh before the transaction commits
900 */ 986 */
901 reiserfs_add_tail_list(inode, unbh); 987 reiserfs_add_tail_list(inode, unbh);
902 988
903 /* mark it dirty now to prevent commit_write from adding 989 /*
904 ** this buffer to the inode's dirty buffer list 990 * mark it dirty now to prevent commit_write
991 * from adding this buffer to the inode's
992 * dirty buffer list
905 */ 993 */
906 /* 994 /*
907 * AKPM: changed __mark_buffer_dirty to mark_buffer_dirty(). 995 * AKPM: changed __mark_buffer_dirty to
908 * It's still atomic, but it sets the page dirty too, 996 * mark_buffer_dirty(). It's still atomic,
909 * which makes it eligible for writeback at any time by the 997 * but it sets the page dirty too, which makes
910 * VM (which was also the case with __mark_buffer_dirty()) 998 * it eligible for writeback at any time by the
999 * VM (which was also the case with
1000 * __mark_buffer_dirty())
911 */ 1001 */
912 mark_buffer_dirty(unbh); 1002 mark_buffer_dirty(unbh);
913 } 1003 }
914 } else { 1004 } else {
915 /* append indirect item with holes if needed, when appending 1005 /*
916 pointer to 'block'-th block use block, which is already 1006 * append indirect item with holes if needed, when
917 allocated */ 1007 * appending pointer to 'block'-th block use block,
1008 * which is already allocated
1009 */
918 struct cpu_key tmp_key; 1010 struct cpu_key tmp_key;
919 unp_t unf_single = 0; // We use this in case we need to allocate only 1011 /*
920 // one block which is a fastpath 1012 * We use this in case we need to allocate
1013 * only one block which is a fastpath
1014 */
1015 unp_t unf_single = 0;
921 unp_t *un; 1016 unp_t *un;
922 __u64 max_to_insert = 1017 __u64 max_to_insert =
923 MAX_ITEM_LEN(inode->i_sb->s_blocksize) / 1018 MAX_ITEM_LEN(inode->i_sb->s_blocksize) /
@@ -926,14 +1021,17 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
926 1021
927 RFALSE(pos_in_item != ih_item_len(ih) / UNFM_P_SIZE, 1022 RFALSE(pos_in_item != ih_item_len(ih) / UNFM_P_SIZE,
928 "vs-804: invalid position for append"); 1023 "vs-804: invalid position for append");
929 /* indirect item has to be appended, set up key of that position */ 1024 /*
1025 * indirect item has to be appended,
1026 * set up key of that position
1027 * (key type is unimportant)
1028 */
930 make_cpu_key(&tmp_key, inode, 1029 make_cpu_key(&tmp_key, inode,
931 le_key_k_offset(version, 1030 le_key_k_offset(version,
932 &(ih->ih_key)) + 1031 &(ih->ih_key)) +
933 op_bytes_number(ih, 1032 op_bytes_number(ih,
934 inode->i_sb->s_blocksize), 1033 inode->i_sb->s_blocksize),
935 //pos_in_item * inode->i_sb->s_blocksize, 1034 TYPE_INDIRECT, 3);
936 TYPE_INDIRECT, 3); // key type is unimportant
937 1035
938 RFALSE(cpu_key_k_offset(&tmp_key) > cpu_key_k_offset(&key), 1036 RFALSE(cpu_key_k_offset(&tmp_key) > cpu_key_k_offset(&key),
939 "green-805: invalid offset"); 1037 "green-805: invalid offset");
@@ -954,8 +1052,10 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
954 } 1052 }
955 } 1053 }
956 if (blocks_needed <= max_to_insert) { 1054 if (blocks_needed <= max_to_insert) {
957 /* we are going to add target block to the file. Use allocated 1055 /*
958 block for that */ 1056 * we are going to add target block to
1057 * the file. Use allocated block for that
1058 */
959 un[blocks_needed - 1] = 1059 un[blocks_needed - 1] =
960 cpu_to_le32(allocated_block_nr); 1060 cpu_to_le32(allocated_block_nr);
961 set_block_dev_mapped(bh_result, 1061 set_block_dev_mapped(bh_result,
@@ -964,8 +1064,11 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
964 done = 1; 1064 done = 1;
965 } else { 1065 } else {
966 /* paste hole to the indirect item */ 1066 /* paste hole to the indirect item */
967 /* If kmalloc failed, max_to_insert becomes zero and it means we 1067 /*
968 only have space for one block */ 1068 * If kmalloc failed, max_to_insert becomes
1069 * zero and it means we only have space for
1070 * one block
1071 */
969 blocks_needed = 1072 blocks_needed =
970 max_to_insert ? max_to_insert : 1; 1073 max_to_insert ? max_to_insert : 1;
971 } 1074 }
@@ -984,9 +1087,12 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
984 goto failure; 1087 goto failure;
985 } 1088 }
986 if (!done) { 1089 if (!done) {
987 /* We need to mark new file size in case this function will be 1090 /*
988 interrupted/aborted later on. And we may do this only for 1091 * We need to mark new file size in case
989 holes. */ 1092 * this function will be interrupted/aborted
1093 * later on. And we may do this only for
1094 * holes.
1095 */
990 inode->i_size += 1096 inode->i_size +=
991 inode->i_sb->s_blocksize * blocks_needed; 1097 inode->i_sb->s_blocksize * blocks_needed;
992 } 1098 }
@@ -995,13 +1101,13 @@ int reiserfs_get_block(struct inode *inode, sector_t block,
995 if (done == 1) 1101 if (done == 1)
996 break; 1102 break;
997 1103
998 /* this loop could log more blocks than we had originally asked 1104 /*
999 ** for. So, we have to allow the transaction to end if it is 1105 * this loop could log more blocks than we had originally
1000 ** too big or too full. Update the inode so things are 1106 * asked for. So, we have to allow the transaction to end
1001 ** consistent if we crash before the function returns 1107 * if it is too big or too full. Update the inode so things
1002 ** 1108 * are consistent if we crash before the function returns
1003 ** release the path so that anybody waiting on the path before 1109 * release the path so that anybody waiting on the path before
1004 ** ending their transaction will be able to continue. 1110 * ending their transaction will be able to continue.
1005 */ 1111 */
1006 if (journal_transaction_should_end(th, th->t_blocks_allocated)) { 1112 if (journal_transaction_should_end(th, th->t_blocks_allocated)) {
1007 retval = restart_transaction(th, inode, &path); 1113 retval = restart_transaction(th, inode, &path);
@@ -1060,8 +1166,10 @@ reiserfs_readpages(struct file *file, struct address_space *mapping,
1060 return mpage_readpages(mapping, pages, nr_pages, reiserfs_get_block); 1166 return mpage_readpages(mapping, pages, nr_pages, reiserfs_get_block);
1061} 1167}
1062 1168
1063/* Compute real number of used bytes by file 1169/*
1064 * Following three functions can go away when we'll have enough space in stat item 1170 * Compute real number of used bytes by file
1171 * Following three functions can go away when we'll have enough space in
1172 * stat item
1065 */ 1173 */
1066static int real_space_diff(struct inode *inode, int sd_size) 1174static int real_space_diff(struct inode *inode, int sd_size)
1067{ 1175{
@@ -1071,13 +1179,14 @@ static int real_space_diff(struct inode *inode, int sd_size)
1071 if (S_ISLNK(inode->i_mode) || S_ISDIR(inode->i_mode)) 1179 if (S_ISLNK(inode->i_mode) || S_ISDIR(inode->i_mode))
1072 return sd_size; 1180 return sd_size;
1073 1181
1074 /* End of file is also in full block with indirect reference, so round 1182 /*
1075 ** up to the next block. 1183 * End of file is also in full block with indirect reference, so round
1076 ** 1184 * up to the next block.
1077 ** there is just no way to know if the tail is actually packed 1185 *
1078 ** on the file, so we have to assume it isn't. When we pack the 1186 * there is just no way to know if the tail is actually packed
1079 ** tail, we add 4 bytes to pretend there really is an unformatted 1187 * on the file, so we have to assume it isn't. When we pack the
1080 ** node pointer 1188 * tail, we add 4 bytes to pretend there really is an unformatted
1189 * node pointer
1081 */ 1190 */
1082 bytes = 1191 bytes =
1083 ((inode->i_size + 1192 ((inode->i_size +
@@ -1108,29 +1217,29 @@ static inline ulong to_fake_used_blocks(struct inode *inode, int sd_size)
1108 bytes += (loff_t) 511; 1217 bytes += (loff_t) 511;
1109 } 1218 }
1110 1219
1111 /* files from before the quota patch might i_blocks such that 1220 /*
1112 ** bytes < real_space. Deal with that here to prevent it from 1221 * files from before the quota patch might i_blocks such that
1113 ** going negative. 1222 * bytes < real_space. Deal with that here to prevent it from
1223 * going negative.
1114 */ 1224 */
1115 if (bytes < real_space) 1225 if (bytes < real_space)
1116 return 0; 1226 return 0;
1117 return (bytes - real_space) >> 9; 1227 return (bytes - real_space) >> 9;
1118} 1228}
1119 1229
1120// 1230/*
1121// BAD: new directories have stat data of new type and all other items 1231 * BAD: new directories have stat data of new type and all other items
1122// of old type. Version stored in the inode says about body items, so 1232 * of old type. Version stored in the inode says about body items, so
1123// in update_stat_data we can not rely on inode, but have to check 1233 * in update_stat_data we can not rely on inode, but have to check
1124// item version directly 1234 * item version directly
1125// 1235 */
1126 1236
1127// called by read_locked_inode 1237/* called by read_locked_inode */
1128static void init_inode(struct inode *inode, struct treepath *path) 1238static void init_inode(struct inode *inode, struct treepath *path)
1129{ 1239{
1130 struct buffer_head *bh; 1240 struct buffer_head *bh;
1131 struct item_head *ih; 1241 struct item_head *ih;
1132 __u32 rdev; 1242 __u32 rdev;
1133 //int version = ITEM_VERSION_1;
1134 1243
1135 bh = PATH_PLAST_BUFFER(path); 1244 bh = PATH_PLAST_BUFFER(path);
1136 ih = tp_item_head(path); 1245 ih = tp_item_head(path);
@@ -1168,20 +1277,26 @@ static void init_inode(struct inode *inode, struct treepath *path)
1168 inode->i_generation = le32_to_cpu(INODE_PKEY(inode)->k_dir_id); 1277 inode->i_generation = le32_to_cpu(INODE_PKEY(inode)->k_dir_id);
1169 blocks = (inode->i_size + 511) >> 9; 1278 blocks = (inode->i_size + 511) >> 9;
1170 blocks = _ROUND_UP(blocks, inode->i_sb->s_blocksize >> 9); 1279 blocks = _ROUND_UP(blocks, inode->i_sb->s_blocksize >> 9);
1280
1281 /*
1282 * there was a bug in <=3.5.23 when i_blocks could take
1283 * negative values. Starting from 3.5.17 this value could
1284 * even be stored in stat data. For such files we set
1285 * i_blocks based on file size. Just 2 notes: this can be
1286 * wrong for sparse files. On-disk value will be only
1287 * updated if file's inode will ever change
1288 */
1171 if (inode->i_blocks > blocks) { 1289 if (inode->i_blocks > blocks) {
1172 // there was a bug in <=3.5.23 when i_blocks could take negative
1173 // values. Starting from 3.5.17 this value could even be stored in
1174 // stat data. For such files we set i_blocks based on file
1175 // size. Just 2 notes: this can be wrong for sparce files. On-disk value will be
1176 // only updated if file's inode will ever change
1177 inode->i_blocks = blocks; 1290 inode->i_blocks = blocks;
1178 } 1291 }
1179 1292
1180 rdev = sd_v1_rdev(sd); 1293 rdev = sd_v1_rdev(sd);
1181 REISERFS_I(inode)->i_first_direct_byte = 1294 REISERFS_I(inode)->i_first_direct_byte =
1182 sd_v1_first_direct_byte(sd); 1295 sd_v1_first_direct_byte(sd);
1183 /* an early bug in the quota code can give us an odd number for the 1296
1184 ** block count. This is incorrect, fix it here. 1297 /*
1298 * an early bug in the quota code can give us an odd
1299 * number for the block count. This is incorrect, fix it here.
1185 */ 1300 */
1186 if (inode->i_blocks & 1) { 1301 if (inode->i_blocks & 1) {
1187 inode->i_blocks++; 1302 inode->i_blocks++;
@@ -1189,12 +1304,16 @@ static void init_inode(struct inode *inode, struct treepath *path)
1189 inode_set_bytes(inode, 1304 inode_set_bytes(inode,
1190 to_real_used_space(inode, inode->i_blocks, 1305 to_real_used_space(inode, inode->i_blocks,
1191 SD_V1_SIZE)); 1306 SD_V1_SIZE));
1192 /* nopack is initially zero for v1 objects. For v2 objects, 1307 /*
1193 nopack is initialised from sd_attrs */ 1308 * nopack is initially zero for v1 objects. For v2 objects,
1309 * nopack is initialised from sd_attrs
1310 */
1194 REISERFS_I(inode)->i_flags &= ~i_nopack_mask; 1311 REISERFS_I(inode)->i_flags &= ~i_nopack_mask;
1195 } else { 1312 } else {
1196 // new stat data found, but object may have old items 1313 /*
1197 // (directories and symlinks) 1314 * new stat data found, but object may have old items
1315 * (directories and symlinks)
1316 */
1198 struct stat_data *sd = (struct stat_data *)ih_item_body(bh, ih); 1317 struct stat_data *sd = (struct stat_data *)ih_item_body(bh, ih);
1199 1318
1200 inode->i_mode = sd_v2_mode(sd); 1319 inode->i_mode = sd_v2_mode(sd);
@@ -1225,8 +1344,10 @@ static void init_inode(struct inode *inode, struct treepath *path)
1225 inode_set_bytes(inode, 1344 inode_set_bytes(inode,
1226 to_real_used_space(inode, inode->i_blocks, 1345 to_real_used_space(inode, inode->i_blocks,
1227 SD_V2_SIZE)); 1346 SD_V2_SIZE));
1228 /* read persistent inode attributes from sd and initialise 1347 /*
1229 generic inode flags from them */ 1348 * read persistent inode attributes from sd and initialise
1349 * generic inode flags from them
1350 */
1230 REISERFS_I(inode)->i_attrs = sd_v2_attrs(sd); 1351 REISERFS_I(inode)->i_attrs = sd_v2_attrs(sd);
1231 sd_attrs_to_i_attrs(sd_v2_attrs(sd), inode); 1352 sd_attrs_to_i_attrs(sd_v2_attrs(sd), inode);
1232 } 1353 }
@@ -1249,7 +1370,7 @@ static void init_inode(struct inode *inode, struct treepath *path)
1249 } 1370 }
1250} 1371}
1251 1372
1252// update new stat data with inode fields 1373/* update new stat data with inode fields */
1253static void inode2sd(void *sd, struct inode *inode, loff_t size) 1374static void inode2sd(void *sd, struct inode *inode, loff_t size)
1254{ 1375{
1255 struct stat_data *sd_v2 = (struct stat_data *)sd; 1376 struct stat_data *sd_v2 = (struct stat_data *)sd;
@@ -1273,7 +1394,7 @@ static void inode2sd(void *sd, struct inode *inode, loff_t size)
1273 set_sd_v2_attrs(sd_v2, flags); 1394 set_sd_v2_attrs(sd_v2, flags);
1274} 1395}
1275 1396
1276// used to copy inode's fields to old stat data 1397/* used to copy inode's fields to old stat data */
1277static void inode2sd_v1(void *sd, struct inode *inode, loff_t size) 1398static void inode2sd_v1(void *sd, struct inode *inode, loff_t size)
1278{ 1399{
1279 struct stat_data_v1 *sd_v1 = (struct stat_data_v1 *)sd; 1400 struct stat_data_v1 *sd_v1 = (struct stat_data_v1 *)sd;
@@ -1292,14 +1413,15 @@ static void inode2sd_v1(void *sd, struct inode *inode, loff_t size)
1292 else 1413 else
1293 set_sd_v1_blocks(sd_v1, to_fake_used_blocks(inode, SD_V1_SIZE)); 1414 set_sd_v1_blocks(sd_v1, to_fake_used_blocks(inode, SD_V1_SIZE));
1294 1415
1295 // Sigh. i_first_direct_byte is back 1416 /* Sigh. i_first_direct_byte is back */
1296 set_sd_v1_first_direct_byte(sd_v1, 1417 set_sd_v1_first_direct_byte(sd_v1,
1297 REISERFS_I(inode)->i_first_direct_byte); 1418 REISERFS_I(inode)->i_first_direct_byte);
1298} 1419}
1299 1420
1300/* NOTE, you must prepare the buffer head before sending it here, 1421/*
1301** and then log it after the call 1422 * NOTE, you must prepare the buffer head before sending it here,
1302*/ 1423 * and then log it after the call
1424 */
1303static void update_stat_data(struct treepath *path, struct inode *inode, 1425static void update_stat_data(struct treepath *path, struct inode *inode,
1304 loff_t size) 1426 loff_t size)
1305{ 1427{
@@ -1313,8 +1435,8 @@ static void update_stat_data(struct treepath *path, struct inode *inode,
1313 reiserfs_panic(inode->i_sb, "vs-13065", "key %k, found item %h", 1435 reiserfs_panic(inode->i_sb, "vs-13065", "key %k, found item %h",
1314 INODE_PKEY(inode), ih); 1436 INODE_PKEY(inode), ih);
1315 1437
1438 /* path points to old stat data */
1316 if (stat_data_v1(ih)) { 1439 if (stat_data_v1(ih)) {
1317 // path points to old stat data
1318 inode2sd_v1(ih_item_body(bh, ih), inode, size); 1440 inode2sd_v1(ih_item_body(bh, ih), inode, size);
1319 } else { 1441 } else {
1320 inode2sd(ih_item_body(bh, ih), inode, size); 1442 inode2sd(ih_item_body(bh, ih), inode, size);
@@ -1335,7 +1457,8 @@ void reiserfs_update_sd_size(struct reiserfs_transaction_handle *th,
1335 1457
1336 BUG_ON(!th->t_trans_id); 1458 BUG_ON(!th->t_trans_id);
1337 1459
1338 make_cpu_key(&key, inode, SD_OFFSET, TYPE_STAT_DATA, 3); //key type is unimportant 1460 /* key type is unimportant */
1461 make_cpu_key(&key, inode, SD_OFFSET, TYPE_STAT_DATA, 3);
1339 1462
1340 for (;;) { 1463 for (;;) {
1341 int pos; 1464 int pos;
@@ -1363,19 +1486,22 @@ void reiserfs_update_sd_size(struct reiserfs_transaction_handle *th,
1363 return; 1486 return;
1364 } 1487 }
1365 1488
1366 /* sigh, prepare_for_journal might schedule. When it schedules the 1489 /*
1367 ** FS might change. We have to detect that, and loop back to the 1490 * sigh, prepare_for_journal might schedule. When it
1368 ** search if the stat data item has moved 1491 * schedules the FS might change. We have to detect that,
1492 * and loop back to the search if the stat data item has moved
1369 */ 1493 */
1370 bh = get_last_bh(&path); 1494 bh = get_last_bh(&path);
1371 ih = tp_item_head(&path); 1495 ih = tp_item_head(&path);
1372 copy_item_head(&tmp_ih, ih); 1496 copy_item_head(&tmp_ih, ih);
1373 fs_gen = get_generation(inode->i_sb); 1497 fs_gen = get_generation(inode->i_sb);
1374 reiserfs_prepare_for_journal(inode->i_sb, bh, 1); 1498 reiserfs_prepare_for_journal(inode->i_sb, bh, 1);
1499
1500 /* Stat_data item has been moved after scheduling. */
1375 if (fs_changed(fs_gen, inode->i_sb) 1501 if (fs_changed(fs_gen, inode->i_sb)
1376 && item_moved(&tmp_ih, &path)) { 1502 && item_moved(&tmp_ih, &path)) {
1377 reiserfs_restore_prepared_buffer(inode->i_sb, bh); 1503 reiserfs_restore_prepared_buffer(inode->i_sb, bh);
1378 continue; /* Stat_data item has been moved after scheduling. */ 1504 continue;
1379 } 1505 }
1380 break; 1506 break;
1381 } 1507 }
@@ -1385,23 +1511,23 @@ void reiserfs_update_sd_size(struct reiserfs_transaction_handle *th,
1385 return; 1511 return;
1386} 1512}
1387 1513
1388/* reiserfs_read_locked_inode is called to read the inode off disk, and it 1514/*
1389** does a make_bad_inode when things go wrong. But, we need to make sure 1515 * reiserfs_read_locked_inode is called to read the inode off disk, and it
1390** and clear the key in the private portion of the inode, otherwise a 1516 * does a make_bad_inode when things go wrong. But, we need to make sure
1391** corresponding iput might try to delete whatever object the inode last 1517 * and clear the key in the private portion of the inode, otherwise a
1392** represented. 1518 * corresponding iput might try to delete whatever object the inode last
1393*/ 1519 * represented.
1520 */
1394static void reiserfs_make_bad_inode(struct inode *inode) 1521static void reiserfs_make_bad_inode(struct inode *inode)
1395{ 1522{
1396 memset(INODE_PKEY(inode), 0, KEY_SIZE); 1523 memset(INODE_PKEY(inode), 0, KEY_SIZE);
1397 make_bad_inode(inode); 1524 make_bad_inode(inode);
1398} 1525}
1399 1526
1400// 1527/*
1401// initially this function was derived from minix or ext2's analog and 1528 * initially this function was derived from minix or ext2's analog and
1402// evolved as the prototype did 1529 * evolved as the prototype did
1403// 1530 */
1404
1405int reiserfs_init_locked_inode(struct inode *inode, void *p) 1531int reiserfs_init_locked_inode(struct inode *inode, void *p)
1406{ 1532{
1407 struct reiserfs_iget_args *args = (struct reiserfs_iget_args *)p; 1533 struct reiserfs_iget_args *args = (struct reiserfs_iget_args *)p;
@@ -1410,8 +1536,10 @@ int reiserfs_init_locked_inode(struct inode *inode, void *p)
1410 return 0; 1536 return 0;
1411} 1537}
1412 1538
1413/* looks for stat data in the tree, and fills up the fields of in-core 1539/*
1414 inode stat data fields */ 1540 * looks for stat data in the tree, and fills up the fields of in-core
1541 * inode stat data fields
1542 */
1415void reiserfs_read_locked_inode(struct inode *inode, 1543void reiserfs_read_locked_inode(struct inode *inode,
1416 struct reiserfs_iget_args *args) 1544 struct reiserfs_iget_args *args)
1417{ 1545{
@@ -1422,8 +1550,10 @@ void reiserfs_read_locked_inode(struct inode *inode,
1422 1550
1423 dirino = args->dirid; 1551 dirino = args->dirid;
1424 1552
1425 /* set version 1, version 2 could be used too, because stat data 1553 /*
1426 key is the same in both versions */ 1554 * set version 1, version 2 could be used too, because stat data
1555 * key is the same in both versions
1556 */
1427 key.version = KEY_FORMAT_3_5; 1557 key.version = KEY_FORMAT_3_5;
1428 key.on_disk_key.k_dir_id = dirino; 1558 key.on_disk_key.k_dir_id = dirino;
1429 key.on_disk_key.k_objectid = inode->i_ino; 1559 key.on_disk_key.k_objectid = inode->i_ino;
@@ -1439,8 +1569,9 @@ void reiserfs_read_locked_inode(struct inode *inode,
1439 reiserfs_make_bad_inode(inode); 1569 reiserfs_make_bad_inode(inode);
1440 return; 1570 return;
1441 } 1571 }
1572
1573 /* a stale NFS handle can trigger this without it being an error */
1442 if (retval != ITEM_FOUND) { 1574 if (retval != ITEM_FOUND) {
1443 /* a stale NFS handle can trigger this without it being an error */
1444 pathrelse(&path_to_sd); 1575 pathrelse(&path_to_sd);
1445 reiserfs_make_bad_inode(inode); 1576 reiserfs_make_bad_inode(inode);
1446 clear_nlink(inode); 1577 clear_nlink(inode);
@@ -1449,20 +1580,25 @@ void reiserfs_read_locked_inode(struct inode *inode,
1449 1580
1450 init_inode(inode, &path_to_sd); 1581 init_inode(inode, &path_to_sd);
1451 1582
1452 /* It is possible that knfsd is trying to access inode of a file 1583 /*
1453 that is being removed from the disk by some other thread. As we 1584 * It is possible that knfsd is trying to access inode of a file
1454 update sd on unlink all that is required is to check for nlink 1585 * that is being removed from the disk by some other thread. As we
1455 here. This bug was first found by Sizif when debugging 1586 * update sd on unlink all that is required is to check for nlink
1456 SquidNG/Butterfly, forgotten, and found again after Philippe 1587 * here. This bug was first found by Sizif when debugging
1457 Gramoulle <philippe.gramoulle@mmania.com> reproduced it. 1588 * SquidNG/Butterfly, forgotten, and found again after Philippe
1458 1589 * Gramoulle <philippe.gramoulle@mmania.com> reproduced it.
1459 More logical fix would require changes in fs/inode.c:iput() to 1590
1460 remove inode from hash-table _after_ fs cleaned disk stuff up and 1591 * More logical fix would require changes in fs/inode.c:iput() to
1461 in iget() to return NULL if I_FREEING inode is found in 1592 * remove inode from hash-table _after_ fs cleaned disk stuff up and
1462 hash-table. */ 1593 * in iget() to return NULL if I_FREEING inode is found in
1463 /* Currently there is one place where it's ok to meet inode with 1594 * hash-table.
1464 nlink==0: processing of open-unlinked and half-truncated files 1595 */
1465 during mount (fs/reiserfs/super.c:finish_unfinished()). */ 1596
1597 /*
1598 * Currently there is one place where it's ok to meet inode with
1599 * nlink==0: processing of open-unlinked and half-truncated files
1600 * during mount (fs/reiserfs/super.c:finish_unfinished()).
1601 */
1466 if ((inode->i_nlink == 0) && 1602 if ((inode->i_nlink == 0) &&
1467 !REISERFS_SB(inode->i_sb)->s_is_unlinked_ok) { 1603 !REISERFS_SB(inode->i_sb)->s_is_unlinked_ok) {
1468 reiserfs_warning(inode->i_sb, "vs-13075", 1604 reiserfs_warning(inode->i_sb, "vs-13075",
@@ -1472,7 +1608,8 @@ void reiserfs_read_locked_inode(struct inode *inode,
1472 reiserfs_make_bad_inode(inode); 1608 reiserfs_make_bad_inode(inode);
1473 } 1609 }
1474 1610
1475 reiserfs_check_path(&path_to_sd); /* init inode should be relsing */ 1611 /* init inode should be relsing */
1612 reiserfs_check_path(&path_to_sd);
1476 1613
1477 /* 1614 /*
1478 * Stat data v1 doesn't support ACLs. 1615 * Stat data v1 doesn't support ACLs.
@@ -1481,7 +1618,7 @@ void reiserfs_read_locked_inode(struct inode *inode,
1481 cache_no_acl(inode); 1618 cache_no_acl(inode);
1482} 1619}
1483 1620
1484/** 1621/*
1485 * reiserfs_find_actor() - "find actor" reiserfs supplies to iget5_locked(). 1622 * reiserfs_find_actor() - "find actor" reiserfs supplies to iget5_locked().
1486 * 1623 *
1487 * @inode: inode from hash table to check 1624 * @inode: inode from hash table to check
@@ -1556,7 +1693,8 @@ static struct dentry *reiserfs_get_dentry(struct super_block *sb,
1556struct dentry *reiserfs_fh_to_dentry(struct super_block *sb, struct fid *fid, 1693struct dentry *reiserfs_fh_to_dentry(struct super_block *sb, struct fid *fid,
1557 int fh_len, int fh_type) 1694 int fh_len, int fh_type)
1558{ 1695{
1559 /* fhtype happens to reflect the number of u32s encoded. 1696 /*
1697 * fhtype happens to reflect the number of u32s encoded.
1560 * due to a bug in earlier code, fhtype might indicate there 1698 * due to a bug in earlier code, fhtype might indicate there
1561 * are more u32s then actually fitted. 1699 * are more u32s then actually fitted.
1562 * so if fhtype seems to be more than len, reduce fhtype. 1700 * so if fhtype seems to be more than len, reduce fhtype.
@@ -1625,13 +1763,16 @@ int reiserfs_encode_fh(struct inode *inode, __u32 * data, int *lenp,
1625 return *lenp; 1763 return *lenp;
1626} 1764}
1627 1765
1628/* looks for stat data, then copies fields to it, marks the buffer 1766/*
1629 containing stat data as dirty */ 1767 * looks for stat data, then copies fields to it, marks the buffer
1630/* reiserfs inodes are never really dirty, since the dirty inode call 1768 * containing stat data as dirty
1631** always logs them. This call allows the VFS inode marking routines 1769 */
1632** to properly mark inodes for datasync and such, but only actually 1770/*
1633** does something when called for a synchronous update. 1771 * reiserfs inodes are never really dirty, since the dirty inode call
1634*/ 1772 * always logs them. This call allows the VFS inode marking routines
1773 * to properly mark inodes for datasync and such, but only actually
1774 * does something when called for a synchronous update.
1775 */
1635int reiserfs_write_inode(struct inode *inode, struct writeback_control *wbc) 1776int reiserfs_write_inode(struct inode *inode, struct writeback_control *wbc)
1636{ 1777{
1637 struct reiserfs_transaction_handle th; 1778 struct reiserfs_transaction_handle th;
@@ -1639,10 +1780,12 @@ int reiserfs_write_inode(struct inode *inode, struct writeback_control *wbc)
1639 1780
1640 if (inode->i_sb->s_flags & MS_RDONLY) 1781 if (inode->i_sb->s_flags & MS_RDONLY)
1641 return -EROFS; 1782 return -EROFS;
1642 /* memory pressure can sometimes initiate write_inode calls with sync == 1, 1783 /*
1643 ** these cases are just when the system needs ram, not when the 1784 * memory pressure can sometimes initiate write_inode calls with
1644 ** inode needs to reach disk for safety, and they can safely be 1785 * sync == 1,
1645 ** ignored because the altered inode has already been logged. 1786 * these cases are just when the system needs ram, not when the
1787 * inode needs to reach disk for safety, and they can safely be
1788 * ignored because the altered inode has already been logged.
1646 */ 1789 */
1647 if (wbc->sync_mode == WB_SYNC_ALL && !(current->flags & PF_MEMALLOC)) { 1790 if (wbc->sync_mode == WB_SYNC_ALL && !(current->flags & PF_MEMALLOC)) {
1648 reiserfs_write_lock(inode->i_sb); 1791 reiserfs_write_lock(inode->i_sb);
@@ -1655,8 +1798,10 @@ int reiserfs_write_inode(struct inode *inode, struct writeback_control *wbc)
1655 return 0; 1798 return 0;
1656} 1799}
1657 1800
1658/* stat data of new object is inserted already, this inserts the item 1801/*
1659 containing "." and ".." entries */ 1802 * stat data of new object is inserted already, this inserts the item
1803 * containing "." and ".." entries
1804 */
1660static int reiserfs_new_directory(struct reiserfs_transaction_handle *th, 1805static int reiserfs_new_directory(struct reiserfs_transaction_handle *th,
1661 struct inode *inode, 1806 struct inode *inode,
1662 struct item_head *ih, struct treepath *path, 1807 struct item_head *ih, struct treepath *path,
@@ -1674,9 +1819,11 @@ static int reiserfs_new_directory(struct reiserfs_transaction_handle *th,
1674 le32_to_cpu(ih->ih_key.k_objectid), DOT_OFFSET, 1819 le32_to_cpu(ih->ih_key.k_objectid), DOT_OFFSET,
1675 TYPE_DIRENTRY, 3 /*key length */ ); 1820 TYPE_DIRENTRY, 3 /*key length */ );
1676 1821
1677 /* compose item head for new item. Directories consist of items of 1822 /*
1678 old type (ITEM_VERSION_1). Do not set key (second arg is 0), it 1823 * compose item head for new item. Directories consist of items of
1679 is done by reiserfs_new_inode */ 1824 * old type (ITEM_VERSION_1). Do not set key (second arg is 0), it
1825 * is done by reiserfs_new_inode
1826 */
1680 if (old_format_only(sb)) { 1827 if (old_format_only(sb)) {
1681 make_le_item_head(ih, NULL, KEY_FORMAT_3_5, DOT_OFFSET, 1828 make_le_item_head(ih, NULL, KEY_FORMAT_3_5, DOT_OFFSET,
1682 TYPE_DIRENTRY, EMPTY_DIR_SIZE_V1, 2); 1829 TYPE_DIRENTRY, EMPTY_DIR_SIZE_V1, 2);
@@ -1714,9 +1861,12 @@ static int reiserfs_new_directory(struct reiserfs_transaction_handle *th,
1714 return reiserfs_insert_item(th, path, &key, ih, inode, body); 1861 return reiserfs_insert_item(th, path, &key, ih, inode, body);
1715} 1862}
1716 1863
1717/* stat data of object has been inserted, this inserts the item 1864/*
1718 containing the body of symlink */ 1865 * stat data of object has been inserted, this inserts the item
1719static int reiserfs_new_symlink(struct reiserfs_transaction_handle *th, struct inode *inode, /* Inode of symlink */ 1866 * containing the body of symlink
1867 */
1868static int reiserfs_new_symlink(struct reiserfs_transaction_handle *th,
1869 struct inode *inode,
1720 struct item_head *ih, 1870 struct item_head *ih,
1721 struct treepath *path, const char *symname, 1871 struct treepath *path, const char *symname,
1722 int item_len) 1872 int item_len)
@@ -1754,15 +1904,26 @@ static int reiserfs_new_symlink(struct reiserfs_transaction_handle *th, struct i
1754 return reiserfs_insert_item(th, path, &key, ih, inode, symname); 1904 return reiserfs_insert_item(th, path, &key, ih, inode, symname);
1755} 1905}
1756 1906
1757/* inserts the stat data into the tree, and then calls 1907/*
1758 reiserfs_new_directory (to insert ".", ".." item if new object is 1908 * inserts the stat data into the tree, and then calls
1759 directory) or reiserfs_new_symlink (to insert symlink body if new 1909 * reiserfs_new_directory (to insert ".", ".." item if new object is
1760 object is symlink) or nothing (if new object is regular file) 1910 * directory) or reiserfs_new_symlink (to insert symlink body if new
1761 1911 * object is symlink) or nothing (if new object is regular file)
1762 NOTE! uid and gid must already be set in the inode. If we return 1912
1763 non-zero due to an error, we have to drop the quota previously allocated 1913 * NOTE! uid and gid must already be set in the inode. If we return
1764 for the fresh inode. This can only be done outside a transaction, so 1914 * non-zero due to an error, we have to drop the quota previously allocated
1765 if we return non-zero, we also end the transaction. */ 1915 * for the fresh inode. This can only be done outside a transaction, so
1916 * if we return non-zero, we also end the transaction.
1917 *
1918 * @th: active transaction handle
1919 * @dir: parent directory for new inode
1920 * @mode: mode of new inode
1921 * @symname: symlink contents if inode is symlink
1922 * @isize: 0 for regular file, EMPTY_DIR_SIZE for dirs, strlen(symname) for
1923 * symlinks
1924 * @inode: inode to be filled
1925 * @security: optional security context to associate with this inode
1926 */
1766int reiserfs_new_inode(struct reiserfs_transaction_handle *th, 1927int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
1767 struct inode *dir, umode_t mode, const char *symname, 1928 struct inode *dir, umode_t mode, const char *symname,
1768 /* 0 for regular, EMTRY_DIR_SIZE for dirs, 1929 /* 0 for regular, EMTRY_DIR_SIZE for dirs,
@@ -1820,10 +1981,11 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
1820 } 1981 }
1821 1982
1822 if (old_format_only(sb)) 1983 if (old_format_only(sb))
1823 /* not a perfect generation count, as object ids can be reused, but 1984 /*
1824 ** this is as good as reiserfs can do right now. 1985 * not a perfect generation count, as object ids can be reused,
1825 ** note that the private part of inode isn't filled in yet, we have 1986 * but this is as good as reiserfs can do right now.
1826 ** to use the directory. 1987 * note that the private part of inode isn't filled in yet,
1988 * we have to use the directory.
1827 */ 1989 */
1828 inode->i_generation = le32_to_cpu(INODE_PKEY(dir)->k_objectid); 1990 inode->i_generation = le32_to_cpu(INODE_PKEY(dir)->k_objectid);
1829 else 1991 else
@@ -1878,9 +2040,9 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
1878 goto out_bad_inode; 2040 goto out_bad_inode;
1879 } 2041 }
1880 if (old_format_only(sb)) { 2042 if (old_format_only(sb)) {
2043 /* i_uid or i_gid is too big to be stored in stat data v3.5 */
1881 if (i_uid_read(inode) & ~0xffff || i_gid_read(inode) & ~0xffff) { 2044 if (i_uid_read(inode) & ~0xffff || i_gid_read(inode) & ~0xffff) {
1882 pathrelse(&path_to_key); 2045 pathrelse(&path_to_key);
1883 /* i_uid or i_gid is too big to be stored in stat data v3.5 */
1884 err = -EINVAL; 2046 err = -EINVAL;
1885 goto out_bad_inode; 2047 goto out_bad_inode;
1886 } 2048 }
@@ -1888,9 +2050,11 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
1888 } else { 2050 } else {
1889 inode2sd(&sd, inode, inode->i_size); 2051 inode2sd(&sd, inode, inode->i_size);
1890 } 2052 }
1891 // store in in-core inode the key of stat data and version all 2053 /*
1892 // object items will have (directory items will have old offset 2054 * store in in-core inode the key of stat data and version all
1893 // format, other new objects will consist of new items) 2055 * object items will have (directory items will have old offset
2056 * format, other new objects will consist of new items)
2057 */
1894 if (old_format_only(sb) || S_ISDIR(mode) || S_ISLNK(mode)) 2058 if (old_format_only(sb) || S_ISDIR(mode) || S_ISLNK(mode))
1895 set_inode_item_key_version(inode, KEY_FORMAT_3_5); 2059 set_inode_item_key_version(inode, KEY_FORMAT_3_5);
1896 else 2060 else
@@ -1975,10 +2139,6 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
1975 2139
1976 return 0; 2140 return 0;
1977 2141
1978/* it looks like you can easily compress these two goto targets into
1979 * one. Keeping it like this doesn't actually hurt anything, and they
1980 * are place holders for what the quota code actually needs.
1981 */
1982 out_bad_inode: 2142 out_bad_inode:
1983 /* Invalidate the object, nothing was inserted yet */ 2143 /* Invalidate the object, nothing was inserted yet */
1984 INODE_PKEY(inode)->k_objectid = 0; 2144 INODE_PKEY(inode)->k_objectid = 0;
@@ -1990,7 +2150,10 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
1990 2150
1991 out_end_trans: 2151 out_end_trans:
1992 journal_end(th, th->t_super, th->t_blocks_allocated); 2152 journal_end(th, th->t_super, th->t_blocks_allocated);
1993 /* Drop can be outside and it needs more credits so it's better to have it outside */ 2153 /*
2154 * Drop can be outside and it needs more credits so it's better
2155 * to have it outside
2156 */
1994 depth = reiserfs_write_unlock_nested(inode->i_sb); 2157 depth = reiserfs_write_unlock_nested(inode->i_sb);
1995 dquot_drop(inode); 2158 dquot_drop(inode);
1996 reiserfs_write_lock_nested(inode->i_sb, depth); 2159 reiserfs_write_lock_nested(inode->i_sb, depth);
@@ -2006,25 +2169,26 @@ int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
2006} 2169}
2007 2170
2008/* 2171/*
2009** finds the tail page in the page cache, 2172 * finds the tail page in the page cache,
2010** reads the last block in. 2173 * reads the last block in.
2011** 2174 *
2012** On success, page_result is set to a locked, pinned page, and bh_result 2175 * On success, page_result is set to a locked, pinned page, and bh_result
2013** is set to an up to date buffer for the last block in the file. returns 0. 2176 * is set to an up to date buffer for the last block in the file. returns 0.
2014** 2177 *
2015** tail conversion is not done, so bh_result might not be valid for writing 2178 * tail conversion is not done, so bh_result might not be valid for writing
2016** check buffer_mapped(bh_result) and bh_result->b_blocknr != 0 before 2179 * check buffer_mapped(bh_result) and bh_result->b_blocknr != 0 before
2017** trying to write the block. 2180 * trying to write the block.
2018** 2181 *
2019** on failure, nonzero is returned, page_result and bh_result are untouched. 2182 * on failure, nonzero is returned, page_result and bh_result are untouched.
2020*/ 2183 */
2021static int grab_tail_page(struct inode *inode, 2184static int grab_tail_page(struct inode *inode,
2022 struct page **page_result, 2185 struct page **page_result,
2023 struct buffer_head **bh_result) 2186 struct buffer_head **bh_result)
2024{ 2187{
2025 2188
2026 /* we want the page with the last byte in the file, 2189 /*
2027 ** not the page that will hold the next byte for appending 2190 * we want the page with the last byte in the file,
2191 * not the page that will hold the next byte for appending
2028 */ 2192 */
2029 unsigned long index = (inode->i_size - 1) >> PAGE_CACHE_SHIFT; 2193 unsigned long index = (inode->i_size - 1) >> PAGE_CACHE_SHIFT;
2030 unsigned long pos = 0; 2194 unsigned long pos = 0;
@@ -2036,10 +2200,11 @@ static int grab_tail_page(struct inode *inode,
2036 struct page *page; 2200 struct page *page;
2037 int error; 2201 int error;
2038 2202
2039 /* we know that we are only called with inode->i_size > 0. 2203 /*
2040 ** we also know that a file tail can never be as big as a block 2204 * we know that we are only called with inode->i_size > 0.
2041 ** If i_size % blocksize == 0, our file is currently block aligned 2205 * we also know that a file tail can never be as big as a block
2042 ** and it won't need converting or zeroing after a truncate. 2206 * If i_size % blocksize == 0, our file is currently block aligned
2207 * and it won't need converting or zeroing after a truncate.
2043 */ 2208 */
2044 if ((offset & (blocksize - 1)) == 0) { 2209 if ((offset & (blocksize - 1)) == 0) {
2045 return -ENOENT; 2210 return -ENOENT;
@@ -2068,10 +2233,11 @@ static int grab_tail_page(struct inode *inode,
2068 } while (bh != head); 2233 } while (bh != head);
2069 2234
2070 if (!buffer_uptodate(bh)) { 2235 if (!buffer_uptodate(bh)) {
2071 /* note, this should never happen, prepare_write should 2236 /*
2072 ** be taking care of this for us. If the buffer isn't up to date, 2237 * note, this should never happen, prepare_write should be
2073 ** I've screwed up the code to find the buffer, or the code to 2238 * taking care of this for us. If the buffer isn't up to
2074 ** call prepare_write 2239 * date, I've screwed up the code to find the buffer, or the
2240 * code to call prepare_write
2075 */ 2241 */
2076 reiserfs_error(inode->i_sb, "clm-6000", 2242 reiserfs_error(inode->i_sb, "clm-6000",
2077 "error reading block %lu", bh->b_blocknr); 2243 "error reading block %lu", bh->b_blocknr);
@@ -2091,11 +2257,11 @@ static int grab_tail_page(struct inode *inode,
2091} 2257}
2092 2258
2093/* 2259/*
2094** vfs version of truncate file. Must NOT be called with 2260 * vfs version of truncate file. Must NOT be called with
2095** a transaction already started. 2261 * a transaction already started.
2096** 2262 *
2097** some code taken from block_truncate_page 2263 * some code taken from block_truncate_page
2098*/ 2264 */
2099int reiserfs_truncate_file(struct inode *inode, int update_timestamps) 2265int reiserfs_truncate_file(struct inode *inode, int update_timestamps)
2100{ 2266{
2101 struct reiserfs_transaction_handle th; 2267 struct reiserfs_transaction_handle th;
@@ -2113,9 +2279,11 @@ int reiserfs_truncate_file(struct inode *inode, int update_timestamps)
2113 if (inode->i_size > 0) { 2279 if (inode->i_size > 0) {
2114 error = grab_tail_page(inode, &page, &bh); 2280 error = grab_tail_page(inode, &page, &bh);
2115 if (error) { 2281 if (error) {
2116 // -ENOENT means we truncated past the end of the file, 2282 /*
2117 // and get_block_create_0 could not find a block to read in, 2283 * -ENOENT means we truncated past the end of the
2118 // which is ok. 2284 * file, and get_block_create_0 could not find a
2285 * block to read in, which is ok.
2286 */
2119 if (error != -ENOENT) 2287 if (error != -ENOENT)
2120 reiserfs_error(inode->i_sb, "clm-6001", 2288 reiserfs_error(inode->i_sb, "clm-6001",
2121 "grab_tail_page failed %d", 2289 "grab_tail_page failed %d",
@@ -2125,25 +2293,30 @@ int reiserfs_truncate_file(struct inode *inode, int update_timestamps)
2125 } 2293 }
2126 } 2294 }
2127 2295
2128 /* so, if page != NULL, we have a buffer head for the offset at 2296 /*
2129 ** the end of the file. if the bh is mapped, and bh->b_blocknr != 0, 2297 * so, if page != NULL, we have a buffer head for the offset at
2130 ** then we have an unformatted node. Otherwise, we have a direct item, 2298 * the end of the file. if the bh is mapped, and bh->b_blocknr != 0,
2131 ** and no zeroing is required on disk. We zero after the truncate, 2299 * then we have an unformatted node. Otherwise, we have a direct item,
2132 ** because the truncate might pack the item anyway 2300 * and no zeroing is required on disk. We zero after the truncate,
2133 ** (it will unmap bh if it packs). 2301 * because the truncate might pack the item anyway
2302 * (it will unmap bh if it packs).
2303 *
2304 * it is enough to reserve space in transaction for 2 balancings:
2305 * one for "save" link adding and another for the first
2306 * cut_from_item. 1 is for update_sd
2134 */ 2307 */
2135 /* it is enough to reserve space in transaction for 2 balancings:
2136 one for "save" link adding and another for the first
2137 cut_from_item. 1 is for update_sd */
2138 error = journal_begin(&th, inode->i_sb, 2308 error = journal_begin(&th, inode->i_sb,
2139 JOURNAL_PER_BALANCE_CNT * 2 + 1); 2309 JOURNAL_PER_BALANCE_CNT * 2 + 1);
2140 if (error) 2310 if (error)
2141 goto out; 2311 goto out;
2142 reiserfs_update_inode_transaction(inode); 2312 reiserfs_update_inode_transaction(inode);
2143 if (update_timestamps) 2313 if (update_timestamps)
2144 /* we are doing real truncate: if the system crashes before the last 2314 /*
2145 transaction of truncating gets committed - on reboot the file 2315 * we are doing real truncate: if the system crashes
2146 either appears truncated properly or not truncated at all */ 2316 * before the last transaction of truncating gets committed
2317 * - on reboot the file either appears truncated properly
2318 * or not truncated at all
2319 */
2147 add_save_link(&th, inode, 1); 2320 add_save_link(&th, inode, 1);
2148 err2 = reiserfs_do_truncate(&th, inode, page, update_timestamps); 2321 err2 = reiserfs_do_truncate(&th, inode, page, update_timestamps);
2149 error = 2322 error =
@@ -2212,7 +2385,10 @@ static int map_block_for_writepage(struct inode *inode,
2212 int copy_size; 2385 int copy_size;
2213 int trans_running = 0; 2386 int trans_running = 0;
2214 2387
2215 /* catch places below that try to log something without starting a trans */ 2388 /*
2389 * catch places below that try to log something without
2390 * starting a trans
2391 */
2216 th.t_trans_id = 0; 2392 th.t_trans_id = 0;
2217 2393
2218 if (!buffer_uptodate(bh_result)) { 2394 if (!buffer_uptodate(bh_result)) {
@@ -2331,7 +2507,8 @@ static int map_block_for_writepage(struct inode *inode,
2331 kunmap(bh_result->b_page); 2507 kunmap(bh_result->b_page);
2332 2508
2333 if (!retval && buffer_mapped(bh_result) && bh_result->b_blocknr == 0) { 2509 if (!retval && buffer_mapped(bh_result) && bh_result->b_blocknr == 0) {
2334 /* we've copied data from the page into the direct item, so the 2510 /*
2511 * we've copied data from the page into the direct item, so the
2335 * buffer in the page is now clean, mark it to reflect that. 2512 * buffer in the page is now clean, mark it to reflect that.
2336 */ 2513 */
2337 lock_buffer(bh_result); 2514 lock_buffer(bh_result);
@@ -2370,7 +2547,8 @@ static int reiserfs_write_full_page(struct page *page,
2370 return 0; 2547 return 0;
2371 } 2548 }
2372 2549
2373 /* The page dirty bit is cleared before writepage is called, which 2550 /*
2551 * The page dirty bit is cleared before writepage is called, which
2374 * means we have to tell create_empty_buffers to make dirty buffers 2552 * means we have to tell create_empty_buffers to make dirty buffers
2375 * The page really should be up to date at this point, so tossing 2553 * The page really should be up to date at this point, so tossing
2376 * in the BH_Uptodate is just a sanity check. 2554 * in the BH_Uptodate is just a sanity check.
@@ -2381,8 +2559,9 @@ static int reiserfs_write_full_page(struct page *page,
2381 } 2559 }
2382 head = page_buffers(page); 2560 head = page_buffers(page);
2383 2561
2384 /* last page in the file, zero out any contents past the 2562 /*
2385 ** last byte in the file 2563 * last page in the file, zero out any contents past the
2564 * last byte in the file
2386 */ 2565 */
2387 if (page->index >= end_index) { 2566 if (page->index >= end_index) {
2388 unsigned last_offset; 2567 unsigned last_offset;
@@ -2412,7 +2591,8 @@ static int reiserfs_write_full_page(struct page *page,
2412 (!buffer_mapped(bh) || (buffer_mapped(bh) 2591 (!buffer_mapped(bh) || (buffer_mapped(bh)
2413 && bh->b_blocknr == 2592 && bh->b_blocknr ==
2414 0))) { 2593 0))) {
2415 /* not mapped yet, or it points to a direct item, search 2594 /*
2595 * not mapped yet, or it points to a direct item, search
2416 * the btree for the mapping info, and log any direct 2596 * the btree for the mapping info, and log any direct
2417 * items found 2597 * items found
2418 */ 2598 */
@@ -2453,7 +2633,8 @@ static int reiserfs_write_full_page(struct page *page,
2453 journal_mark_dirty(&th, s, bh); 2633 journal_mark_dirty(&th, s, bh);
2454 continue; 2634 continue;
2455 } 2635 }
2456 /* from this point on, we know the buffer is mapped to a 2636 /*
2637 * from this point on, we know the buffer is mapped to a
2457 * real block and not a direct item 2638 * real block and not a direct item
2458 */ 2639 */
2459 if (wbc->sync_mode != WB_SYNC_NONE) { 2640 if (wbc->sync_mode != WB_SYNC_NONE) {
@@ -2520,7 +2701,8 @@ static int reiserfs_write_full_page(struct page *page,
2520 return error; 2701 return error;
2521 2702
2522 fail: 2703 fail:
2523 /* catches various errors, we need to make sure any valid dirty blocks 2704 /*
2705 * catches various errors, we need to make sure any valid dirty blocks
2524 * get to the media. The page is currently locked and not marked for 2706 * get to the media. The page is currently locked and not marked for
2525 * writeback 2707 * writeback
2526 */ 2708 */
@@ -2533,8 +2715,8 @@ static int reiserfs_write_full_page(struct page *page,
2533 mark_buffer_async_write(bh); 2715 mark_buffer_async_write(bh);
2534 } else { 2716 } else {
2535 /* 2717 /*
2536 * clear any dirty bits that might have come from getting 2718 * clear any dirty bits that might have come from
2537 * attached to a dirty page 2719 * getting attached to a dirty page
2538 */ 2720 */
2539 clear_buffer_dirty(bh); 2721 clear_buffer_dirty(bh);
2540 } 2722 }
@@ -2614,15 +2796,18 @@ static int reiserfs_write_begin(struct file *file,
2614 ret = __block_write_begin(page, pos, len, reiserfs_get_block); 2796 ret = __block_write_begin(page, pos, len, reiserfs_get_block);
2615 if (ret && reiserfs_transaction_running(inode->i_sb)) { 2797 if (ret && reiserfs_transaction_running(inode->i_sb)) {
2616 struct reiserfs_transaction_handle *th = current->journal_info; 2798 struct reiserfs_transaction_handle *th = current->journal_info;
2617 /* this gets a little ugly. If reiserfs_get_block returned an 2799 /*
2618 * error and left a transacstion running, we've got to close it, 2800 * this gets a little ugly. If reiserfs_get_block returned an
2619 * and we've got to free handle if it was a persistent transaction. 2801 * error and left a transacstion running, we've got to close
2802 * it, and we've got to free handle if it was a persistent
2803 * transaction.
2620 * 2804 *
2621 * But, if we had nested into an existing transaction, we need 2805 * But, if we had nested into an existing transaction, we need
2622 * to just drop the ref count on the handle. 2806 * to just drop the ref count on the handle.
2623 * 2807 *
2624 * If old_ref == 0, the transaction is from reiserfs_get_block, 2808 * If old_ref == 0, the transaction is from reiserfs_get_block,
2625 * and it was a persistent trans. Otherwise, it was nested above. 2809 * and it was a persistent trans. Otherwise, it was nested
2810 * above.
2626 */ 2811 */
2627 if (th->t_refcount > old_ref) { 2812 if (th->t_refcount > old_ref) {
2628 if (old_ref) 2813 if (old_ref)
@@ -2671,15 +2856,18 @@ int __reiserfs_write_begin(struct page *page, unsigned from, unsigned len)
2671 ret = __block_write_begin(page, from, len, reiserfs_get_block); 2856 ret = __block_write_begin(page, from, len, reiserfs_get_block);
2672 if (ret && reiserfs_transaction_running(inode->i_sb)) { 2857 if (ret && reiserfs_transaction_running(inode->i_sb)) {
2673 struct reiserfs_transaction_handle *th = current->journal_info; 2858 struct reiserfs_transaction_handle *th = current->journal_info;
2674 /* this gets a little ugly. If reiserfs_get_block returned an 2859 /*
2675 * error and left a transacstion running, we've got to close it, 2860 * this gets a little ugly. If reiserfs_get_block returned an
2676 * and we've got to free handle if it was a persistent transaction. 2861 * error and left a transacstion running, we've got to close
2862 * it, and we've got to free handle if it was a persistent
2863 * transaction.
2677 * 2864 *
2678 * But, if we had nested into an existing transaction, we need 2865 * But, if we had nested into an existing transaction, we need
2679 * to just drop the ref count on the handle. 2866 * to just drop the ref count on the handle.
2680 * 2867 *
2681 * If old_ref == 0, the transaction is from reiserfs_get_block, 2868 * If old_ref == 0, the transaction is from reiserfs_get_block,
2682 * and it was a persistent trans. Otherwise, it was nested above. 2869 * and it was a persistent trans. Otherwise, it was nested
2870 * above.
2683 */ 2871 */
2684 if (th->t_refcount > old_ref) { 2872 if (th->t_refcount > old_ref) {
2685 if (old_ref) 2873 if (old_ref)
@@ -2734,17 +2922,20 @@ static int reiserfs_write_end(struct file *file, struct address_space *mapping,
2734 2922
2735 reiserfs_commit_page(inode, page, start, start + copied); 2923 reiserfs_commit_page(inode, page, start, start + copied);
2736 2924
2737 /* generic_commit_write does this for us, but does not update the 2925 /*
2738 ** transaction tracking stuff when the size changes. So, we have 2926 * generic_commit_write does this for us, but does not update the
2739 ** to do the i_size updates here. 2927 * transaction tracking stuff when the size changes. So, we have
2928 * to do the i_size updates here.
2740 */ 2929 */
2741 if (pos + copied > inode->i_size) { 2930 if (pos + copied > inode->i_size) {
2742 struct reiserfs_transaction_handle myth; 2931 struct reiserfs_transaction_handle myth;
2743 reiserfs_write_lock(inode->i_sb); 2932 reiserfs_write_lock(inode->i_sb);
2744 locked = true; 2933 locked = true;
2745 /* If the file have grown beyond the border where it 2934 /*
2746 can have a tail, unmark it as needing a tail 2935 * If the file have grown beyond the border where it
2747 packing */ 2936 * can have a tail, unmark it as needing a tail
2937 * packing
2938 */
2748 if ((have_large_tails(inode->i_sb) 2939 if ((have_large_tails(inode->i_sb)
2749 && inode->i_size > i_block_size(inode) * 4) 2940 && inode->i_size > i_block_size(inode) * 4)
2750 || (have_small_tails(inode->i_sb) 2941 || (have_small_tails(inode->i_sb)
@@ -2759,8 +2950,8 @@ static int reiserfs_write_end(struct file *file, struct address_space *mapping,
2759 inode->i_size = pos + copied; 2950 inode->i_size = pos + copied;
2760 /* 2951 /*
2761 * this will just nest into our transaction. It's important 2952 * this will just nest into our transaction. It's important
2762 * to use mark_inode_dirty so the inode gets pushed around on the 2953 * to use mark_inode_dirty so the inode gets pushed around on
2763 * dirty lists, and so that O_SYNC works as expected 2954 * the dirty lists, and so that O_SYNC works as expected
2764 */ 2955 */
2765 mark_inode_dirty(inode); 2956 mark_inode_dirty(inode);
2766 reiserfs_update_sd(&myth, inode); 2957 reiserfs_update_sd(&myth, inode);
@@ -2822,15 +3013,18 @@ int reiserfs_commit_write(struct file *f, struct page *page,
2822 } 3013 }
2823 reiserfs_commit_page(inode, page, from, to); 3014 reiserfs_commit_page(inode, page, from, to);
2824 3015
2825 /* generic_commit_write does this for us, but does not update the 3016 /*
2826 ** transaction tracking stuff when the size changes. So, we have 3017 * generic_commit_write does this for us, but does not update the
2827 ** to do the i_size updates here. 3018 * transaction tracking stuff when the size changes. So, we have
3019 * to do the i_size updates here.
2828 */ 3020 */
2829 if (pos > inode->i_size) { 3021 if (pos > inode->i_size) {
2830 struct reiserfs_transaction_handle myth; 3022 struct reiserfs_transaction_handle myth;
2831 /* If the file have grown beyond the border where it 3023 /*
2832 can have a tail, unmark it as needing a tail 3024 * If the file have grown beyond the border where it
2833 packing */ 3025 * can have a tail, unmark it as needing a tail
3026 * packing
3027 */
2834 if ((have_large_tails(inode->i_sb) 3028 if ((have_large_tails(inode->i_sb)
2835 && inode->i_size > i_block_size(inode) * 4) 3029 && inode->i_size > i_block_size(inode) * 4)
2836 || (have_small_tails(inode->i_sb) 3030 || (have_small_tails(inode->i_sb)
@@ -2845,8 +3039,8 @@ int reiserfs_commit_write(struct file *f, struct page *page,
2845 inode->i_size = pos; 3039 inode->i_size = pos;
2846 /* 3040 /*
2847 * this will just nest into our transaction. It's important 3041 * this will just nest into our transaction. It's important
2848 * to use mark_inode_dirty so the inode gets pushed around on the 3042 * to use mark_inode_dirty so the inode gets pushed around
2849 * dirty lists, and so that O_SYNC works as expected 3043 * on the dirty lists, and so that O_SYNC works as expected
2850 */ 3044 */
2851 mark_inode_dirty(inode); 3045 mark_inode_dirty(inode);
2852 reiserfs_update_sd(&myth, inode); 3046 reiserfs_update_sd(&myth, inode);
@@ -2924,9 +3118,10 @@ void i_attrs_to_sd_attrs(struct inode *inode, __u16 * sd_attrs)
2924 } 3118 }
2925} 3119}
2926 3120
2927/* decide if this buffer needs to stay around for data logging or ordered 3121/*
2928** write purposes 3122 * decide if this buffer needs to stay around for data logging or ordered
2929*/ 3123 * write purposes
3124 */
2930static int invalidatepage_can_drop(struct inode *inode, struct buffer_head *bh) 3125static int invalidatepage_can_drop(struct inode *inode, struct buffer_head *bh)
2931{ 3126{
2932 int ret = 1; 3127 int ret = 1;
@@ -2937,7 +3132,8 @@ static int invalidatepage_can_drop(struct inode *inode, struct buffer_head *bh)
2937 if (!buffer_mapped(bh)) { 3132 if (!buffer_mapped(bh)) {
2938 goto free_jh; 3133 goto free_jh;
2939 } 3134 }
2940 /* the page is locked, and the only places that log a data buffer 3135 /*
3136 * the page is locked, and the only places that log a data buffer
2941 * also lock the page. 3137 * also lock the page.
2942 */ 3138 */
2943 if (reiserfs_file_data_log(inode)) { 3139 if (reiserfs_file_data_log(inode)) {
@@ -2952,7 +3148,8 @@ static int invalidatepage_can_drop(struct inode *inode, struct buffer_head *bh)
2952 struct reiserfs_journal_list *jl; 3148 struct reiserfs_journal_list *jl;
2953 struct reiserfs_jh *jh = bh->b_private; 3149 struct reiserfs_jh *jh = bh->b_private;
2954 3150
2955 /* why is this safe? 3151 /*
3152 * why is this safe?
2956 * reiserfs_setattr updates i_size in the on disk 3153 * reiserfs_setattr updates i_size in the on disk
2957 * stat data before allowing vmtruncate to be called. 3154 * stat data before allowing vmtruncate to be called.
2958 * 3155 *
@@ -3080,8 +3277,10 @@ static int reiserfs_releasepage(struct page *page, gfp_t unused_gfp_flags)
3080 return ret; 3277 return ret;
3081} 3278}
3082 3279
3083/* We thank Mingming Cao for helping us understand in great detail what 3280/*
3084 to do in this section of the code. */ 3281 * We thank Mingming Cao for helping us understand in great detail what
3282 * to do in this section of the code.
3283 */
3085static ssize_t reiserfs_direct_IO(int rw, struct kiocb *iocb, 3284static ssize_t reiserfs_direct_IO(int rw, struct kiocb *iocb,
3086 const struct iovec *iov, loff_t offset, 3285 const struct iovec *iov, loff_t offset,
3087 unsigned long nr_segs) 3286 unsigned long nr_segs)
@@ -3127,8 +3326,9 @@ int reiserfs_setattr(struct dentry *dentry, struct iattr *attr)
3127 dquot_initialize(inode); 3326 dquot_initialize(inode);
3128 reiserfs_write_lock(inode->i_sb); 3327 reiserfs_write_lock(inode->i_sb);
3129 if (attr->ia_valid & ATTR_SIZE) { 3328 if (attr->ia_valid & ATTR_SIZE) {
3130 /* version 2 items will be caught by the s_maxbytes check 3329 /*
3131 ** done for us in vmtruncate 3330 * version 2 items will be caught by the s_maxbytes check
3331 * done for us in vmtruncate
3132 */ 3332 */
3133 if (get_inode_item_key_version(inode) == KEY_FORMAT_3_5 && 3333 if (get_inode_item_key_version(inode) == KEY_FORMAT_3_5 &&
3134 attr->ia_size > MAX_NON_LFS) { 3334 attr->ia_size > MAX_NON_LFS) {
@@ -3189,7 +3389,10 @@ int reiserfs_setattr(struct dentry *dentry, struct iattr *attr)
3189 if (error) 3389 if (error)
3190 return error; 3390 return error;
3191 3391
3192 /* (user+group)*(old+new) structure - we count quota info and , inode write (sb, inode) */ 3392 /*
3393 * (user+group)*(old+new) structure - we count quota
3394 * info and , inode write (sb, inode)
3395 */
3193 reiserfs_write_lock(inode->i_sb); 3396 reiserfs_write_lock(inode->i_sb);
3194 error = journal_begin(&th, inode->i_sb, jbegin_count); 3397 error = journal_begin(&th, inode->i_sb, jbegin_count);
3195 reiserfs_write_unlock(inode->i_sb); 3398 reiserfs_write_unlock(inode->i_sb);
@@ -3203,8 +3406,10 @@ int reiserfs_setattr(struct dentry *dentry, struct iattr *attr)
3203 goto out; 3406 goto out;
3204 } 3407 }
3205 3408
3206 /* Update corresponding info in inode so that everything is in 3409 /*
3207 * one transaction */ 3410 * Update corresponding info in inode so that everything
3411 * is in one transaction
3412 */
3208 if (attr->ia_valid & ATTR_UID) 3413 if (attr->ia_valid & ATTR_UID)
3209 inode->i_uid = attr->ia_uid; 3414 inode->i_uid = attr->ia_uid;
3210 if (attr->ia_valid & ATTR_GID) 3415 if (attr->ia_valid & ATTR_GID)