vserver 1.9.5.x5
[linux-2.6.git] / fs / reiserfs / inode.c
1 /*
2  * Copyright 2000 by Hans Reiser, licensing governed by reiserfs/README
3  */
4
5 #include <linux/config.h>
6 #include <linux/time.h>
7 #include <linux/fs.h>
8 #include <linux/reiserfs_fs.h>
9 #include <linux/reiserfs_acl.h>
10 #include <linux/reiserfs_xattr.h>
11 #include <linux/smp_lock.h>
12 #include <linux/pagemap.h>
13 #include <linux/highmem.h>
14 #include <asm/uaccess.h>
15 #include <asm/unaligned.h>
16 #include <linux/buffer_head.h>
17 #include <linux/mpage.h>
18 #include <linux/writeback.h>
19 #include <linux/quotaops.h>
20 #include <linux/vserver/xid.h>
21
22 extern int reiserfs_default_io_size; /* default io size devuned in super.c */
23
24 static int reiserfs_commit_write(struct file *f, struct page *page,
25                                  unsigned from, unsigned to);
26 static int reiserfs_prepare_write(struct file *f, struct page *page,
27                                   unsigned from, unsigned to);
28
29 void reiserfs_delete_inode (struct inode * inode)
30 {
31     /* We need blocks for transaction + (user+group) quota update (possibly delete) */
32     int jbegin_count = JOURNAL_PER_BALANCE_CNT * 2 + 2 * REISERFS_QUOTA_INIT_BLOCKS;
33     struct reiserfs_transaction_handle th ;
34   
35     reiserfs_write_lock(inode->i_sb);
36
37     /* The = 0 happens when we abort creating a new inode for some reason like lack of space.. */
38     if (!(inode->i_state & I_NEW) && INODE_PKEY(inode)->k_objectid != 0) { /* also handles bad_inode case */
39         down (&inode->i_sem); 
40
41         reiserfs_delete_xattrs (inode);
42
43         if (journal_begin(&th, inode->i_sb, jbegin_count)) {
44             up (&inode->i_sem);
45             goto out;
46         }
47         reiserfs_update_inode_transaction(inode) ;
48
49         if (reiserfs_delete_object (&th, inode)) {
50             up (&inode->i_sem);
51             goto out;
52         }
53
54         /* Do quota update inside a transaction for journaled quotas. We must do that
55          * after delete_object so that quota updates go into the same transaction as
56          * stat data deletion */
57         DQUOT_FREE_INODE(inode);
58
59         if (journal_end(&th, inode->i_sb, jbegin_count)) {
60             up (&inode->i_sem);
61             goto out;
62         }
63
64         up (&inode->i_sem);
65
66         /* all items of file are deleted, so we can remove "save" link */
67         remove_save_link (inode, 0/* not truncate */); /* we can't do anything
68                                                         * about an error here */
69     } else {
70         /* no object items are in the tree */
71         ;
72     }
73 out:
74     clear_inode (inode); /* note this must go after the journal_end to prevent deadlock */
75     inode->i_blocks = 0;
76     reiserfs_write_unlock(inode->i_sb);
77 }
78
79 static void _make_cpu_key (struct cpu_key * key, int version, __u32 dirid, __u32 objectid, 
80                loff_t offset, int type, int length )
81 {
82     key->version = version;
83
84     key->on_disk_key.k_dir_id = dirid;
85     key->on_disk_key.k_objectid = objectid;
86     set_cpu_key_k_offset (key, offset);
87     set_cpu_key_k_type (key, type);  
88     key->key_length = length;
89 }
90
91
92 /* take base of inode_key (it comes from inode always) (dirid, objectid) and version from an inode, set
93    offset and type of key */
94 void make_cpu_key (struct cpu_key * key, struct inode * inode, loff_t offset,
95               int type, int length )
96 {
97   _make_cpu_key (key, get_inode_item_key_version (inode), le32_to_cpu (INODE_PKEY (inode)->k_dir_id),
98                  le32_to_cpu (INODE_PKEY (inode)->k_objectid), 
99                  offset, type, length);
100 }
101
102
103 //
104 // when key is 0, do not set version and short key
105 //
106 inline void make_le_item_head (struct item_head * ih, const struct cpu_key * key,
107                                int version,
108                                loff_t offset, int type, int length, 
109                                int entry_count/*or ih_free_space*/)
110 {
111     if (key) {
112         ih->ih_key.k_dir_id = cpu_to_le32 (key->on_disk_key.k_dir_id);
113         ih->ih_key.k_objectid = cpu_to_le32 (key->on_disk_key.k_objectid);
114     }
115     put_ih_version( ih, version );
116     set_le_ih_k_offset (ih, offset);
117     set_le_ih_k_type (ih, type);
118     put_ih_item_len( ih, length );
119     /*    set_ih_free_space (ih, 0);*/
120     // for directory items it is entry count, for directs and stat
121     // datas - 0xffff, for indirects - 0
122     put_ih_entry_count( ih, entry_count );
123 }
124
125 //
126 // FIXME: we might cache recently accessed indirect item
127
128 // Ugh.  Not too eager for that....
129 //  I cut the code until such time as I see a convincing argument (benchmark).
130 // I don't want a bloated inode struct..., and I don't like code complexity....
131
132 /* cutting the code is fine, since it really isn't in use yet and is easy
133 ** to add back in.  But, Vladimir has a really good idea here.  Think
134 ** about what happens for reading a file.  For each page,
135 ** The VFS layer calls reiserfs_readpage, who searches the tree to find
136 ** an indirect item.  This indirect item has X number of pointers, where
137 ** X is a big number if we've done the block allocation right.  But,
138 ** we only use one or two of these pointers during each call to readpage,
139 ** needlessly researching again later on.
140 **
141 ** The size of the cache could be dynamic based on the size of the file.
142 **
143 ** I'd also like to see us cache the location the stat data item, since
144 ** we are needlessly researching for that frequently.
145 **
146 ** --chris
147 */
148
149 /* If this page has a file tail in it, and
150 ** it was read in by get_block_create_0, the page data is valid,
151 ** but tail is still sitting in a direct item, and we can't write to
152 ** it.  So, look through this page, and check all the mapped buffers
153 ** to make sure they have valid block numbers.  Any that don't need
154 ** to be unmapped, so that block_prepare_write will correctly call
155 ** reiserfs_get_block to convert the tail into an unformatted node
156 */
157 static inline void fix_tail_page_for_writing(struct page *page) {
158     struct buffer_head *head, *next, *bh ;
159
160     if (page && page_has_buffers(page)) {
161         head = page_buffers(page) ;
162         bh = head ;
163         do {
164             next = bh->b_this_page ;
165             if (buffer_mapped(bh) && bh->b_blocknr == 0) {
166                 reiserfs_unmap_buffer(bh) ;
167             }
168             bh = next ;
169         } while (bh != head) ;
170     }
171 }
172
173 /* reiserfs_get_block does not need to allocate a block only if it has been
174    done already or non-hole position has been found in the indirect item */
175 static inline int allocation_needed (int retval, b_blocknr_t allocated, 
176                                      struct item_head * ih,
177                                      __u32 * item, int pos_in_item)
178 {
179   if (allocated)
180          return 0;
181   if (retval == POSITION_FOUND && is_indirect_le_ih (ih) && 
182       get_block_num(item, pos_in_item))
183          return 0;
184   return 1;
185 }
186
187 static inline int indirect_item_found (int retval, struct item_head * ih)
188 {
189   return (retval == POSITION_FOUND) && is_indirect_le_ih (ih);
190 }
191
192
193 static inline void set_block_dev_mapped (struct buffer_head * bh, 
194                                          b_blocknr_t block, struct inode * inode)
195 {
196         map_bh(bh, inode->i_sb, block);
197 }
198
199
200 //
201 // files which were created in the earlier version can not be longer,
202 // than 2 gb
203 //
204 static int file_capable (struct inode * inode, long block)
205 {
206     if (get_inode_item_key_version (inode) != KEY_FORMAT_3_5 || // it is new file.
207         block < (1 << (31 - inode->i_sb->s_blocksize_bits))) // old file, but 'block' is inside of 2gb
208         return 1;
209
210     return 0;
211 }
212
213 /*static*/ int restart_transaction(struct reiserfs_transaction_handle *th,
214                                 struct inode *inode, struct path *path) {
215   struct super_block *s = th->t_super ;
216   int len = th->t_blocks_allocated ;
217   int err;
218
219   BUG_ON (!th->t_trans_id);
220   BUG_ON (!th->t_refcount);
221
222   /* we cannot restart while nested */
223   if (th->t_refcount > 1) {
224       return 0  ;
225   }
226   pathrelse(path) ;
227   reiserfs_update_sd(th, inode) ;
228   err = journal_end(th, s, len) ;
229   if (!err) {
230       err = journal_begin(th, s, JOURNAL_PER_BALANCE_CNT * 6) ;
231       if (!err)
232         reiserfs_update_inode_transaction(inode) ;
233   }
234   return err;
235 }
236
237 // it is called by get_block when create == 0. Returns block number
238 // for 'block'-th logical block of file. When it hits direct item it
239 // returns 0 (being called from bmap) or read direct item into piece
240 // of page (bh_result)
241
242 // Please improve the english/clarity in the comment above, as it is
243 // hard to understand.
244
245 static int _get_block_create_0 (struct inode * inode, long block,
246                                  struct buffer_head * bh_result,
247                                  int args)
248 {
249     INITIALIZE_PATH (path);
250     struct cpu_key key;
251     struct buffer_head * bh;
252     struct item_head * ih, tmp_ih;
253     int fs_gen ;
254     int blocknr;
255     char * p = NULL;
256     int chars;
257     int ret ;
258     int done = 0 ;
259     unsigned long offset ;
260
261     // prepare the key to look for the 'block'-th block of file
262     make_cpu_key (&key, inode,
263                   (loff_t)block * inode->i_sb->s_blocksize + 1, TYPE_ANY, 3);
264
265 research:
266     if (search_for_position_by_key (inode->i_sb, &key, &path) != POSITION_FOUND) {
267         pathrelse (&path);
268         if (p)
269             kunmap(bh_result->b_page) ;
270         // We do not return -ENOENT if there is a hole but page is uptodate, because it means
271         // That there is some MMAPED data associated with it that is yet to be written to disk.
272         if ((args & GET_BLOCK_NO_HOLE) && !PageUptodate(bh_result->b_page) ) {
273             return -ENOENT ;
274         }
275         return 0 ;
276     }
277     
278     //
279     bh = get_last_bh (&path);
280     ih = get_ih (&path);
281     if (is_indirect_le_ih (ih)) {
282         __u32 * ind_item = (__u32 *)B_I_PITEM (bh, ih);
283         
284         /* FIXME: here we could cache indirect item or part of it in
285            the inode to avoid search_by_key in case of subsequent
286            access to file */
287         blocknr = get_block_num(ind_item, path.pos_in_item) ;
288         ret = 0 ;
289         if (blocknr) {
290             map_bh(bh_result, inode->i_sb, blocknr);
291             if (path.pos_in_item == ((ih_item_len(ih) / UNFM_P_SIZE) - 1)) {
292                 set_buffer_boundary(bh_result);
293             }
294         } else 
295             // We do not return -ENOENT if there is a hole but page is uptodate, because it means
296             // That there is some MMAPED data associated with it that is yet to  be written to disk.
297             if ((args & GET_BLOCK_NO_HOLE) && !PageUptodate(bh_result->b_page) ) {
298             ret = -ENOENT ;
299             }
300
301         pathrelse (&path);
302         if (p)
303             kunmap(bh_result->b_page) ;
304         return ret ;
305     }
306
307     // requested data are in direct item(s)
308     if (!(args & GET_BLOCK_READ_DIRECT)) {
309         // we are called by bmap. FIXME: we can not map block of file
310         // when it is stored in direct item(s)
311         pathrelse (&path);      
312         if (p)
313             kunmap(bh_result->b_page) ;
314         return -ENOENT;
315     }
316
317     /* if we've got a direct item, and the buffer or page was uptodate,
318     ** we don't want to pull data off disk again.  skip to the
319     ** end, where we map the buffer and return
320     */
321     if (buffer_uptodate(bh_result)) {
322         goto finished ;
323     } else 
324         /*
325         ** grab_tail_page can trigger calls to reiserfs_get_block on up to date
326         ** pages without any buffers.  If the page is up to date, we don't want
327         ** read old data off disk.  Set the up to date bit on the buffer instead
328         ** and jump to the end
329         */
330             if (!bh_result->b_page || PageUptodate(bh_result->b_page)) {
331                 set_buffer_uptodate(bh_result);
332                 goto finished ;
333     }
334
335     // read file tail into part of page
336     offset = (cpu_key_k_offset(&key) - 1) & (PAGE_CACHE_SIZE - 1) ;
337     fs_gen = get_generation(inode->i_sb) ;
338     copy_item_head (&tmp_ih, ih);
339
340     /* we only want to kmap if we are reading the tail into the page.
341     ** this is not the common case, so we don't kmap until we are
342     ** sure we need to.  But, this means the item might move if
343     ** kmap schedules
344     */
345     if (!p) {
346         p = (char *)kmap(bh_result->b_page) ;
347         if (fs_changed (fs_gen, inode->i_sb) && item_moved (&tmp_ih, &path)) {
348             goto research;
349         }
350     }
351     p += offset ;
352     memset (p, 0, inode->i_sb->s_blocksize);
353     do {
354         if (!is_direct_le_ih (ih)) {
355             BUG ();
356         }
357         /* make sure we don't read more bytes than actually exist in
358         ** the file.  This can happen in odd cases where i_size isn't
359         ** correct, and when direct item padding results in a few 
360         ** extra bytes at the end of the direct item
361         */
362         if ((le_ih_k_offset(ih) + path.pos_in_item) > inode->i_size)
363             break ;
364         if ((le_ih_k_offset(ih) - 1 + ih_item_len(ih)) > inode->i_size) {
365             chars = inode->i_size - (le_ih_k_offset(ih) - 1) - path.pos_in_item;
366             done = 1 ;
367         } else {
368             chars = ih_item_len(ih) - path.pos_in_item;
369         }
370         memcpy (p, B_I_PITEM (bh, ih) + path.pos_in_item, chars);
371
372         if (done) 
373             break ;
374
375         p += chars;
376
377         if (PATH_LAST_POSITION (&path) != (B_NR_ITEMS (bh) - 1))
378             // we done, if read direct item is not the last item of
379             // node FIXME: we could try to check right delimiting key
380             // to see whether direct item continues in the right
381             // neighbor or rely on i_size
382             break;
383
384         // update key to look for the next piece
385         set_cpu_key_k_offset (&key, cpu_key_k_offset (&key) + chars);
386         if (search_for_position_by_key (inode->i_sb, &key, &path) != POSITION_FOUND)
387             // we read something from tail, even if now we got IO_ERROR
388             break;
389         bh = get_last_bh (&path);
390         ih = get_ih (&path);
391     } while (1);
392
393     flush_dcache_page(bh_result->b_page) ;
394     kunmap(bh_result->b_page) ;
395
396 finished:
397     pathrelse (&path);
398     /* this buffer has valid data, but isn't valid for io.  mapping it to
399      * block #0 tells the rest of reiserfs it just has a tail in it
400      */
401     map_bh(bh_result, inode->i_sb, 0);
402     set_buffer_uptodate (bh_result);
403     return 0;
404 }
405
406
407 // this is called to create file map. So, _get_block_create_0 will not
408 // read direct item
409 static int reiserfs_bmap (struct inode * inode, sector_t block,
410                           struct buffer_head * bh_result, int create)
411 {
412     if (!file_capable (inode, block))
413         return -EFBIG;
414
415     reiserfs_write_lock(inode->i_sb);
416     /* do not read the direct item */
417     _get_block_create_0 (inode, block, bh_result, 0) ;
418     reiserfs_write_unlock(inode->i_sb);
419     return 0;
420 }
421
422 /* special version of get_block that is only used by grab_tail_page right
423 ** now.  It is sent to block_prepare_write, and when you try to get a
424 ** block past the end of the file (or a block from a hole) it returns
425 ** -ENOENT instead of a valid buffer.  block_prepare_write expects to
426 ** be able to do i/o on the buffers returned, unless an error value
427 ** is also returned.
428 ** 
429 ** So, this allows block_prepare_write to be used for reading a single block
430 ** in a page.  Where it does not produce a valid page for holes, or past the
431 ** end of the file.  This turns out to be exactly what we need for reading
432 ** tails for conversion.
433 **
434 ** The point of the wrapper is forcing a certain value for create, even
435 ** though the VFS layer is calling this function with create==1.  If you 
436 ** don't want to send create == GET_BLOCK_NO_HOLE to reiserfs_get_block, 
437 ** don't use this function.
438 */
439 static int reiserfs_get_block_create_0 (struct inode * inode, sector_t block,
440                         struct buffer_head * bh_result, int create) {
441     return reiserfs_get_block(inode, block, bh_result, GET_BLOCK_NO_HOLE) ;
442 }
443
444 /* This is special helper for reiserfs_get_block in case we are executing
445    direct_IO request. */
446 static int reiserfs_get_blocks_direct_io(struct inode *inode,
447                                          sector_t iblock,
448                                          unsigned long max_blocks,
449                                          struct buffer_head *bh_result,
450                                          int create)
451 {
452     int ret ;
453
454     bh_result->b_page = NULL;
455
456     /* We set the b_size before reiserfs_get_block call since it is
457        referenced in convert_tail_for_hole() that may be called from
458        reiserfs_get_block() */
459     bh_result->b_size = (1 << inode->i_blkbits);
460
461     ret = reiserfs_get_block(inode, iblock, bh_result,
462                              create | GET_BLOCK_NO_DANGLE) ;
463     if (ret)
464         goto out;
465
466     /* don't allow direct io onto tail pages */
467     if (buffer_mapped(bh_result) && bh_result->b_blocknr == 0) {
468         /* make sure future calls to the direct io funcs for this offset
469         ** in the file fail by unmapping the buffer
470         */
471         clear_buffer_mapped(bh_result);
472         ret = -EINVAL ;
473     }
474     /* Possible unpacked tail. Flush the data before pages have
475        disappeared */
476     if (REISERFS_I(inode)->i_flags & i_pack_on_close_mask) {
477         int err;
478         lock_kernel();
479         err = reiserfs_commit_for_inode(inode);
480         REISERFS_I(inode)->i_flags &= ~i_pack_on_close_mask;
481         unlock_kernel();
482         if (err < 0)
483             ret = err;
484     }
485 out:
486     return ret ;
487 }
488
489
490 /*
491 ** helper function for when reiserfs_get_block is called for a hole
492 ** but the file tail is still in a direct item
493 ** bh_result is the buffer head for the hole
494 ** tail_offset is the offset of the start of the tail in the file
495 **
496 ** This calls prepare_write, which will start a new transaction
497 ** you should not be in a transaction, or have any paths held when you
498 ** call this.
499 */
500 static int convert_tail_for_hole(struct inode *inode, 
501                                  struct buffer_head *bh_result,
502                                  loff_t tail_offset) {
503     unsigned long index ;
504     unsigned long tail_end ; 
505     unsigned long tail_start ;
506     struct page * tail_page ;
507     struct page * hole_page = bh_result->b_page ;
508     int retval = 0 ;
509
510     if ((tail_offset & (bh_result->b_size - 1)) != 1) 
511         return -EIO ;
512
513     /* always try to read until the end of the block */
514     tail_start = tail_offset & (PAGE_CACHE_SIZE - 1) ;
515     tail_end = (tail_start | (bh_result->b_size - 1)) + 1 ;
516
517     index = tail_offset >> PAGE_CACHE_SHIFT ;
518     /* hole_page can be zero in case of direct_io, we are sure
519        that we cannot get here if we write with O_DIRECT into
520        tail page */
521     if (!hole_page || index != hole_page->index) {
522         tail_page = grab_cache_page(inode->i_mapping, index) ;
523         retval = -ENOMEM;
524         if (!tail_page) {
525             goto out ;
526         }
527     } else {
528         tail_page = hole_page ;
529     }
530
531     /* we don't have to make sure the conversion did not happen while
532     ** we were locking the page because anyone that could convert
533     ** must first take i_sem.
534     **
535     ** We must fix the tail page for writing because it might have buffers
536     ** that are mapped, but have a block number of 0.  This indicates tail
537     ** data that has been read directly into the page, and block_prepare_write
538     ** won't trigger a get_block in this case.
539     */
540     fix_tail_page_for_writing(tail_page) ;
541     retval = reiserfs_prepare_write(NULL, tail_page, tail_start, tail_end);
542     if (retval)
543         goto unlock ;
544
545     /* tail conversion might change the data in the page */
546     flush_dcache_page(tail_page) ;
547
548     retval = reiserfs_commit_write(NULL, tail_page, tail_start, tail_end) ;
549
550 unlock:
551     if (tail_page != hole_page) {
552         unlock_page(tail_page) ;
553         page_cache_release(tail_page) ;
554     }
555 out:
556     return retval ;
557 }
558
559 static inline int _allocate_block(struct reiserfs_transaction_handle *th,
560                            long block,
561                            struct inode *inode, 
562                            b_blocknr_t *allocated_block_nr, 
563                            struct path * path,
564                            int flags) {
565     BUG_ON (!th->t_trans_id);
566   
567 #ifdef REISERFS_PREALLOCATE
568     if (!(flags & GET_BLOCK_NO_ISEM)) {
569         return reiserfs_new_unf_blocknrs2(th, inode, allocated_block_nr, path, block);
570     }
571 #endif
572     return reiserfs_new_unf_blocknrs (th, inode, allocated_block_nr, path, block);
573 }
574
575 int reiserfs_get_block (struct inode * inode, sector_t block,
576                         struct buffer_head * bh_result, int create)
577 {
578     int repeat, retval = 0;
579     b_blocknr_t allocated_block_nr = 0;// b_blocknr_t is (unsigned) 32 bit int
580     INITIALIZE_PATH(path);
581     int pos_in_item;
582     struct cpu_key key;
583     struct buffer_head * bh, * unbh = NULL;
584     struct item_head * ih, tmp_ih;
585     __u32 * item;
586     int done;
587     int fs_gen;
588     struct reiserfs_transaction_handle *th = NULL;
589     /* space reserved in transaction batch: 
590         . 3 balancings in direct->indirect conversion
591         . 1 block involved into reiserfs_update_sd()
592        XXX in practically impossible worst case direct2indirect()
593        can incur (much) more than 3 balancings.
594        quota update for user, group */
595     int jbegin_count = JOURNAL_PER_BALANCE_CNT * 3 + 1 + 2 * REISERFS_QUOTA_TRANS_BLOCKS;
596     int version;
597     int dangle = 1;
598     loff_t new_offset = (((loff_t)block) << inode->i_sb->s_blocksize_bits) + 1 ;
599
600                                 /* bad.... */
601     reiserfs_write_lock(inode->i_sb);
602     version = get_inode_item_key_version (inode);
603
604     if (block < 0) {
605         reiserfs_write_unlock(inode->i_sb);
606         return -EIO;
607     }
608
609     if (!file_capable (inode, block)) {
610         reiserfs_write_unlock(inode->i_sb);
611         return -EFBIG;
612     }
613
614     /* if !create, we aren't changing the FS, so we don't need to
615     ** log anything, so we don't need to start a transaction
616     */
617     if (!(create & GET_BLOCK_CREATE)) {
618         int ret ;
619         /* find number of block-th logical block of the file */
620         ret = _get_block_create_0 (inode, block, bh_result, 
621                                    create | GET_BLOCK_READ_DIRECT) ;
622         reiserfs_write_unlock(inode->i_sb);
623         return ret;
624     }
625     /*
626      * if we're already in a transaction, make sure to close
627      * any new transactions we start in this func
628      */
629     if ((create & GET_BLOCK_NO_DANGLE) ||
630         reiserfs_transaction_running(inode->i_sb))
631         dangle = 0;
632
633     /* If file is of such a size, that it might have a tail and tails are enabled
634     ** we should mark it as possibly needing tail packing on close
635     */
636     if ( (have_large_tails (inode->i_sb) && inode->i_size < i_block_size (inode)*4) ||
637          (have_small_tails (inode->i_sb) && inode->i_size < i_block_size(inode)) )
638         REISERFS_I(inode)->i_flags |= i_pack_on_close_mask ;
639
640     /* set the key of the first byte in the 'block'-th block of file */
641     make_cpu_key (&key, inode, new_offset,
642                   TYPE_ANY, 3/*key length*/);
643     if ((new_offset + inode->i_sb->s_blocksize - 1) > inode->i_size) {
644 start_trans:
645         th = reiserfs_persistent_transaction(inode->i_sb, jbegin_count);
646         if (!th) {
647             retval = -ENOMEM;
648             goto failure;
649         }
650         reiserfs_update_inode_transaction(inode) ;
651     }
652  research:
653
654     retval = search_for_position_by_key (inode->i_sb, &key, &path);
655     if (retval == IO_ERROR) {
656         retval = -EIO;
657         goto failure;
658     }
659         
660     bh = get_last_bh (&path);
661     ih = get_ih (&path);
662     item = get_item (&path);
663     pos_in_item = path.pos_in_item;
664
665     fs_gen = get_generation (inode->i_sb);
666     copy_item_head (&tmp_ih, ih);
667
668     if (allocation_needed (retval, allocated_block_nr, ih, item, pos_in_item)) {
669         /* we have to allocate block for the unformatted node */
670         if (!th) {
671             pathrelse(&path) ;
672             goto start_trans;
673         }
674
675         repeat = _allocate_block(th, block, inode, &allocated_block_nr, &path, create);
676
677         if (repeat == NO_DISK_SPACE || repeat == QUOTA_EXCEEDED) {
678             /* restart the transaction to give the journal a chance to free
679             ** some blocks.  releases the path, so we have to go back to
680             ** research if we succeed on the second try
681             */
682             SB_JOURNAL(inode->i_sb)->j_next_async_flush = 1;
683             retval = restart_transaction(th, inode, &path) ;
684             if (retval)
685                 goto failure;
686             repeat = _allocate_block(th, block, inode, &allocated_block_nr, NULL, create);
687
688             if (repeat != NO_DISK_SPACE && repeat != QUOTA_EXCEEDED) {
689                 goto research ;
690             }
691             if (repeat == QUOTA_EXCEEDED)
692                 retval = -EDQUOT;
693             else
694                 retval = -ENOSPC;
695             goto failure;
696         }
697
698         if (fs_changed (fs_gen, inode->i_sb) && item_moved (&tmp_ih, &path)) {
699             goto research;
700         }
701     }
702
703     if (indirect_item_found (retval, ih)) {
704         b_blocknr_t unfm_ptr;
705         /* 'block'-th block is in the file already (there is
706            corresponding cell in some indirect item). But it may be
707            zero unformatted node pointer (hole) */
708         unfm_ptr = get_block_num (item, pos_in_item);
709         if (unfm_ptr == 0) {
710             /* use allocated block to plug the hole */
711             reiserfs_prepare_for_journal(inode->i_sb, bh, 1) ;
712             if (fs_changed (fs_gen, inode->i_sb) && item_moved (&tmp_ih, &path)) {
713                 reiserfs_restore_prepared_buffer(inode->i_sb, bh) ;
714                 goto research;
715             }
716             set_buffer_new(bh_result);
717             if (buffer_dirty(bh_result) && reiserfs_data_ordered(inode->i_sb))
718                 reiserfs_add_ordered_list(inode, bh_result);
719             put_block_num(item, pos_in_item, allocated_block_nr) ;
720             unfm_ptr = allocated_block_nr;
721             journal_mark_dirty (th, inode->i_sb, bh);
722             reiserfs_update_sd(th, inode) ;
723         }
724         set_block_dev_mapped(bh_result, unfm_ptr, inode);
725         pathrelse (&path);
726         retval = 0;
727         if (!dangle && th)
728             retval = reiserfs_end_persistent_transaction(th);
729
730         reiserfs_write_unlock(inode->i_sb);
731          
732         /* the item was found, so new blocks were not added to the file
733         ** there is no need to make sure the inode is updated with this 
734         ** transaction
735         */
736         return retval;
737     }
738
739     if (!th) {
740         pathrelse(&path) ;
741         goto start_trans;
742     }
743
744     /* desired position is not found or is in the direct item. We have
745        to append file with holes up to 'block'-th block converting
746        direct items to indirect one if necessary */
747     done = 0;
748     do {
749         if (is_statdata_le_ih (ih)) {
750             __u32 unp = 0;
751             struct cpu_key tmp_key;
752
753             /* indirect item has to be inserted */
754             make_le_item_head (&tmp_ih, &key, version, 1, TYPE_INDIRECT, 
755                                UNFM_P_SIZE, 0/* free_space */);
756
757             if (cpu_key_k_offset (&key) == 1) {
758                 /* we are going to add 'block'-th block to the file. Use
759                    allocated block for that */
760                 unp = cpu_to_le32 (allocated_block_nr);
761                 set_block_dev_mapped (bh_result, allocated_block_nr, inode);
762                 set_buffer_new(bh_result);
763                 done = 1;
764             }
765             tmp_key = key; // ;)
766             set_cpu_key_k_offset (&tmp_key, 1);
767             PATH_LAST_POSITION(&path) ++;
768
769             retval = reiserfs_insert_item (th, &path, &tmp_key, &tmp_ih, inode, (char *)&unp);
770             if (retval) {
771                 reiserfs_free_block (th, inode, allocated_block_nr, 1);
772                 goto failure; // retval == -ENOSPC, -EDQUOT or -EIO or -EEXIST
773             }
774             //mark_tail_converted (inode);
775         } else if (is_direct_le_ih (ih)) {
776             /* direct item has to be converted */
777             loff_t tail_offset;
778
779             tail_offset = ((le_ih_k_offset (ih) - 1) & ~(inode->i_sb->s_blocksize - 1)) + 1;
780             if (tail_offset == cpu_key_k_offset (&key)) {
781                 /* direct item we just found fits into block we have
782                    to map. Convert it into unformatted node: use
783                    bh_result for the conversion */
784                 set_block_dev_mapped (bh_result, allocated_block_nr, inode);
785                 unbh = bh_result;
786                 done = 1;
787             } else {
788                 /* we have to padd file tail stored in direct item(s)
789                    up to block size and convert it to unformatted
790                    node. FIXME: this should also get into page cache */
791
792                 pathrelse(&path) ;
793                 /*
794                  * ugly, but we can only end the transaction if
795                  * we aren't nested
796                  */
797                 BUG_ON (!th->t_refcount);
798                 if (th->t_refcount == 1) {
799                     retval = reiserfs_end_persistent_transaction(th);
800                     th = NULL;
801                     if (retval)
802                         goto failure;
803                 }
804
805                 retval = convert_tail_for_hole(inode, bh_result, tail_offset) ;
806                 if (retval) {
807                     if ( retval != -ENOSPC )
808                         reiserfs_warning (inode->i_sb, "clm-6004: convert tail failed inode %lu, error %d", inode->i_ino, retval) ;
809                     if (allocated_block_nr) {
810                         /* the bitmap, the super, and the stat data == 3 */
811                         if (!th)
812                             th = reiserfs_persistent_transaction(inode->i_sb,3);
813                         if (th)
814                             reiserfs_free_block (th,inode,allocated_block_nr,1);
815                     }
816                     goto failure ;
817                 }
818                 goto research ;
819             }
820             retval = direct2indirect (th, inode, &path, unbh, tail_offset);
821             if (retval) {
822                 reiserfs_unmap_buffer(unbh);
823                 reiserfs_free_block (th, inode, allocated_block_nr, 1);
824                 goto failure;
825             }
826             /* it is important the set_buffer_uptodate is done after
827             ** the direct2indirect.  The buffer might contain valid
828             ** data newer than the data on disk (read by readpage, changed,
829             ** and then sent here by writepage).  direct2indirect needs
830             ** to know if unbh was already up to date, so it can decide
831             ** if the data in unbh needs to be replaced with data from
832             ** the disk
833             */
834             set_buffer_uptodate (unbh);
835
836             /* unbh->b_page == NULL in case of DIRECT_IO request, this means
837                buffer will disappear shortly, so it should not be added to
838              */
839             if ( unbh->b_page ) {
840                 /* we've converted the tail, so we must
841                 ** flush unbh before the transaction commits
842                 */
843                 reiserfs_add_tail_list(inode, unbh) ;
844
845                 /* mark it dirty now to prevent commit_write from adding
846                 ** this buffer to the inode's dirty buffer list
847                 */
848                 /*
849                  * AKPM: changed __mark_buffer_dirty to mark_buffer_dirty().
850                  * It's still atomic, but it sets the page dirty too,
851                  * which makes it eligible for writeback at any time by the
852                  * VM (which was also the case with __mark_buffer_dirty())
853                  */
854                 mark_buffer_dirty(unbh) ;
855             }
856         } else {
857             /* append indirect item with holes if needed, when appending
858                pointer to 'block'-th block use block, which is already
859                allocated */
860             struct cpu_key tmp_key;
861             unp_t unf_single=0; // We use this in case we need to allocate only
862                                 // one block which is a fastpath
863             unp_t *un;
864             __u64 max_to_insert=MAX_ITEM_LEN(inode->i_sb->s_blocksize)/UNFM_P_SIZE;
865             __u64 blocks_needed;
866
867             RFALSE( pos_in_item != ih_item_len(ih) / UNFM_P_SIZE,
868                     "vs-804: invalid position for append");
869             /* indirect item has to be appended, set up key of that position */
870             make_cpu_key (&tmp_key, inode,
871                           le_key_k_offset (version, &(ih->ih_key)) + op_bytes_number (ih, inode->i_sb->s_blocksize),
872                           //pos_in_item * inode->i_sb->s_blocksize,
873                           TYPE_INDIRECT, 3);// key type is unimportant
874
875             blocks_needed = 1 + ((cpu_key_k_offset (&key) - cpu_key_k_offset (&tmp_key)) >> inode->i_sb->s_blocksize_bits);
876             RFALSE( blocks_needed < 0, "green-805: invalid offset");
877
878             if ( blocks_needed == 1 ) {
879                 un = &unf_single;
880             } else {
881                 un=kmalloc( min(blocks_needed,max_to_insert)*UNFM_P_SIZE,
882                             GFP_ATOMIC); // We need to avoid scheduling.
883                 if ( !un) {
884                     un = &unf_single;
885                     blocks_needed = 1;
886                     max_to_insert = 0;
887                 } else
888                     memset(un, 0, UNFM_P_SIZE * min(blocks_needed,max_to_insert));
889             }
890             if ( blocks_needed <= max_to_insert) {
891                 /* we are going to add target block to the file. Use allocated
892                    block for that */
893                 un[blocks_needed-1] = cpu_to_le32 (allocated_block_nr);
894                 set_block_dev_mapped (bh_result, allocated_block_nr, inode);
895                 set_buffer_new(bh_result);
896                 done = 1;
897             } else {
898                 /* paste hole to the indirect item */
899                 /* If kmalloc failed, max_to_insert becomes zero and it means we
900                    only have space for one block */
901                 blocks_needed=max_to_insert?max_to_insert:1;
902             }
903             retval = reiserfs_paste_into_item (th, &path, &tmp_key, inode, (char *)un, UNFM_P_SIZE * blocks_needed);
904
905             if (blocks_needed != 1)
906                 kfree(un);
907
908             if (retval) {
909                 reiserfs_free_block (th, inode, allocated_block_nr, 1);
910                 goto failure;
911             }
912             if (!done) {
913                 /* We need to mark new file size in case this function will be
914                    interrupted/aborted later on. And we may do this only for
915                    holes. */
916                 inode->i_size += inode->i_sb->s_blocksize * blocks_needed;
917             }
918         }
919
920         if (done == 1)
921             break;
922
923         /* this loop could log more blocks than we had originally asked
924         ** for.  So, we have to allow the transaction to end if it is
925         ** too big or too full.  Update the inode so things are 
926         ** consistent if we crash before the function returns
927         **
928         ** release the path so that anybody waiting on the path before
929         ** ending their transaction will be able to continue.
930         */
931         if (journal_transaction_should_end(th, th->t_blocks_allocated)) {
932           retval = restart_transaction(th, inode, &path) ;
933           if (retval)
934             goto failure;
935         }
936         /* inserting indirect pointers for a hole can take a 
937         ** long time.  reschedule if needed
938         */
939         cond_resched();
940
941         retval = search_for_position_by_key (inode->i_sb, &key, &path);
942         if (retval == IO_ERROR) {
943             retval = -EIO;
944             goto failure;
945         }
946         if (retval == POSITION_FOUND) {
947             reiserfs_warning (inode->i_sb, "vs-825: reiserfs_get_block: "
948                               "%K should not be found", &key);
949             retval = -EEXIST;
950             if (allocated_block_nr)
951                 reiserfs_free_block (th, inode, allocated_block_nr, 1);
952             pathrelse(&path) ;
953             goto failure;
954         }
955         bh = get_last_bh (&path);
956         ih = get_ih (&path);
957         item = get_item (&path);
958         pos_in_item = path.pos_in_item;
959     } while (1);
960
961
962     retval = 0;
963
964  failure:
965     if (th && (!dangle || (retval && !th->t_trans_id))) {
966         int err;
967         if (th->t_trans_id)
968             reiserfs_update_sd(th, inode);
969         err = reiserfs_end_persistent_transaction(th);
970         if (err)
971             retval = err;
972     }
973
974     reiserfs_write_unlock(inode->i_sb);
975     reiserfs_check_path(&path) ;
976     return retval;
977 }
978
979 static int
980 reiserfs_readpages(struct file *file, struct address_space *mapping,
981                 struct list_head *pages, unsigned nr_pages)
982 {
983     return mpage_readpages(mapping, pages, nr_pages, reiserfs_get_block);
984 }
985
986 /* Compute real number of used bytes by file
987  * Following three functions can go away when we'll have enough space in stat item
988  */
989 static int real_space_diff(struct inode *inode, int sd_size)
990 {
991     int bytes;
992     loff_t blocksize = inode->i_sb->s_blocksize ;
993
994     if (S_ISLNK(inode->i_mode) || S_ISDIR(inode->i_mode))
995         return sd_size ;
996
997     /* End of file is also in full block with indirect reference, so round
998     ** up to the next block.
999     **
1000     ** there is just no way to know if the tail is actually packed
1001     ** on the file, so we have to assume it isn't.  When we pack the
1002     ** tail, we add 4 bytes to pretend there really is an unformatted
1003     ** node pointer
1004     */
1005     bytes = ((inode->i_size + (blocksize-1)) >> inode->i_sb->s_blocksize_bits) * UNFM_P_SIZE + sd_size;
1006     return bytes ;
1007 }
1008
1009 static inline loff_t to_real_used_space(struct inode *inode, ulong blocks,
1010                                         int sd_size)
1011 {
1012     if (S_ISLNK(inode->i_mode) || S_ISDIR(inode->i_mode)) {
1013         return inode->i_size + (loff_t)(real_space_diff(inode, sd_size)) ;
1014     }
1015     return ((loff_t)real_space_diff(inode, sd_size)) + (((loff_t)blocks) << 9);
1016 }
1017
1018 /* Compute number of blocks used by file in ReiserFS counting */
1019 static inline ulong to_fake_used_blocks(struct inode *inode, int sd_size)
1020 {
1021     loff_t bytes = inode_get_bytes(inode) ;
1022     loff_t real_space = real_space_diff(inode, sd_size) ;
1023
1024     /* keeps fsck and non-quota versions of reiserfs happy */
1025     if (S_ISLNK(inode->i_mode) || S_ISDIR(inode->i_mode)) {
1026         bytes += (loff_t)511 ;
1027     }
1028
1029     /* files from before the quota patch might i_blocks such that
1030     ** bytes < real_space.  Deal with that here to prevent it from
1031     ** going negative.
1032     */
1033     if (bytes < real_space)
1034         return 0 ;
1035     return (bytes - real_space) >> 9;
1036 }
1037
1038 //
1039 // BAD: new directories have stat data of new type and all other items
1040 // of old type. Version stored in the inode says about body items, so
1041 // in update_stat_data we can not rely on inode, but have to check
1042 // item version directly
1043 //
1044
1045 // called by read_locked_inode
1046 static void init_inode (struct inode * inode, struct path * path)
1047 {
1048     struct buffer_head * bh;
1049     struct item_head * ih;
1050     __u32 rdev;
1051     uid_t uid;
1052     gid_t gid;
1053     //int version = ITEM_VERSION_1;
1054
1055     bh = PATH_PLAST_BUFFER (path);
1056     ih = PATH_PITEM_HEAD (path);
1057
1058
1059     copy_key (INODE_PKEY (inode), &(ih->ih_key));
1060     inode->i_blksize = reiserfs_default_io_size;
1061
1062     INIT_LIST_HEAD(&(REISERFS_I(inode)->i_prealloc_list ));
1063     REISERFS_I(inode)->i_flags = 0;
1064     REISERFS_I(inode)->i_prealloc_block = 0;
1065     REISERFS_I(inode)->i_prealloc_count = 0;
1066     REISERFS_I(inode)->i_trans_id = 0;
1067     REISERFS_I(inode)->i_jl = NULL;
1068     REISERFS_I(inode)->i_acl_access = NULL;
1069     REISERFS_I(inode)->i_acl_default = NULL;
1070     init_rwsem (&REISERFS_I(inode)->xattr_sem);
1071
1072     if (stat_data_v1 (ih)) {
1073         struct stat_data_v1 * sd = (struct stat_data_v1 *)B_I_PITEM (bh, ih);
1074         unsigned long blocks;
1075
1076         uid = sd_v1_uid(sd);
1077         gid = sd_v1_gid(sd);
1078
1079         set_inode_item_key_version (inode, KEY_FORMAT_3_5);
1080         set_inode_sd_version (inode, STAT_DATA_V1);
1081         inode->i_mode  = sd_v1_mode(sd);
1082         inode->i_nlink = sd_v1_nlink(sd);
1083         inode->i_size  = sd_v1_size(sd);
1084         inode->i_atime.tv_sec = sd_v1_atime(sd);
1085         inode->i_mtime.tv_sec = sd_v1_mtime(sd);
1086         inode->i_ctime.tv_sec = sd_v1_ctime(sd);
1087         inode->i_atime.tv_nsec = 0;
1088         inode->i_ctime.tv_nsec = 0;
1089         inode->i_mtime.tv_nsec = 0;
1090
1091         inode->i_blocks = sd_v1_blocks(sd);
1092         inode->i_generation = le32_to_cpu (INODE_PKEY (inode)->k_dir_id);
1093         blocks = (inode->i_size + 511) >> 9;
1094         blocks = _ROUND_UP (blocks, inode->i_sb->s_blocksize >> 9);
1095         if (inode->i_blocks > blocks) {
1096             // there was a bug in <=3.5.23 when i_blocks could take negative
1097             // values. Starting from 3.5.17 this value could even be stored in
1098             // stat data. For such files we set i_blocks based on file
1099             // size. Just 2 notes: this can be wrong for sparce files. On-disk value will be
1100             // only updated if file's inode will ever change
1101             inode->i_blocks = blocks;
1102         }
1103
1104         rdev = sd_v1_rdev(sd);
1105         REISERFS_I(inode)->i_first_direct_byte = sd_v1_first_direct_byte(sd);
1106         /* an early bug in the quota code can give us an odd number for the
1107         ** block count.  This is incorrect, fix it here.
1108         */
1109         if (inode->i_blocks & 1) {
1110             inode->i_blocks++ ;
1111         }
1112         inode_set_bytes(inode, to_real_used_space(inode, inode->i_blocks,
1113                                                   SD_V1_SIZE));
1114         /* nopack is initially zero for v1 objects. For v2 objects,
1115            nopack is initialised from sd_attrs */
1116         REISERFS_I(inode)->i_flags &= ~i_nopack_mask;
1117     } else {
1118         // new stat data found, but object may have old items
1119         // (directories and symlinks)
1120         struct stat_data * sd = (struct stat_data *)B_I_PITEM (bh, ih);
1121
1122         uid    = sd_v2_uid(sd);
1123         gid    = sd_v2_gid(sd);
1124
1125         inode->i_mode   = sd_v2_mode(sd);
1126         inode->i_nlink  = sd_v2_nlink(sd);
1127         inode->i_size   = sd_v2_size(sd);
1128         inode->i_mtime.tv_sec  = sd_v2_mtime(sd);
1129         inode->i_atime.tv_sec = sd_v2_atime(sd);
1130         inode->i_ctime.tv_sec  = sd_v2_ctime(sd);
1131         inode->i_ctime.tv_nsec = 0;
1132         inode->i_mtime.tv_nsec = 0;
1133         inode->i_atime.tv_nsec = 0;
1134         inode->i_blocks = sd_v2_blocks(sd);
1135         rdev            = sd_v2_rdev(sd);
1136         if( S_ISCHR( inode -> i_mode ) || S_ISBLK( inode -> i_mode ) )
1137             inode->i_generation = le32_to_cpu (INODE_PKEY (inode)->k_dir_id);
1138         else
1139             inode->i_generation = sd_v2_generation(sd);
1140
1141         if (S_ISDIR (inode->i_mode) || S_ISLNK (inode->i_mode))
1142             set_inode_item_key_version (inode, KEY_FORMAT_3_5);
1143         else
1144             set_inode_item_key_version (inode, KEY_FORMAT_3_6);
1145         REISERFS_I(inode)->i_first_direct_byte = 0;
1146         set_inode_sd_version (inode, STAT_DATA_V2);
1147         inode_set_bytes(inode, to_real_used_space(inode, inode->i_blocks,
1148                                                   SD_V2_SIZE));
1149         /* read persistent inode attributes from sd and initalise
1150            generic inode flags from them */
1151         REISERFS_I(inode)->i_attrs = sd_v2_attrs( sd );
1152         sd_attrs_to_i_attrs( sd_v2_attrs( sd ), inode );
1153     }
1154     inode->i_uid = INOXID_UID(XID_TAG(inode), uid, gid);
1155     inode->i_gid = INOXID_GID(XID_TAG(inode), uid, gid);
1156     inode->i_xid = INOXID_XID(XID_TAG(inode), uid, gid, 0);
1157
1158     pathrelse (path);
1159     if (S_ISREG (inode->i_mode)) {
1160         inode->i_op = &reiserfs_file_inode_operations;
1161         inode->i_fop = &reiserfs_file_operations;
1162         inode->i_mapping->a_ops = &reiserfs_address_space_operations ;
1163     } else if (S_ISDIR (inode->i_mode)) {
1164         inode->i_op = &reiserfs_dir_inode_operations;
1165         inode->i_fop = &reiserfs_dir_operations;
1166     } else if (S_ISLNK (inode->i_mode)) {
1167         inode->i_op = &reiserfs_symlink_inode_operations;
1168         inode->i_mapping->a_ops = &reiserfs_address_space_operations;
1169     } else {
1170         inode->i_blocks = 0;
1171         inode->i_op = &reiserfs_special_inode_operations;
1172         init_special_inode(inode, inode->i_mode, new_decode_dev(rdev));
1173     }
1174 }
1175
1176
1177 // update new stat data with inode fields
1178 static void inode2sd (void * sd, struct inode * inode, loff_t size)
1179 {
1180     struct stat_data * sd_v2 = (struct stat_data *)sd;
1181     uid_t uid = XIDINO_UID(XID_TAG(inode), inode->i_uid, inode->i_xid);
1182     gid_t gid = XIDINO_GID(XID_TAG(inode), inode->i_gid, inode->i_xid);
1183     __u16 flags;
1184
1185     set_sd_v2_uid(sd_v2, uid );
1186     set_sd_v2_gid(sd_v2, gid );
1187     set_sd_v2_mode(sd_v2, inode->i_mode );
1188     set_sd_v2_nlink(sd_v2, inode->i_nlink );
1189     set_sd_v2_size(sd_v2, size );
1190     set_sd_v2_mtime(sd_v2, inode->i_mtime.tv_sec );
1191     set_sd_v2_atime(sd_v2, inode->i_atime.tv_sec );
1192     set_sd_v2_ctime(sd_v2, inode->i_ctime.tv_sec );
1193     set_sd_v2_blocks(sd_v2, to_fake_used_blocks(inode, SD_V2_SIZE));
1194     if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
1195         set_sd_v2_rdev(sd_v2, new_encode_dev(inode->i_rdev));
1196     else
1197         set_sd_v2_generation(sd_v2, inode->i_generation);
1198     flags = REISERFS_I(inode)->i_attrs;
1199     i_attrs_to_sd_attrs( inode, &flags );
1200     set_sd_v2_attrs( sd_v2, flags );
1201 }
1202
1203
1204 // used to copy inode's fields to old stat data
1205 static void inode2sd_v1 (void * sd, struct inode * inode, loff_t size)
1206 {
1207     struct stat_data_v1 * sd_v1 = (struct stat_data_v1 *)sd;
1208
1209     set_sd_v1_mode(sd_v1, inode->i_mode );
1210     set_sd_v1_uid(sd_v1, inode->i_uid );
1211     set_sd_v1_gid(sd_v1, inode->i_gid );
1212     set_sd_v1_nlink(sd_v1, inode->i_nlink );
1213     set_sd_v1_size(sd_v1, size );
1214     set_sd_v1_atime(sd_v1, inode->i_atime.tv_sec );
1215     set_sd_v1_ctime(sd_v1, inode->i_ctime.tv_sec );
1216     set_sd_v1_mtime(sd_v1, inode->i_mtime.tv_sec );
1217
1218     if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
1219         set_sd_v1_rdev(sd_v1, new_encode_dev(inode->i_rdev));
1220     else
1221         set_sd_v1_blocks(sd_v1, to_fake_used_blocks(inode, SD_V1_SIZE));
1222
1223     // Sigh. i_first_direct_byte is back
1224     set_sd_v1_first_direct_byte(sd_v1, REISERFS_I(inode)->i_first_direct_byte);
1225 }
1226
1227
1228 /* NOTE, you must prepare the buffer head before sending it here,
1229 ** and then log it after the call
1230 */
1231 static void update_stat_data (struct path * path, struct inode * inode,
1232                               loff_t size)
1233 {
1234     struct buffer_head * bh;
1235     struct item_head * ih;
1236   
1237     bh = PATH_PLAST_BUFFER (path);
1238     ih = PATH_PITEM_HEAD (path);
1239
1240     if (!is_statdata_le_ih (ih))
1241         reiserfs_panic (inode->i_sb, "vs-13065: update_stat_data: key %k, found item %h",
1242                         INODE_PKEY (inode), ih);
1243   
1244     if (stat_data_v1 (ih)) {
1245         // path points to old stat data
1246         inode2sd_v1 (B_I_PITEM (bh, ih), inode, size);
1247     } else {
1248         inode2sd (B_I_PITEM (bh, ih), inode, size);
1249     }
1250
1251     return;
1252 }
1253
1254
1255 void reiserfs_update_sd_size (struct reiserfs_transaction_handle *th,
1256                               struct inode * inode, loff_t size)
1257 {
1258     struct cpu_key key;
1259     INITIALIZE_PATH(path);
1260     struct buffer_head *bh ;
1261     int fs_gen ;
1262     struct item_head *ih, tmp_ih ;
1263     int retval;
1264
1265     BUG_ON (!th->t_trans_id);
1266
1267     make_cpu_key (&key, inode, SD_OFFSET, TYPE_STAT_DATA, 3);//key type is unimportant
1268     
1269     for(;;) {
1270         int pos;
1271         /* look for the object's stat data */
1272         retval = search_item (inode->i_sb, &key, &path);
1273         if (retval == IO_ERROR) {
1274             reiserfs_warning (inode->i_sb, "vs-13050: reiserfs_update_sd: "
1275                               "i/o failure occurred trying to update %K stat data",
1276                               &key);
1277             return;
1278         }
1279         if (retval == ITEM_NOT_FOUND) {
1280             pos = PATH_LAST_POSITION (&path);
1281             pathrelse(&path) ;
1282             if (inode->i_nlink == 0) {
1283                 /*reiserfs_warning (inode->i_sb, "vs-13050: reiserfs_update_sd: i_nlink == 0, stat data not found");*/
1284                 return;
1285             }
1286             reiserfs_warning (inode->i_sb, "vs-13060: reiserfs_update_sd: "
1287                               "stat data of object %k (nlink == %d) not found (pos %d)",
1288                               INODE_PKEY (inode), inode->i_nlink, pos);
1289             reiserfs_check_path(&path) ;
1290             return;
1291         }
1292         
1293         /* sigh, prepare_for_journal might schedule.  When it schedules the
1294         ** FS might change.  We have to detect that, and loop back to the
1295         ** search if the stat data item has moved
1296         */
1297         bh = get_last_bh(&path) ;
1298         ih = get_ih(&path) ;
1299         copy_item_head (&tmp_ih, ih);
1300         fs_gen = get_generation (inode->i_sb);
1301         reiserfs_prepare_for_journal(inode->i_sb, bh, 1) ;
1302         if (fs_changed (fs_gen, inode->i_sb) && item_moved(&tmp_ih, &path)) {
1303             reiserfs_restore_prepared_buffer(inode->i_sb, bh) ;
1304             continue ;  /* Stat_data item has been moved after scheduling. */
1305         }
1306         break;
1307     }
1308     update_stat_data (&path, inode, size);
1309     journal_mark_dirty(th, th->t_super, bh) ; 
1310     pathrelse (&path);
1311     return;
1312 }
1313
1314 /* reiserfs_read_locked_inode is called to read the inode off disk, and it
1315 ** does a make_bad_inode when things go wrong.  But, we need to make sure
1316 ** and clear the key in the private portion of the inode, otherwise a
1317 ** corresponding iput might try to delete whatever object the inode last
1318 ** represented.
1319 */
1320 static void reiserfs_make_bad_inode(struct inode *inode) {
1321     memset(INODE_PKEY(inode), 0, KEY_SIZE);
1322     make_bad_inode(inode);
1323 }
1324
1325 //
1326 // initially this function was derived from minix or ext2's analog and
1327 // evolved as the prototype did
1328 //
1329
1330 int reiserfs_init_locked_inode (struct inode * inode, void *p)
1331 {
1332     struct reiserfs_iget_args *args = (struct reiserfs_iget_args *)p ;
1333     inode->i_ino = args->objectid;
1334     INODE_PKEY(inode)->k_dir_id = cpu_to_le32(args->dirid);
1335     return 0;
1336 }
1337
1338 /* looks for stat data in the tree, and fills up the fields of in-core
1339    inode stat data fields */
1340 void reiserfs_read_locked_inode (struct inode * inode, struct reiserfs_iget_args *args)
1341 {
1342     INITIALIZE_PATH (path_to_sd);
1343     struct cpu_key key;
1344     unsigned long dirino;
1345     int retval;
1346
1347     dirino = args->dirid ;
1348
1349     /* set version 1, version 2 could be used too, because stat data
1350        key is the same in both versions */
1351     key.version = KEY_FORMAT_3_5;
1352     key.on_disk_key.k_dir_id = dirino;
1353     key.on_disk_key.k_objectid = inode->i_ino;
1354     key.on_disk_key.u.k_offset_v1.k_offset = SD_OFFSET;
1355     key.on_disk_key.u.k_offset_v1.k_uniqueness = SD_UNIQUENESS;
1356
1357     /* look for the object's stat data */
1358     retval = search_item (inode->i_sb, &key, &path_to_sd);
1359     if (retval == IO_ERROR) {
1360         reiserfs_warning (inode->i_sb, "vs-13070: reiserfs_read_locked_inode: "
1361                           "i/o failure occurred trying to find stat data of %K",
1362                           &key);
1363         reiserfs_make_bad_inode(inode) ;
1364         return;
1365     }
1366     if (retval != ITEM_FOUND) {
1367         /* a stale NFS handle can trigger this without it being an error */
1368         pathrelse (&path_to_sd);
1369         reiserfs_make_bad_inode(inode) ;
1370         inode->i_nlink = 0;
1371         return;
1372     }
1373
1374     init_inode (inode, &path_to_sd);
1375    
1376     /* It is possible that knfsd is trying to access inode of a file
1377        that is being removed from the disk by some other thread. As we
1378        update sd on unlink all that is required is to check for nlink
1379        here. This bug was first found by Sizif when debugging
1380        SquidNG/Butterfly, forgotten, and found again after Philippe
1381        Gramoulle <philippe.gramoulle@mmania.com> reproduced it. 
1382
1383        More logical fix would require changes in fs/inode.c:iput() to
1384        remove inode from hash-table _after_ fs cleaned disk stuff up and
1385        in iget() to return NULL if I_FREEING inode is found in
1386        hash-table. */
1387     /* Currently there is one place where it's ok to meet inode with
1388        nlink==0: processing of open-unlinked and half-truncated files
1389        during mount (fs/reiserfs/super.c:finish_unfinished()). */
1390     if( ( inode -> i_nlink == 0 ) && 
1391         ! REISERFS_SB(inode -> i_sb) -> s_is_unlinked_ok ) {
1392             reiserfs_warning (inode->i_sb,
1393                               "vs-13075: reiserfs_read_locked_inode: "
1394                               "dead inode read from disk %K. "
1395                               "This is likely to be race with knfsd. Ignore",
1396                               &key );
1397             reiserfs_make_bad_inode( inode );
1398     }
1399
1400     reiserfs_check_path(&path_to_sd) ; /* init inode should be relsing */
1401
1402 }
1403
1404 /**
1405  * reiserfs_find_actor() - "find actor" reiserfs supplies to iget5_locked().
1406  *
1407  * @inode:    inode from hash table to check
1408  * @opaque:   "cookie" passed to iget5_locked(). This is &reiserfs_iget_args.
1409  *
1410  * This function is called by iget5_locked() to distinguish reiserfs inodes
1411  * having the same inode numbers. Such inodes can only exist due to some
1412  * error condition. One of them should be bad. Inodes with identical
1413  * inode numbers (objectids) are distinguished by parent directory ids.
1414  *
1415  */
1416 int reiserfs_find_actor( struct inode *inode, void *opaque )
1417 {
1418     struct reiserfs_iget_args *args;
1419
1420     args = opaque;
1421     /* args is already in CPU order */
1422     return (inode->i_ino == args->objectid) &&
1423         (le32_to_cpu(INODE_PKEY(inode)->k_dir_id) == args->dirid);
1424 }
1425
1426 struct inode * reiserfs_iget (struct super_block * s, const struct cpu_key * key)
1427 {
1428     struct inode * inode;
1429     struct reiserfs_iget_args args ;
1430
1431     args.objectid = key->on_disk_key.k_objectid ;
1432     args.dirid = key->on_disk_key.k_dir_id ;
1433     inode = iget5_locked (s, key->on_disk_key.k_objectid, 
1434                    reiserfs_find_actor, reiserfs_init_locked_inode, (void *)(&args));
1435     if (!inode) 
1436         return ERR_PTR(-ENOMEM) ;
1437
1438     if (inode->i_state & I_NEW) {
1439         reiserfs_read_locked_inode(inode, &args);
1440         unlock_new_inode(inode);
1441     }
1442
1443     if (comp_short_keys (INODE_PKEY (inode), key) || is_bad_inode (inode)) {
1444         /* either due to i/o error or a stale NFS handle */
1445         iput (inode);
1446         inode = NULL;
1447     }
1448     return inode;
1449 }
1450
1451 struct dentry *reiserfs_get_dentry(struct super_block *sb, void *vobjp)
1452 {
1453     __u32 *data = vobjp;
1454     struct cpu_key key ;
1455     struct dentry *result;
1456     struct inode *inode;
1457     
1458     key.on_disk_key.k_objectid = data[0] ;
1459     key.on_disk_key.k_dir_id = data[1] ;
1460     reiserfs_write_lock(sb);
1461     inode = reiserfs_iget(sb, &key) ;
1462     if (inode && !IS_ERR(inode) && data[2] != 0 &&
1463         data[2] != inode->i_generation) {
1464             iput(inode) ;
1465             inode = NULL ;
1466     }
1467     reiserfs_write_unlock(sb);
1468     if (!inode)
1469             inode = ERR_PTR(-ESTALE);
1470     if (IS_ERR(inode))
1471             return ERR_PTR(PTR_ERR(inode));
1472     result = d_alloc_anon(inode);
1473     if (!result) {
1474             iput(inode);
1475             return ERR_PTR(-ENOMEM);
1476     }
1477     return result;
1478 }
1479
1480 struct dentry *reiserfs_decode_fh(struct super_block *sb, __u32 *data,
1481                                      int len, int fhtype,
1482                                   int (*acceptable)(void *contect, struct dentry *de),
1483                                   void *context) {
1484     __u32 obj[3], parent[3];
1485
1486     /* fhtype happens to reflect the number of u32s encoded.
1487      * due to a bug in earlier code, fhtype might indicate there
1488      * are more u32s then actually fitted.
1489      * so if fhtype seems to be more than len, reduce fhtype.
1490      * Valid types are:
1491      *   2 - objectid + dir_id - legacy support
1492      *   3 - objectid + dir_id + generation
1493      *   4 - objectid + dir_id + objectid and dirid of parent - legacy
1494      *   5 - objectid + dir_id + generation + objectid and dirid of parent
1495      *   6 - as above plus generation of directory
1496      * 6 does not fit in NFSv2 handles
1497      */
1498     if (fhtype > len) {
1499             if (fhtype != 6 || len != 5)
1500                     reiserfs_warning (sb, "nfsd/reiserfs, fhtype=%d, len=%d - odd",
1501                            fhtype, len);
1502             fhtype = 5;
1503     }
1504
1505     obj[0] = data[0];
1506     obj[1] = data[1];
1507     if (fhtype == 3 || fhtype >= 5)
1508             obj[2] = data[2];
1509     else    obj[2] = 0; /* generation number */
1510
1511     if (fhtype >= 4) {
1512             parent[0] = data[fhtype>=5?3:2] ;
1513             parent[1] = data[fhtype>=5?4:3] ;
1514             if (fhtype == 6)
1515                     parent[2] = data[5];
1516             else    parent[2] = 0;
1517     }
1518     return sb->s_export_op->find_exported_dentry(sb, obj, fhtype < 4 ? NULL : parent,
1519                                acceptable, context);
1520 }
1521
1522 int reiserfs_encode_fh(struct dentry *dentry, __u32 *data, int *lenp, int need_parent) {
1523     struct inode *inode = dentry->d_inode ;
1524     int maxlen = *lenp;
1525     
1526     if (maxlen < 3)
1527         return 255 ;
1528
1529     data[0] = inode->i_ino ;
1530     data[1] = le32_to_cpu(INODE_PKEY (inode)->k_dir_id) ;
1531     data[2] = inode->i_generation ;
1532     *lenp = 3 ;
1533     /* no room for directory info? return what we've stored so far */
1534     if (maxlen < 5 || ! need_parent)
1535         return 3 ;
1536
1537     spin_lock(&dentry->d_lock);
1538     inode = dentry->d_parent->d_inode ;
1539     data[3] = inode->i_ino ;
1540     data[4] = le32_to_cpu(INODE_PKEY (inode)->k_dir_id) ;
1541     *lenp = 5 ;
1542     if (maxlen >= 6) {
1543             data[5] = inode->i_generation ;
1544             *lenp = 6 ;
1545     }
1546     spin_unlock(&dentry->d_lock);
1547     return *lenp ;
1548 }
1549
1550
1551 /* looks for stat data, then copies fields to it, marks the buffer
1552    containing stat data as dirty */
1553 /* reiserfs inodes are never really dirty, since the dirty inode call
1554 ** always logs them.  This call allows the VFS inode marking routines
1555 ** to properly mark inodes for datasync and such, but only actually
1556 ** does something when called for a synchronous update.
1557 */
1558 int reiserfs_write_inode (struct inode * inode, int do_sync) {
1559     struct reiserfs_transaction_handle th ;
1560     int jbegin_count = 1 ;
1561
1562     if (inode->i_sb->s_flags & MS_RDONLY)
1563         return -EROFS;
1564     /* memory pressure can sometimes initiate write_inode calls with sync == 1,
1565     ** these cases are just when the system needs ram, not when the 
1566     ** inode needs to reach disk for safety, and they can safely be
1567     ** ignored because the altered inode has already been logged.
1568     */
1569     if (do_sync && !(current->flags & PF_MEMALLOC)) {
1570         reiserfs_write_lock(inode->i_sb);
1571         if (!journal_begin(&th, inode->i_sb, jbegin_count)) {
1572             reiserfs_update_sd (&th, inode);
1573             journal_end_sync(&th, inode->i_sb, jbegin_count) ;
1574         }
1575         reiserfs_write_unlock(inode->i_sb);
1576     }
1577     return 0;
1578 }
1579
1580 /* stat data of new object is inserted already, this inserts the item
1581    containing "." and ".." entries */
1582 static int reiserfs_new_directory (struct reiserfs_transaction_handle *th, 
1583                                    struct inode *inode,
1584                                    struct item_head * ih, struct path * path,
1585                                    struct inode * dir)
1586 {
1587     struct super_block * sb = th->t_super;
1588     char empty_dir [EMPTY_DIR_SIZE];
1589     char * body = empty_dir;
1590     struct cpu_key key;
1591     int retval;
1592
1593     BUG_ON (!th->t_trans_id);
1594     
1595     _make_cpu_key (&key, KEY_FORMAT_3_5, le32_to_cpu (ih->ih_key.k_dir_id),
1596                    le32_to_cpu (ih->ih_key.k_objectid), DOT_OFFSET, TYPE_DIRENTRY, 3/*key length*/);
1597     
1598     /* compose item head for new item. Directories consist of items of
1599        old type (ITEM_VERSION_1). Do not set key (second arg is 0), it
1600        is done by reiserfs_new_inode */
1601     if (old_format_only (sb)) {
1602         make_le_item_head (ih, NULL, KEY_FORMAT_3_5, DOT_OFFSET, TYPE_DIRENTRY, EMPTY_DIR_SIZE_V1, 2);
1603         
1604         make_empty_dir_item_v1 (body, ih->ih_key.k_dir_id, ih->ih_key.k_objectid,
1605                                 INODE_PKEY (dir)->k_dir_id, 
1606                                 INODE_PKEY (dir)->k_objectid );
1607     } else {
1608         make_le_item_head (ih, NULL, KEY_FORMAT_3_5, DOT_OFFSET, TYPE_DIRENTRY, EMPTY_DIR_SIZE, 2);
1609         
1610         make_empty_dir_item (body, ih->ih_key.k_dir_id, ih->ih_key.k_objectid,
1611                                 INODE_PKEY (dir)->k_dir_id, 
1612                                 INODE_PKEY (dir)->k_objectid );
1613     }
1614     
1615     /* look for place in the tree for new item */
1616     retval = search_item (sb, &key, path);
1617     if (retval == IO_ERROR) {
1618         reiserfs_warning (sb, "vs-13080: reiserfs_new_directory: "
1619                           "i/o failure occurred creating new directory");
1620         return -EIO;
1621     }
1622     if (retval == ITEM_FOUND) {
1623         pathrelse (path);
1624         reiserfs_warning (sb, "vs-13070: reiserfs_new_directory: "
1625                           "object with this key exists (%k)", &(ih->ih_key));
1626         return -EEXIST;
1627     }
1628
1629     /* insert item, that is empty directory item */
1630     return reiserfs_insert_item (th, path, &key, ih, inode, body);
1631 }
1632
1633
1634 /* stat data of object has been inserted, this inserts the item
1635    containing the body of symlink */
1636 static int reiserfs_new_symlink (struct reiserfs_transaction_handle *th, 
1637                                  struct inode *inode,   /* Inode of symlink */
1638                                  struct item_head * ih,
1639                                  struct path * path, const char * symname, int item_len)
1640 {
1641     struct super_block * sb = th->t_super;
1642     struct cpu_key key;
1643     int retval;
1644
1645     BUG_ON (!th->t_trans_id);
1646
1647     _make_cpu_key (&key, KEY_FORMAT_3_5, 
1648                    le32_to_cpu (ih->ih_key.k_dir_id), 
1649                    le32_to_cpu (ih->ih_key.k_objectid),
1650                    1, TYPE_DIRECT, 3/*key length*/);
1651
1652     make_le_item_head (ih, NULL, KEY_FORMAT_3_5, 1, TYPE_DIRECT, item_len, 0/*free_space*/);
1653
1654     /* look for place in the tree for new item */
1655     retval = search_item (sb, &key, path);
1656     if (retval == IO_ERROR) {
1657         reiserfs_warning (sb, "vs-13080: reiserfs_new_symlinik: "
1658                           "i/o failure occurred creating new symlink");
1659         return -EIO;
1660     }
1661     if (retval == ITEM_FOUND) {
1662         pathrelse (path);
1663         reiserfs_warning (sb, "vs-13080: reiserfs_new_symlink: "
1664                           "object with this key exists (%k)", &(ih->ih_key));
1665         return -EEXIST;
1666     }
1667
1668     /* insert item, that is body of symlink */
1669     return reiserfs_insert_item (th, path, &key, ih, inode, symname);
1670 }
1671
1672
1673 /* inserts the stat data into the tree, and then calls
1674    reiserfs_new_directory (to insert ".", ".." item if new object is
1675    directory) or reiserfs_new_symlink (to insert symlink body if new
1676    object is symlink) or nothing (if new object is regular file) 
1677
1678    NOTE! uid and gid must already be set in the inode.  If we return
1679    non-zero due to an error, we have to drop the quota previously allocated
1680    for the fresh inode.  This can only be done outside a transaction, so
1681    if we return non-zero, we also end the transaction.  */
1682 int reiserfs_new_inode (struct reiserfs_transaction_handle *th,
1683                         struct inode * dir, int mode, 
1684                         const char * symname, 
1685                         /* 0 for regular, EMTRY_DIR_SIZE for dirs, 
1686                            strlen (symname) for symlinks)*/
1687                          loff_t i_size, struct dentry *dentry, 
1688                          struct inode *inode)
1689 {
1690     struct super_block * sb;
1691     INITIALIZE_PATH (path_to_key);
1692     struct cpu_key key;
1693     struct item_head ih;
1694     struct stat_data sd;
1695     int retval;
1696     int err;
1697
1698     BUG_ON (!th->t_trans_id);
1699   
1700     if (DQUOT_ALLOC_INODE(inode)) {
1701         err = -EDQUOT;
1702         goto out_end_trans;
1703     }
1704     if (!dir || !dir->i_nlink) {
1705         err = -EPERM;
1706         goto out_bad_inode;
1707     }
1708
1709     sb = dir->i_sb;
1710
1711     /* item head of new item */
1712     ih.ih_key.k_dir_id = reiserfs_choose_packing(dir);
1713     ih.ih_key.k_objectid = cpu_to_le32 (reiserfs_get_unused_objectid (th));
1714     if (!ih.ih_key.k_objectid) {
1715         err = -ENOMEM;
1716         goto out_bad_inode ;
1717     }
1718     if (old_format_only (sb))
1719         /* not a perfect generation count, as object ids can be reused, but 
1720         ** this is as good as reiserfs can do right now.
1721         ** note that the private part of inode isn't filled in yet, we have
1722         ** to use the directory.
1723         */
1724         inode->i_generation = le32_to_cpu (INODE_PKEY (dir)->k_objectid);
1725     else
1726 #if defined( USE_INODE_GENERATION_COUNTER )
1727         inode->i_generation = le32_to_cpu(REISERFS_SB(sb)->s_rs->s_inode_generation);
1728 #else
1729         inode->i_generation = ++event;
1730 #endif
1731
1732     /* fill stat data */
1733     inode->i_nlink = (S_ISDIR (mode) ? 2 : 1);
1734
1735     /* uid and gid must already be set by the caller for quota init */
1736
1737     /* symlink cannot be immutable or append only, right? */
1738     if( S_ISLNK( inode -> i_mode ) )
1739             inode -> i_flags &= ~ ( S_IMMUTABLE | S_APPEND );
1740
1741     inode->i_mtime = inode->i_atime = inode->i_ctime =
1742             CURRENT_TIME_SEC;
1743     inode->i_size = i_size;
1744     inode->i_blocks = 0;
1745     inode->i_bytes = 0;
1746     REISERFS_I(inode)->i_first_direct_byte = S_ISLNK(mode) ? 1 : 
1747       U32_MAX/*NO_BYTES_IN_DIRECT_ITEM*/;
1748
1749     INIT_LIST_HEAD(&(REISERFS_I(inode)->i_prealloc_list ));
1750     REISERFS_I(inode)->i_flags = 0;
1751     REISERFS_I(inode)->i_prealloc_block = 0;
1752     REISERFS_I(inode)->i_prealloc_count = 0;
1753     REISERFS_I(inode)->i_trans_id = 0;
1754     REISERFS_I(inode)->i_jl = NULL;
1755     REISERFS_I(inode)->i_attrs =
1756         REISERFS_I(dir)->i_attrs & REISERFS_INHERIT_MASK;
1757     sd_attrs_to_i_attrs( REISERFS_I(inode) -> i_attrs, inode );
1758     REISERFS_I(inode)->i_acl_access = NULL;
1759     REISERFS_I(inode)->i_acl_default = NULL;
1760     init_rwsem (&REISERFS_I(inode)->xattr_sem);
1761
1762     if (old_format_only (sb))
1763         make_le_item_head (&ih, NULL, KEY_FORMAT_3_5, SD_OFFSET, TYPE_STAT_DATA, SD_V1_SIZE, MAX_US_INT);
1764     else
1765         make_le_item_head (&ih, NULL, KEY_FORMAT_3_6, SD_OFFSET, TYPE_STAT_DATA, SD_SIZE, MAX_US_INT);
1766
1767     /* key to search for correct place for new stat data */
1768     _make_cpu_key (&key, KEY_FORMAT_3_6, le32_to_cpu (ih.ih_key.k_dir_id),
1769                    le32_to_cpu (ih.ih_key.k_objectid), SD_OFFSET, TYPE_STAT_DATA, 3/*key length*/);
1770
1771     /* find proper place for inserting of stat data */
1772     retval = search_item (sb, &key, &path_to_key);
1773     if (retval == IO_ERROR) {
1774         err = -EIO;
1775         goto out_bad_inode;
1776     }
1777     if (retval == ITEM_FOUND) {
1778         pathrelse (&path_to_key);
1779         err = -EEXIST;
1780         goto out_bad_inode;
1781     }
1782     if (old_format_only (sb)) {
1783         if (inode->i_uid & ~0xffff || inode->i_gid & ~0xffff) {
1784             pathrelse (&path_to_key);
1785             /* i_uid or i_gid is too big to be stored in stat data v3.5 */
1786             err = -EINVAL;
1787             goto out_bad_inode;
1788         }
1789         inode2sd_v1 (&sd, inode, inode->i_size);
1790     } else {
1791         inode2sd (&sd, inode, inode->i_size);
1792     }
1793     // these do not go to on-disk stat data
1794     inode->i_ino = le32_to_cpu (ih.ih_key.k_objectid);
1795     inode->i_blksize = reiserfs_default_io_size;
1796   
1797     // store in in-core inode the key of stat data and version all
1798     // object items will have (directory items will have old offset
1799     // format, other new objects will consist of new items)
1800     memcpy (INODE_PKEY (inode), &(ih.ih_key), KEY_SIZE);
1801     if (old_format_only (sb) || S_ISDIR(mode) || S_ISLNK(mode))
1802         set_inode_item_key_version (inode, KEY_FORMAT_3_5);
1803     else
1804         set_inode_item_key_version (inode, KEY_FORMAT_3_6);
1805     if (old_format_only (sb))
1806         set_inode_sd_version (inode, STAT_DATA_V1);
1807     else
1808         set_inode_sd_version (inode, STAT_DATA_V2);
1809     
1810     /* insert the stat data into the tree */
1811 #ifdef DISPLACE_NEW_PACKING_LOCALITIES
1812     if (REISERFS_I(dir)->new_packing_locality)
1813         th->displace_new_blocks = 1;
1814 #endif
1815     retval = reiserfs_insert_item (th, &path_to_key, &key, &ih, inode, (char *)(&sd));
1816     if (retval) {
1817         err = retval;
1818         reiserfs_check_path(&path_to_key) ;
1819         goto out_bad_inode;
1820     }
1821
1822 #ifdef DISPLACE_NEW_PACKING_LOCALITIES
1823     if (!th->displace_new_blocks)
1824         REISERFS_I(dir)->new_packing_locality = 0;
1825 #endif
1826     if (S_ISDIR(mode)) {
1827         /* insert item with "." and ".." */
1828         retval = reiserfs_new_directory (th, inode, &ih, &path_to_key, dir);
1829     }
1830
1831     if (S_ISLNK(mode)) {
1832         /* insert body of symlink */
1833         if (!old_format_only (sb))
1834             i_size = ROUND_UP(i_size);
1835         retval = reiserfs_new_symlink (th, inode, &ih, &path_to_key, symname, i_size);
1836     }
1837     if (retval) {
1838         err = retval;
1839         reiserfs_check_path(&path_to_key) ;
1840         journal_end(th, th->t_super, th->t_blocks_allocated);
1841         goto out_inserted_sd;
1842     }
1843
1844     /* XXX CHECK THIS */
1845     if (reiserfs_posixacl (inode->i_sb)) {
1846         retval = reiserfs_inherit_default_acl (dir, dentry, inode);
1847         if (retval) {
1848             err = retval;
1849             reiserfs_check_path(&path_to_key) ;
1850             journal_end(th, th->t_super, th->t_blocks_allocated);
1851             goto out_inserted_sd;
1852         }
1853     } else if (inode->i_sb->s_flags & MS_POSIXACL) {
1854         reiserfs_warning (inode->i_sb, "ACLs aren't enabled in the fs, "
1855                           "but vfs thinks they are!");
1856     }
1857
1858     insert_inode_hash (inode);
1859     reiserfs_update_sd(th, inode);
1860     reiserfs_check_path(&path_to_key) ;
1861
1862     return 0;
1863
1864 /* it looks like you can easily compress these two goto targets into
1865  * one.  Keeping it like this doesn't actually hurt anything, and they
1866  * are place holders for what the quota code actually needs.
1867  */
1868 out_bad_inode:
1869     /* Invalidate the object, nothing was inserted yet */
1870     INODE_PKEY(inode)->k_objectid = 0;
1871
1872     /* Quota change must be inside a transaction for journaling */
1873     DQUOT_FREE_INODE(inode);
1874
1875 out_end_trans:
1876     journal_end(th, th->t_super, th->t_blocks_allocated) ;
1877     /* Drop can be outside and it needs more credits so it's better to have it outside */
1878     DQUOT_DROP(inode);
1879     inode->i_flags |= S_NOQUOTA;
1880     make_bad_inode(inode);
1881
1882 out_inserted_sd:
1883     inode->i_nlink = 0;
1884     th->t_trans_id = 0; /* so the caller can't use this handle later */
1885     iput(inode);
1886     return err;
1887 }
1888
1889 /*
1890 ** finds the tail page in the page cache,
1891 ** reads the last block in.
1892 **
1893 ** On success, page_result is set to a locked, pinned page, and bh_result
1894 ** is set to an up to date buffer for the last block in the file.  returns 0.
1895 **
1896 ** tail conversion is not done, so bh_result might not be valid for writing
1897 ** check buffer_mapped(bh_result) and bh_result->b_blocknr != 0 before
1898 ** trying to write the block.
1899 **
1900 ** on failure, nonzero is returned, page_result and bh_result are untouched.
1901 */
1902 static int grab_tail_page(struct inode *p_s_inode, 
1903                           struct page **page_result, 
1904                           struct buffer_head **bh_result) {
1905
1906     /* we want the page with the last byte in the file,
1907     ** not the page that will hold the next byte for appending
1908     */
1909     unsigned long index = (p_s_inode->i_size-1) >> PAGE_CACHE_SHIFT ;
1910     unsigned long pos = 0 ;
1911     unsigned long start = 0 ;
1912     unsigned long blocksize = p_s_inode->i_sb->s_blocksize ;
1913     unsigned long offset = (p_s_inode->i_size) & (PAGE_CACHE_SIZE - 1) ;
1914     struct buffer_head *bh ;
1915     struct buffer_head *head ;
1916     struct page * page ;
1917     int error ;
1918     
1919     /* we know that we are only called with inode->i_size > 0.
1920     ** we also know that a file tail can never be as big as a block
1921     ** If i_size % blocksize == 0, our file is currently block aligned
1922     ** and it won't need converting or zeroing after a truncate.
1923     */
1924     if ((offset & (blocksize - 1)) == 0) {
1925         return -ENOENT ;
1926     }
1927     page = grab_cache_page(p_s_inode->i_mapping, index) ;
1928     error = -ENOMEM ;
1929     if (!page) {
1930         goto out ;
1931     }
1932     /* start within the page of the last block in the file */
1933     start = (offset / blocksize) * blocksize ;
1934
1935     error = block_prepare_write(page, start, offset, 
1936                                 reiserfs_get_block_create_0) ;
1937     if (error)
1938         goto unlock ;
1939
1940     head = page_buffers(page) ;      
1941     bh = head;
1942     do {
1943         if (pos >= start) {
1944             break ;
1945         }
1946         bh = bh->b_this_page ;
1947         pos += blocksize ;
1948     } while(bh != head) ;
1949
1950     if (!buffer_uptodate(bh)) {
1951         /* note, this should never happen, prepare_write should
1952         ** be taking care of this for us.  If the buffer isn't up to date,
1953         ** I've screwed up the code to find the buffer, or the code to
1954         ** call prepare_write
1955         */
1956         reiserfs_warning (p_s_inode->i_sb,
1957                           "clm-6000: error reading block %lu on dev %s",
1958                           bh->b_blocknr,
1959                           reiserfs_bdevname (p_s_inode->i_sb)) ;
1960         error = -EIO ;
1961         goto unlock ;
1962     }
1963     *bh_result = bh ;
1964     *page_result = page ;
1965
1966 out:
1967     return error ;
1968
1969 unlock:
1970     unlock_page(page) ;
1971     page_cache_release(page) ;
1972     return error ;
1973 }
1974
1975 /*
1976 ** vfs version of truncate file.  Must NOT be called with
1977 ** a transaction already started.
1978 **
1979 ** some code taken from block_truncate_page
1980 */
1981 int reiserfs_truncate_file(struct inode *p_s_inode, int update_timestamps) {
1982     struct reiserfs_transaction_handle th ;
1983     /* we want the offset for the first byte after the end of the file */
1984     unsigned long offset = p_s_inode->i_size & (PAGE_CACHE_SIZE - 1) ;
1985     unsigned blocksize = p_s_inode->i_sb->s_blocksize ;
1986     unsigned length ;
1987     struct page *page = NULL ;
1988     int error ;
1989     struct buffer_head *bh = NULL ;
1990
1991     reiserfs_write_lock(p_s_inode->i_sb);
1992
1993     if (p_s_inode->i_size > 0) {
1994         if ((error = grab_tail_page(p_s_inode, &page, &bh))) {
1995             // -ENOENT means we truncated past the end of the file, 
1996             // and get_block_create_0 could not find a block to read in,
1997             // which is ok.
1998             if (error != -ENOENT)
1999                 reiserfs_warning (p_s_inode->i_sb,
2000                                   "clm-6001: grab_tail_page failed %d",
2001                                   error);
2002             page = NULL ;
2003             bh = NULL ;
2004         }
2005     }
2006
2007     /* so, if page != NULL, we have a buffer head for the offset at 
2008     ** the end of the file. if the bh is mapped, and bh->b_blocknr != 0, 
2009     ** then we have an unformatted node.  Otherwise, we have a direct item, 
2010     ** and no zeroing is required on disk.  We zero after the truncate, 
2011     ** because the truncate might pack the item anyway 
2012     ** (it will unmap bh if it packs).
2013     */
2014     /* it is enough to reserve space in transaction for 2 balancings:
2015        one for "save" link adding and another for the first
2016        cut_from_item. 1 is for update_sd */
2017     error = journal_begin (&th, p_s_inode->i_sb,
2018                            JOURNAL_PER_BALANCE_CNT * 2 + 1);
2019     if (error)
2020         goto out;
2021     reiserfs_update_inode_transaction(p_s_inode) ;
2022     if (update_timestamps)
2023             /* we are doing real truncate: if the system crashes before the last
2024                transaction of truncating gets committed - on reboot the file
2025                either appears truncated properly or not truncated at all */
2026         add_save_link (&th, p_s_inode, 1);
2027     error = reiserfs_do_truncate (&th, p_s_inode, page, update_timestamps) ;
2028     if (error)
2029         goto out;
2030     error = journal_end (&th, p_s_inode->i_sb, JOURNAL_PER_BALANCE_CNT * 2 + 1);
2031     if (error)
2032         goto out;
2033
2034     if (update_timestamps) {
2035         error = remove_save_link (p_s_inode, 1/* truncate */);
2036         if (error)
2037             goto out;
2038     }
2039
2040     if (page) {
2041         length = offset & (blocksize - 1) ;
2042         /* if we are not on a block boundary */
2043         if (length) {
2044             char *kaddr;
2045
2046             length = blocksize - length ;
2047             kaddr = kmap_atomic(page, KM_USER0) ;
2048             memset(kaddr + offset, 0, length) ;   
2049             flush_dcache_page(page) ;
2050             kunmap_atomic(kaddr, KM_USER0) ;
2051             if (buffer_mapped(bh) && bh->b_blocknr != 0) {
2052                 mark_buffer_dirty(bh) ;
2053             }
2054         }
2055         unlock_page(page) ;
2056         page_cache_release(page) ;
2057     }
2058
2059     reiserfs_write_unlock(p_s_inode->i_sb);
2060     return 0;
2061 out:
2062     if (page) {
2063         unlock_page (page);
2064         page_cache_release (page);
2065     }
2066     reiserfs_write_unlock(p_s_inode->i_sb);
2067     return error;
2068 }
2069
2070 static int map_block_for_writepage(struct inode *inode, 
2071                                struct buffer_head *bh_result, 
2072                                unsigned long block) {
2073     struct reiserfs_transaction_handle th ;
2074     int fs_gen ;
2075     struct item_head tmp_ih ;
2076     struct item_head *ih ;
2077     struct buffer_head *bh ;
2078     __u32 *item ;
2079     struct cpu_key key ;
2080     INITIALIZE_PATH(path) ;
2081     int pos_in_item ;
2082     int jbegin_count = JOURNAL_PER_BALANCE_CNT ;
2083     loff_t byte_offset = (block << inode->i_sb->s_blocksize_bits) + 1 ;
2084     int retval ;
2085     int use_get_block = 0 ;
2086     int bytes_copied = 0 ;
2087     int copy_size ;
2088     int trans_running = 0;
2089
2090     /* catch places below that try to log something without starting a trans */
2091     th.t_trans_id = 0;
2092
2093     if (!buffer_uptodate(bh_result)) {
2094         return -EIO;
2095     }
2096
2097     kmap(bh_result->b_page) ;
2098 start_over:
2099     reiserfs_write_lock(inode->i_sb);
2100     make_cpu_key(&key, inode, byte_offset, TYPE_ANY, 3) ;
2101
2102 research:
2103     retval = search_for_position_by_key(inode->i_sb, &key, &path) ;
2104     if (retval != POSITION_FOUND) {
2105         use_get_block = 1;
2106         goto out ;
2107     } 
2108
2109     bh = get_last_bh(&path) ;
2110     ih = get_ih(&path) ;
2111     item = get_item(&path) ;
2112     pos_in_item = path.pos_in_item ;
2113
2114     /* we've found an unformatted node */
2115     if (indirect_item_found(retval, ih)) {
2116         if (bytes_copied > 0) {
2117             reiserfs_warning (inode->i_sb, "clm-6002: bytes_copied %d",
2118                               bytes_copied) ;
2119         }
2120         if (!get_block_num(item, pos_in_item)) {
2121             /* crap, we are writing to a hole */
2122             use_get_block = 1;
2123             goto out ;
2124         }
2125         set_block_dev_mapped(bh_result, get_block_num(item,pos_in_item),inode);
2126     } else if (is_direct_le_ih(ih)) {
2127         char *p ; 
2128         p = page_address(bh_result->b_page) ;
2129         p += (byte_offset -1) & (PAGE_CACHE_SIZE - 1) ;
2130         copy_size = ih_item_len(ih) - pos_in_item;
2131
2132         fs_gen = get_generation(inode->i_sb) ;
2133         copy_item_head(&tmp_ih, ih) ;
2134
2135         if (!trans_running) {
2136             /* vs-3050 is gone, no need to drop the path */
2137             retval = journal_begin(&th, inode->i_sb, jbegin_count) ;
2138             if (retval)
2139                 goto out;
2140             reiserfs_update_inode_transaction(inode) ;
2141             trans_running = 1;
2142             if (fs_changed(fs_gen, inode->i_sb) && item_moved(&tmp_ih, &path)) {
2143                 reiserfs_restore_prepared_buffer(inode->i_sb, bh) ;
2144                 goto research;
2145             }
2146         }
2147
2148         reiserfs_prepare_for_journal(inode->i_sb, bh, 1) ;
2149
2150         if (fs_changed (fs_gen, inode->i_sb) && item_moved (&tmp_ih, &path)) {
2151             reiserfs_restore_prepared_buffer(inode->i_sb, bh) ;
2152             goto research;
2153         }
2154
2155         memcpy( B_I_PITEM(bh, ih) + pos_in_item, p + bytes_copied, copy_size) ;
2156
2157         journal_mark_dirty(&th, inode->i_sb, bh) ;
2158         bytes_copied += copy_size ;
2159         set_block_dev_mapped(bh_result, 0, inode);
2160
2161         /* are there still bytes left? */
2162         if (bytes_copied < bh_result->b_size && 
2163             (byte_offset + bytes_copied) < inode->i_size) {
2164             set_cpu_key_k_offset(&key, cpu_key_k_offset(&key) + copy_size) ;
2165             goto research ;
2166         }
2167     } else {
2168         reiserfs_warning (inode->i_sb,
2169                           "clm-6003: bad item inode %lu, device %s",
2170                           inode->i_ino, reiserfs_bdevname (inode->i_sb)) ;
2171         retval = -EIO ;
2172         goto out ;
2173     }
2174     retval = 0 ;
2175     
2176 out:
2177     pathrelse(&path) ;
2178     if (trans_running) {
2179         int err = journal_end(&th, inode->i_sb, jbegin_count) ;
2180         if (err)
2181             retval = err;
2182         trans_running = 0;
2183     }
2184     reiserfs_write_unlock(inode->i_sb);
2185
2186     /* this is where we fill in holes in the file. */
2187     if (use_get_block) {
2188         retval = reiserfs_get_block(inode, block, bh_result, 
2189                                     GET_BLOCK_CREATE | GET_BLOCK_NO_ISEM |
2190                                     GET_BLOCK_NO_DANGLE);
2191         if (!retval) {
2192             if (!buffer_mapped(bh_result) || bh_result->b_blocknr == 0) {
2193                 /* get_block failed to find a mapped unformatted node. */
2194                 use_get_block = 0 ;
2195                 goto start_over ;
2196             }
2197         }
2198     }
2199     kunmap(bh_result->b_page) ;
2200
2201     if (!retval && buffer_mapped(bh_result) && bh_result->b_blocknr == 0) {
2202         /* we've copied data from the page into the direct item, so the
2203          * buffer in the page is now clean, mark it to reflect that.
2204          */
2205         lock_buffer(bh_result);
2206         clear_buffer_dirty(bh_result);
2207         unlock_buffer(bh_result);
2208     }
2209     return retval ;
2210 }
2211
2212 /* 
2213  * mason@suse.com: updated in 2.5.54 to follow the same general io 
2214  * start/recovery path as __block_write_full_page, along with special
2215  * code to handle reiserfs tails.
2216  */
2217 static int reiserfs_write_full_page(struct page *page, struct writeback_control *wbc) {
2218     struct inode *inode = page->mapping->host ;
2219     unsigned long end_index = inode->i_size >> PAGE_CACHE_SHIFT ;
2220     int error = 0;
2221     unsigned long block ;
2222     struct buffer_head *head, *bh;
2223     int partial = 0 ;
2224     int nr = 0;
2225     int checked = PageChecked(page);
2226     struct reiserfs_transaction_handle th;
2227     struct super_block *s = inode->i_sb;
2228     int bh_per_page = PAGE_CACHE_SIZE / s->s_blocksize;
2229     th.t_trans_id = 0;
2230
2231     /* The page dirty bit is cleared before writepage is called, which
2232      * means we have to tell create_empty_buffers to make dirty buffers
2233      * The page really should be up to date at this point, so tossing
2234      * in the BH_Uptodate is just a sanity check.
2235      */
2236     if (!page_has_buffers(page)) {
2237         create_empty_buffers(page, s->s_blocksize,
2238                             (1 << BH_Dirty) | (1 << BH_Uptodate));
2239     }
2240     head = page_buffers(page) ;
2241
2242     /* last page in the file, zero out any contents past the
2243     ** last byte in the file
2244     */
2245     if (page->index >= end_index) {
2246         char *kaddr;
2247         unsigned last_offset;
2248
2249         last_offset = inode->i_size & (PAGE_CACHE_SIZE - 1) ;
2250         /* no file contents in this page */
2251         if (page->index >= end_index + 1 || !last_offset) {
2252             unlock_page(page);
2253             return 0;
2254         }
2255         kaddr = kmap_atomic(page, KM_USER0);
2256         memset(kaddr + last_offset, 0, PAGE_CACHE_SIZE-last_offset) ;
2257         flush_dcache_page(page) ;
2258         kunmap_atomic(kaddr, KM_USER0) ;
2259     }
2260     bh = head ;
2261     block = page->index << (PAGE_CACHE_SHIFT - s->s_blocksize_bits) ;
2262     /* first map all the buffers, logging any direct items we find */
2263     do {
2264         if ((checked || buffer_dirty(bh)) && (!buffer_mapped(bh) ||
2265            (buffer_mapped(bh) && bh->b_blocknr == 0))) {
2266             /* not mapped yet, or it points to a direct item, search
2267              * the btree for the mapping info, and log any direct
2268              * items found
2269              */
2270             if ((error = map_block_for_writepage(inode, bh, block))) {
2271                 goto fail ;
2272             }
2273         }
2274         bh = bh->b_this_page;
2275         block++;
2276     } while(bh != head) ;
2277
2278     /*
2279      * we start the transaction after map_block_for_writepage,
2280      * because it can create holes in the file (an unbounded operation).
2281      * starting it here, we can make a reliable estimate for how many
2282      * blocks we're going to log
2283      */
2284     if (checked) {
2285         ClearPageChecked(page);
2286         reiserfs_write_lock(s);
2287         error = journal_begin(&th, s, bh_per_page + 1);
2288         if (error) {
2289             reiserfs_write_unlock(s);
2290             goto fail;
2291         }
2292         reiserfs_update_inode_transaction(inode);
2293     }
2294     /* now go through and lock any dirty buffers on the page */
2295     do {
2296         get_bh(bh);
2297         if (!buffer_mapped(bh))
2298             continue;
2299         if (buffer_mapped(bh) && bh->b_blocknr == 0)
2300             continue;
2301
2302         if (checked) {
2303             reiserfs_prepare_for_journal(s, bh, 1);
2304             journal_mark_dirty(&th, s, bh);
2305             continue;
2306         }
2307         /* from this point on, we know the buffer is mapped to a
2308          * real block and not a direct item
2309          */
2310         if (wbc->sync_mode != WB_SYNC_NONE || !wbc->nonblocking) {
2311             lock_buffer(bh);
2312         } else {
2313             if (test_set_buffer_locked(bh)) {
2314                 redirty_page_for_writepage(wbc, page);
2315                 continue;
2316             }
2317         }
2318         if (test_clear_buffer_dirty(bh)) {
2319             mark_buffer_async_write(bh);
2320         } else {
2321             unlock_buffer(bh);
2322         }
2323     } while((bh = bh->b_this_page) != head);
2324
2325     if (checked) {
2326         error = journal_end(&th, s, bh_per_page + 1);
2327         reiserfs_write_unlock(s);
2328         if (error)
2329             goto fail;
2330     }
2331     BUG_ON(PageWriteback(page));
2332     set_page_writeback(page);
2333     unlock_page(page);
2334
2335     /*
2336      * since any buffer might be the only dirty buffer on the page, 
2337      * the first submit_bh can bring the page out of writeback.
2338      * be careful with the buffers.
2339      */
2340     do {
2341         struct buffer_head *next = bh->b_this_page;
2342         if (buffer_async_write(bh)) {
2343             submit_bh(WRITE, bh);
2344             nr++;
2345         }
2346         put_bh(bh);
2347         bh = next;
2348     } while(bh != head);
2349
2350     error = 0;
2351 done:
2352     if (nr == 0) {
2353         /*
2354          * if this page only had a direct item, it is very possible for
2355          * no io to be required without there being an error.  Or, 
2356          * someone else could have locked them and sent them down the 
2357          * pipe without locking the page
2358          */
2359         bh = head ;
2360         do {
2361             if (!buffer_uptodate(bh)) {
2362                 partial = 1;
2363                 break;
2364             }
2365             bh = bh->b_this_page;
2366         } while(bh != head);
2367         if (!partial)
2368             SetPageUptodate(page);
2369         end_page_writeback(page);
2370     }
2371     return error;
2372
2373 fail:
2374     /* catches various errors, we need to make sure any valid dirty blocks
2375      * get to the media.  The page is currently locked and not marked for 
2376      * writeback
2377      */
2378     ClearPageUptodate(page);
2379     bh = head;
2380     do {
2381         get_bh(bh);
2382         if (buffer_mapped(bh) && buffer_dirty(bh) && bh->b_blocknr) {
2383             lock_buffer(bh);
2384             mark_buffer_async_write(bh);
2385         } else {
2386             /*
2387              * clear any dirty bits that might have come from getting
2388              * attached to a dirty page
2389              */
2390              clear_buffer_dirty(bh);
2391         }
2392         bh = bh->b_this_page;
2393     } while(bh != head);
2394     SetPageError(page);
2395     BUG_ON(PageWriteback(page));
2396     set_page_writeback(page);
2397     unlock_page(page);
2398     do {
2399         struct buffer_head *next = bh->b_this_page;
2400         if (buffer_async_write(bh)) {
2401             clear_buffer_dirty(bh);
2402             submit_bh(WRITE, bh);
2403             nr++;
2404         }
2405         put_bh(bh);
2406         bh = next;
2407     } while(bh != head);
2408     goto done;
2409 }
2410
2411
2412 static int reiserfs_readpage (struct file *f, struct page * page)
2413 {
2414     return block_read_full_page (page, reiserfs_get_block);
2415 }
2416
2417
2418 static int reiserfs_writepage (struct page * page, struct writeback_control *wbc)
2419 {
2420     struct inode *inode = page->mapping->host ;
2421     reiserfs_wait_on_write_block(inode->i_sb) ;
2422     return reiserfs_write_full_page(page, wbc) ;
2423 }
2424
2425 static int reiserfs_prepare_write(struct file *f, struct page *page,
2426                            unsigned from, unsigned to) {
2427     struct inode *inode = page->mapping->host ;
2428     int ret;
2429     int old_ref = 0;
2430
2431     reiserfs_wait_on_write_block(inode->i_sb) ;
2432     fix_tail_page_for_writing(page) ;
2433     if (reiserfs_transaction_running(inode->i_sb)) {
2434         struct reiserfs_transaction_handle *th;
2435         th = (struct reiserfs_transaction_handle *)current->journal_info;
2436         BUG_ON (!th->t_refcount);
2437         BUG_ON (!th->t_trans_id);
2438         old_ref = th->t_refcount;
2439         th->t_refcount++;
2440     }
2441
2442     ret = block_prepare_write(page, from, to, reiserfs_get_block) ;
2443     if (ret && reiserfs_transaction_running(inode->i_sb)) {
2444         struct reiserfs_transaction_handle *th = current->journal_info;
2445         /* this gets a little ugly.  If reiserfs_get_block returned an
2446          * error and left a transacstion running, we've got to close it,
2447          * and we've got to free handle if it was a persistent transaction.
2448          *
2449          * But, if we had nested into an existing transaction, we need
2450          * to just drop the ref count on the handle.
2451          *
2452          * If old_ref == 0, the transaction is from reiserfs_get_block,
2453          * and it was a persistent trans.  Otherwise, it was nested above.
2454          */
2455         if (th->t_refcount > old_ref) {
2456             if (old_ref)
2457                 th->t_refcount--;
2458             else {
2459                 int err;
2460                 reiserfs_write_lock(inode->i_sb);
2461                 err = reiserfs_end_persistent_transaction(th);
2462                 reiserfs_write_unlock(inode->i_sb);
2463                 if (err)
2464                     ret = err;
2465             }
2466         }
2467     }
2468     return ret;
2469
2470 }
2471
2472
2473 static sector_t reiserfs_aop_bmap(struct address_space *as, sector_t block) {
2474   return generic_block_bmap(as, block, reiserfs_bmap) ;
2475 }
2476
2477 static int reiserfs_commit_write(struct file *f, struct page *page, 
2478                                  unsigned from, unsigned to) {
2479     struct inode *inode = page->mapping->host ;
2480     loff_t pos = ((loff_t)page->index << PAGE_CACHE_SHIFT) + to;
2481     int ret = 0;
2482     int update_sd = 0;
2483     struct reiserfs_transaction_handle *th = NULL;
2484     
2485     reiserfs_wait_on_write_block(inode->i_sb) ;
2486     if (reiserfs_transaction_running(inode->i_sb)) {
2487         th = current->journal_info;
2488     }
2489     reiserfs_commit_page(inode, page, from, to);
2490  
2491     /* generic_commit_write does this for us, but does not update the
2492     ** transaction tracking stuff when the size changes.  So, we have
2493     ** to do the i_size updates here.
2494     */
2495     if (pos > inode->i_size) {
2496         struct reiserfs_transaction_handle myth ;
2497         reiserfs_write_lock(inode->i_sb);
2498         /* If the file have grown beyond the border where it
2499            can have a tail, unmark it as needing a tail
2500            packing */
2501         if ( (have_large_tails (inode->i_sb) && inode->i_size > i_block_size (inode)*4) ||
2502              (have_small_tails (inode->i_sb) && inode->i_size > i_block_size(inode)) )
2503             REISERFS_I(inode)->i_flags &= ~i_pack_on_close_mask ;
2504
2505         ret = journal_begin(&myth, inode->i_sb, 1) ;
2506         if (ret) {
2507             reiserfs_write_unlock(inode->i_sb);
2508             goto journal_error;
2509         }
2510         reiserfs_update_inode_transaction(inode) ;
2511         inode->i_size = pos ;
2512         reiserfs_update_sd(&myth, inode) ;
2513         update_sd = 1;
2514         ret = journal_end(&myth, inode->i_sb, 1) ;
2515         reiserfs_write_unlock(inode->i_sb);
2516         if (ret)
2517             goto journal_error;
2518     }
2519     if (th) {
2520         reiserfs_write_lock(inode->i_sb);
2521         if (!update_sd)
2522             reiserfs_update_sd(th, inode) ;
2523         ret = reiserfs_end_persistent_transaction(th);
2524         reiserfs_write_unlock(inode->i_sb);
2525         if (ret)
2526             goto out;
2527     }
2528  
2529     /* we test for O_SYNC here so we can commit the transaction
2530     ** for any packed tails the file might have had
2531     */
2532     if (f && (f->f_flags & O_SYNC)) {
2533         reiserfs_write_lock(inode->i_sb);
2534         ret = reiserfs_commit_for_inode(inode) ;
2535         reiserfs_write_unlock(inode->i_sb);
2536     }
2537 out:
2538     return ret ;
2539
2540 journal_error:
2541     if (th) {
2542         reiserfs_write_lock(inode->i_sb);
2543         if (!update_sd)
2544             reiserfs_update_sd(th, inode) ;
2545         ret = reiserfs_end_persistent_transaction(th);
2546         reiserfs_write_unlock(inode->i_sb);
2547     }
2548
2549     return ret;
2550 }
2551
2552 void sd_attrs_to_i_attrs( __u16 sd_attrs, struct inode *inode )
2553 {
2554         if( reiserfs_attrs( inode -> i_sb ) ) {
2555                 if( sd_attrs & REISERFS_SYNC_FL )
2556                         inode -> i_flags |= S_SYNC;
2557                 else
2558                         inode -> i_flags &= ~S_SYNC;
2559                 if( sd_attrs & REISERFS_IMMUTABLE_FL )
2560                         inode -> i_flags |= S_IMMUTABLE;
2561                 else
2562                         inode -> i_flags &= ~S_IMMUTABLE;
2563                 if( sd_attrs & REISERFS_IUNLINK_FL )
2564                         inode -> i_flags |= S_IUNLINK;
2565                 else
2566                         inode -> i_flags &= ~S_IUNLINK;
2567                 if( sd_attrs & REISERFS_BARRIER_FL )
2568                         inode -> i_flags |= S_BARRIER;
2569                 else
2570                         inode -> i_flags &= ~S_BARRIER;
2571                 if( sd_attrs & REISERFS_APPEND_FL )
2572                         inode -> i_flags |= S_APPEND;
2573                 else
2574                         inode -> i_flags &= ~S_APPEND;
2575                 if( sd_attrs & REISERFS_NOATIME_FL )
2576                         inode -> i_flags |= S_NOATIME;
2577                 else
2578                         inode -> i_flags &= ~S_NOATIME;
2579                 if( sd_attrs & REISERFS_NOTAIL_FL )
2580                         REISERFS_I(inode)->i_flags |= i_nopack_mask;
2581                 else
2582                         REISERFS_I(inode)->i_flags &= ~i_nopack_mask;
2583         }
2584 }
2585
2586 void i_attrs_to_sd_attrs( struct inode *inode, __u16 *sd_attrs )
2587 {
2588         if( reiserfs_attrs( inode -> i_sb ) ) {
2589                 if( inode -> i_flags & S_IMMUTABLE )
2590                         *sd_attrs |= REISERFS_IMMUTABLE_FL;
2591                 else
2592                         *sd_attrs &= ~REISERFS_IMMUTABLE_FL;
2593                 if( inode -> i_flags & S_IUNLINK )
2594                         *sd_attrs |= REISERFS_IUNLINK_FL;
2595                 else
2596                         *sd_attrs &= ~REISERFS_IUNLINK_FL;
2597                 if( inode -> i_flags & S_BARRIER )
2598                         *sd_attrs |= REISERFS_BARRIER_FL;
2599                 else
2600                         *sd_attrs &= ~REISERFS_BARRIER_FL;
2601                 if( inode -> i_flags & S_SYNC )
2602                         *sd_attrs |= REISERFS_SYNC_FL;
2603                 else
2604                         *sd_attrs &= ~REISERFS_SYNC_FL;
2605                 if( inode -> i_flags & S_NOATIME )
2606                         *sd_attrs |= REISERFS_NOATIME_FL;
2607                 else
2608                         *sd_attrs &= ~REISERFS_NOATIME_FL;
2609                 if( REISERFS_I(inode)->i_flags & i_nopack_mask )
2610                         *sd_attrs |= REISERFS_NOTAIL_FL;
2611                 else
2612                         *sd_attrs &= ~REISERFS_NOTAIL_FL;
2613         }
2614 }
2615
2616 /* decide if this buffer needs to stay around for data logging or ordered
2617 ** write purposes
2618 */
2619 static int invalidatepage_can_drop(struct inode *inode, struct buffer_head *bh)
2620 {
2621     int ret = 1 ;
2622     struct reiserfs_journal *j = SB_JOURNAL(inode->i_sb) ;
2623
2624     spin_lock(&j->j_dirty_buffers_lock) ;
2625     if (!buffer_mapped(bh)) {
2626         goto free_jh;
2627     }
2628     /* the page is locked, and the only places that log a data buffer
2629      * also lock the page.
2630      */
2631     if (reiserfs_file_data_log(inode)) {
2632         /*
2633          * very conservative, leave the buffer pinned if
2634          * anyone might need it.
2635          */
2636         if (buffer_journaled(bh) || buffer_journal_dirty(bh)) {
2637             ret = 0 ;
2638         }
2639     } else
2640     if (buffer_dirty(bh) || buffer_locked(bh)) {
2641         struct reiserfs_journal_list *jl;
2642         struct reiserfs_jh *jh = bh->b_private;
2643
2644         /* why is this safe?
2645          * reiserfs_setattr updates i_size in the on disk
2646          * stat data before allowing vmtruncate to be called.
2647          *
2648          * If buffer was put onto the ordered list for this
2649          * transaction, we know for sure either this transaction
2650          * or an older one already has updated i_size on disk,
2651          * and this ordered data won't be referenced in the file
2652          * if we crash.
2653          *
2654          * if the buffer was put onto the ordered list for an older
2655          * transaction, we need to leave it around
2656          */
2657         if (jh && (jl = jh->jl) && jl != SB_JOURNAL(inode->i_sb)->j_current_jl)
2658             ret = 0;
2659     }
2660 free_jh:
2661     if (ret && bh->b_private) {
2662         reiserfs_free_jh(bh);
2663     }
2664     spin_unlock(&j->j_dirty_buffers_lock) ;
2665     return ret ;
2666 }
2667
2668 /* clm -- taken from fs/buffer.c:block_invalidate_page */
2669 static int reiserfs_invalidatepage(struct page *page, unsigned long offset)
2670 {
2671     struct buffer_head *head, *bh, *next;
2672     struct inode *inode = page->mapping->host;
2673     unsigned int curr_off = 0;
2674     int ret = 1;
2675
2676     BUG_ON(!PageLocked(page));
2677
2678     if (offset == 0)
2679         ClearPageChecked(page);
2680
2681     if (!page_has_buffers(page))
2682         goto out;
2683
2684     head = page_buffers(page);
2685     bh = head;
2686     do {
2687         unsigned int next_off = curr_off + bh->b_size;
2688         next = bh->b_this_page;
2689
2690         /*
2691          * is this block fully invalidated?
2692          */
2693         if (offset <= curr_off) {
2694             if (invalidatepage_can_drop(inode, bh))
2695                 reiserfs_unmap_buffer(bh);
2696             else
2697                 ret = 0;
2698         }
2699         curr_off = next_off;
2700         bh = next;
2701     } while (bh != head);
2702
2703     /*
2704      * We release buffers only if the entire page is being invalidated.
2705      * The get_block cached value has been unconditionally invalidated,
2706      * so real IO is not possible anymore.
2707      */
2708     if (!offset && ret)
2709         ret = try_to_release_page(page, 0);
2710 out:
2711     return ret;
2712 }
2713
2714 static int reiserfs_set_page_dirty(struct page *page) {
2715     struct inode *inode = page->mapping->host;
2716     if (reiserfs_file_data_log(inode)) {
2717         SetPageChecked(page);
2718         return __set_page_dirty_nobuffers(page);
2719     }
2720     return __set_page_dirty_buffers(page);
2721 }
2722
2723 /*
2724  * Returns 1 if the page's buffers were dropped.  The page is locked.
2725  *
2726  * Takes j_dirty_buffers_lock to protect the b_assoc_buffers list_heads
2727  * in the buffers at page_buffers(page).
2728  *
2729  * even in -o notail mode, we can't be sure an old mount without -o notail
2730  * didn't create files with tails.
2731  */
2732 static int reiserfs_releasepage(struct page *page, int unused_gfp_flags)
2733 {
2734     struct inode *inode = page->mapping->host ;
2735     struct reiserfs_journal *j = SB_JOURNAL(inode->i_sb) ;
2736     struct buffer_head *head ;
2737     struct buffer_head *bh ;
2738     int ret = 1 ;
2739
2740     WARN_ON(PageChecked(page));
2741     spin_lock(&j->j_dirty_buffers_lock) ;
2742     head = page_buffers(page) ;
2743     bh = head ;
2744     do {
2745         if (bh->b_private) {
2746             if (!buffer_dirty(bh) && !buffer_locked(bh)) {
2747                 reiserfs_free_jh(bh);
2748             } else {
2749                 ret = 0 ;
2750                 break ;
2751             }
2752         }
2753         bh = bh->b_this_page ;
2754     } while (bh != head) ;
2755     if (ret)
2756         ret = try_to_free_buffers(page) ;
2757     spin_unlock(&j->j_dirty_buffers_lock) ;
2758     return ret ;
2759 }
2760
2761 /* We thank Mingming Cao for helping us understand in great detail what
2762    to do in this section of the code. */
2763 static ssize_t reiserfs_direct_IO(int rw, struct kiocb *iocb,
2764                 const struct iovec *iov, loff_t offset, unsigned long nr_segs)
2765 {
2766     struct file *file = iocb->ki_filp;
2767     struct inode *inode = file->f_mapping->host;
2768
2769     return blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov,
2770                         offset, nr_segs, reiserfs_get_blocks_direct_io, NULL);
2771 }
2772
2773 int reiserfs_setattr_flags(struct inode *inode, unsigned int flags)
2774 {
2775         unsigned int oldflags, newflags;
2776
2777         oldflags = REISERFS_I(inode)->i_flags;
2778         newflags = oldflags & ~(REISERFS_IMMUTABLE_FL |
2779                 REISERFS_IUNLINK_FL | REISERFS_BARRIER_FL);
2780         if (flags & ATTR_FLAG_IMMUTABLE)
2781                 newflags |= REISERFS_IMMUTABLE_FL;
2782         if (flags & ATTR_FLAG_IUNLINK)
2783                 newflags |= REISERFS_IUNLINK_FL;
2784         if (flags & ATTR_FLAG_BARRIER)
2785                 newflags |= REISERFS_BARRIER_FL;
2786
2787         if (oldflags ^ newflags) {
2788                 REISERFS_I(inode)->i_flags = newflags;
2789                 inode->i_ctime = CURRENT_TIME;
2790         }
2791         return 0;
2792 }
2793
2794 int reiserfs_setattr(struct dentry *dentry, struct iattr *attr) {
2795     struct inode *inode = dentry->d_inode ;
2796     int error ;
2797     unsigned int ia_valid = attr->ia_valid;
2798     reiserfs_write_lock(inode->i_sb);
2799     if (attr->ia_valid & ATTR_SIZE) {
2800         /* version 2 items will be caught by the s_maxbytes check
2801         ** done for us in vmtruncate
2802         */
2803         if (get_inode_item_key_version(inode) == KEY_FORMAT_3_5 &&
2804             attr->ia_size > MAX_NON_LFS) {
2805             error = -EFBIG ;
2806             goto out;
2807         }
2808         /* fill in hole pointers in the expanding truncate case. */
2809         if (attr->ia_size > inode->i_size) {
2810             error = generic_cont_expand(inode, attr->ia_size) ;
2811             if (REISERFS_I(inode)->i_prealloc_count > 0) {
2812                 int err;
2813                 struct reiserfs_transaction_handle th ;
2814                 /* we're changing at most 2 bitmaps, inode + super */
2815                 err = journal_begin(&th, inode->i_sb, 4) ;
2816                 if (!err) {
2817                     reiserfs_discard_prealloc (&th, inode);
2818                     err = journal_end(&th, inode->i_sb, 4) ;
2819                 }
2820                 if (err)
2821                     error = err;
2822             }
2823             if (error)
2824                 goto out;
2825         }
2826     }
2827
2828     if ((((attr->ia_valid & ATTR_UID) && (attr->ia_uid & ~0xffff)) ||
2829          ((attr->ia_valid & ATTR_GID) && (attr->ia_gid & ~0xffff))) &&
2830         (get_inode_sd_version (inode) == STAT_DATA_V1)) {
2831                 /* stat data of format v3.5 has 16 bit uid and gid */
2832             error = -EINVAL;
2833             goto out;
2834         }
2835
2836     error = inode_change_ok(inode, attr) ;
2837
2838     if (!error && attr->ia_valid & ATTR_ATTR_FLAG)
2839         reiserfs_setattr_flags(inode, attr->ia_attr_flags);
2840
2841     if (!error) {
2842         if ((ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) ||
2843             (ia_valid & ATTR_GID && attr->ia_gid != inode->i_gid)) {
2844                 error = reiserfs_chown_xattrs (inode, attr);
2845
2846                 if (!error) {
2847                     struct reiserfs_transaction_handle th;
2848
2849                     /* (user+group)*(old+new) structure - we count quota info and , inode write (sb, inode) */
2850                     journal_begin(&th, inode->i_sb, 4*REISERFS_QUOTA_INIT_BLOCKS+2);
2851                     error = DQUOT_TRANSFER(inode, attr) ? -EDQUOT : 0;
2852                     if (error) {
2853                         journal_end(&th, inode->i_sb, 4*REISERFS_QUOTA_INIT_BLOCKS+2);
2854                         goto out;
2855                     }
2856                     /* Update corresponding info in inode so that everything is in
2857                      * one transaction */
2858                     if (attr->ia_valid & ATTR_UID)
2859                         inode->i_uid = attr->ia_uid;
2860                     if (attr->ia_valid & ATTR_GID)
2861                         inode->i_gid = attr->ia_gid;
2862                     mark_inode_dirty(inode);
2863                     journal_end(&th, inode->i_sb, 4*REISERFS_QUOTA_INIT_BLOCKS+2);
2864                 }
2865         }
2866         if (!error)
2867             error = inode_setattr(inode, attr) ;
2868     }
2869
2870
2871     if (!error && reiserfs_posixacl (inode->i_sb)) {
2872         if (attr->ia_valid & ATTR_MODE)
2873             error = reiserfs_acl_chmod (inode);
2874     }
2875
2876 out:
2877     reiserfs_write_unlock(inode->i_sb);
2878     return error ;
2879 }
2880
2881
2882
2883 struct address_space_operations reiserfs_address_space_operations = {
2884     .writepage = reiserfs_writepage,
2885     .readpage = reiserfs_readpage, 
2886     .readpages = reiserfs_readpages, 
2887     .releasepage = reiserfs_releasepage,
2888     .invalidatepage = reiserfs_invalidatepage,
2889     .sync_page = block_sync_page,
2890     .prepare_write = reiserfs_prepare_write,
2891     .commit_write = reiserfs_commit_write,
2892     .bmap = reiserfs_aop_bmap,
2893     .direct_IO = reiserfs_direct_IO,
2894     .set_page_dirty = reiserfs_set_page_dirty,
2895 } ;