/* this is common implementation of create_object method of file plugin */ int reiser4_create_object_common(struct inode *object, struct inode *parent, reiser4_object_create_data * data) { reiser4_block_nr reserve; assert("nikita-744", object != NULL); assert("nikita-745", parent != NULL); assert("nikita-747", data != NULL); assert("nikita-748", reiser4_inode_get_flag(object, REISER4_NO_SD)); reserve = estimate_create_common(object); if (reiser4_grab_space(reserve, BA_CAN_COMMIT)) return RETERR(-ENOSPC); return write_sd_by_inode_common(object); }
/* * common sync method for regular files. * * We are trying to be smart here. Instead of committing all atoms (original * solution), we scan dirty pages of this file and commit all atoms they are * part of. * * Situation is complicated by anonymous pages: i.e., extent-less pages * dirtied through mmap. Fortunately sys_fsync() first calls * filemap_fdatawrite() that will ultimately call reiser4_writepages(), insert * all missing extents and capture anonymous pages. */ int reiser4_sync_file_common(struct file *file, struct dentry *dentry, int datasync) { reiser4_context *ctx; txn_atom *atom; reiser4_block_nr reserve; ctx = reiser4_init_context(dentry->d_inode->i_sb); if (IS_ERR(ctx)) return PTR_ERR(ctx); reserve = estimate_update_common(dentry->d_inode); if (reiser4_grab_space(reserve, BA_CAN_COMMIT)) { reiser4_exit_context(ctx); return RETERR(-ENOSPC); } write_sd_by_inode_common(dentry->d_inode); atom = get_current_atom_locked(); spin_lock_txnh(ctx->trans); force_commit_atom(ctx->trans); reiser4_exit_context(ctx); return 0; }