int coda_flush(struct file *file) { unsigned short flags = (file->f_flags) & (~O_EXCL); unsigned short cflags; struct coda_inode_info *cii; struct file *cfile; struct inode *cinode, *inode; int err = 0, fcnt; coda_vfs_stat.flush++; /* No need to make an upcall when we have not made any modifications * to the file */ if ((file->f_flags & O_ACCMODE) == O_RDONLY) return 0; if (use_coda_close) return 0; fcnt = file_count(file); if (fcnt > 1) return 0; cflags = coda_flags_to_cflags(flags); inode = file->f_dentry->d_inode; cii = ITOC(inode); cfile = cii->c_container; if (!cfile) BUG(); cinode = cfile->f_dentry->d_inode; CDEBUG(D_FILE, "FLUSH coda (file %p ct %d)\n", file, fcnt); err = venus_store(inode->i_sb, coda_i2f(inode), cflags, (struct coda_cred *)file->private_data); if (err == -EOPNOTSUPP) { use_coda_close = 1; err = 0; } CDEBUG(D_FILE, "coda_flush: result: %d\n", err); return err; }
int coda_flush(struct file *coda_file, fl_owner_t id) { unsigned short flags = coda_file->f_flags & ~O_EXCL; unsigned short coda_flags = coda_flags_to_cflags(flags); struct coda_file_info *cfi; struct inode *coda_inode; int err = 0, fcnt; lock_kernel(); coda_vfs_stat.flush++; /* last close semantics */ fcnt = file_count(coda_file); if (fcnt > 1) goto out; /* No need to make an upcall when we have not made any modifications * to the file */ if ((coda_file->f_flags & O_ACCMODE) == O_RDONLY) goto out; if (use_coda_close) goto out; cfi = CODA_FTOC(coda_file); BUG_ON(!cfi || cfi->cfi_magic != CODA_MAGIC); coda_inode = coda_file->f_dentry->d_inode; err = venus_store(coda_inode->i_sb, coda_i2f(coda_inode), coda_flags, coda_file->f_uid); if (err == -EOPNOTSUPP) { use_coda_close = 1; err = 0; } out: unlock_kernel(); return err; }
int coda_flush(struct file *coda_file) { unsigned short flags = coda_file->f_flags & ~O_EXCL; unsigned short coda_flags = coda_flags_to_cflags(flags); struct coda_file_info *cfi; struct inode *coda_inode; int err = 0, fcnt; coda_vfs_stat.flush++; /* No need to make an upcall when we have not made any modifications * to the file */ if ((coda_file->f_flags & O_ACCMODE) == O_RDONLY) return 0; if (use_coda_close) return 0; fcnt = file_count(coda_file); if (fcnt > 1) return 0; coda_inode = coda_file->f_dentry->d_inode; cfi = CODA_FTOC(coda_file); if (!cfi || cfi->cfi_magic != CODA_MAGIC) BUG(); err = venus_store(coda_inode->i_sb, coda_i2f(coda_inode), coda_flags, &cfi->cfi_cred); if (err == -EOPNOTSUPP) { use_coda_close = 1; err = 0; } return err; }