linux/fs/gfs2/file.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
   3 * Copyright (C) 2004-2006 Red Hat, Inc.  All rights reserved.
   4 *
   5 * This copyrighted material is made available to anyone wishing to use,
   6 * modify, copy, or redistribute it subject to the terms and conditions
   7 * of the GNU General Public License version 2.
   8 */
   9
  10#include <linux/slab.h>
  11#include <linux/spinlock.h>
  12#include <linux/completion.h>
  13#include <linux/buffer_head.h>
  14#include <linux/pagemap.h>
  15#include <linux/uio.h>
  16#include <linux/blkdev.h>
  17#include <linux/mm.h>
  18#include <linux/mount.h>
  19#include <linux/fs.h>
  20#include <linux/gfs2_ondisk.h>
  21#include <linux/ext2_fs.h>
  22#include <linux/falloc.h>
  23#include <linux/swap.h>
  24#include <linux/crc32.h>
  25#include <linux/writeback.h>
  26#include <asm/uaccess.h>
  27#include <linux/dlm.h>
  28#include <linux/dlm_plock.h>
  29
  30#include "gfs2.h"
  31#include "incore.h"
  32#include "bmap.h"
  33#include "dir.h"
  34#include "glock.h"
  35#include "glops.h"
  36#include "inode.h"
  37#include "log.h"
  38#include "meta_io.h"
  39#include "quota.h"
  40#include "rgrp.h"
  41#include "trans.h"
  42#include "util.h"
  43
  44/**
  45 * gfs2_llseek - seek to a location in a file
  46 * @file: the file
  47 * @offset: the offset
  48 * @origin: Where to seek from (SEEK_SET, SEEK_CUR, or SEEK_END)
  49 *
  50 * SEEK_END requires the glock for the file because it references the
  51 * file's size.
  52 *
  53 * Returns: The new offset, or errno
  54 */
  55
  56static loff_t gfs2_llseek(struct file *file, loff_t offset, int origin)
  57{
  58        struct gfs2_inode *ip = GFS2_I(file->f_mapping->host);
  59        struct gfs2_holder i_gh;
  60        loff_t error;
  61
  62        if (origin == 2) {
  63                error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY,
  64                                           &i_gh);
  65                if (!error) {
  66                        error = generic_file_llseek_unlocked(file, offset, origin);
  67                        gfs2_glock_dq_uninit(&i_gh);
  68                }
  69        } else
  70                error = generic_file_llseek_unlocked(file, offset, origin);
  71
  72        return error;
  73}
  74
  75/**
  76 * gfs2_readdir - Read directory entries from a directory
  77 * @file: The directory to read from
  78 * @dirent: Buffer for dirents
  79 * @filldir: Function used to do the copying
  80 *
  81 * Returns: errno
  82 */
  83
  84static int gfs2_readdir(struct file *file, void *dirent, filldir_t filldir)
  85{
  86        struct inode *dir = file->f_mapping->host;
  87        struct gfs2_inode *dip = GFS2_I(dir);
  88        struct gfs2_holder d_gh;
  89        u64 offset = file->f_pos;
  90        int error;
  91
  92        gfs2_holder_init(dip->i_gl, LM_ST_SHARED, 0, &d_gh);
  93        error = gfs2_glock_nq(&d_gh);
  94        if (error) {
  95                gfs2_holder_uninit(&d_gh);
  96                return error;
  97        }
  98
  99        error = gfs2_dir_read(dir, &offset, dirent, filldir);
 100
 101        gfs2_glock_dq_uninit(&d_gh);
 102
 103        file->f_pos = offset;
 104
 105        return error;
 106}
 107
 108/**
 109 * fsflags_cvt
 110 * @table: A table of 32 u32 flags
 111 * @val: a 32 bit value to convert
 112 *
 113 * This function can be used to convert between fsflags values and
 114 * GFS2's own flags values.
 115 *
 116 * Returns: the converted flags
 117 */
 118static u32 fsflags_cvt(const u32 *table, u32 val)
 119{
 120        u32 res = 0;
 121        while(val) {
 122                if (val & 1)
 123                        res |= *table;
 124                table++;
 125                val >>= 1;
 126        }
 127        return res;
 128}
 129
 130static const u32 fsflags_to_gfs2[32] = {
 131        [3] = GFS2_DIF_SYNC,
 132        [4] = GFS2_DIF_IMMUTABLE,
 133        [5] = GFS2_DIF_APPENDONLY,
 134        [7] = GFS2_DIF_NOATIME,
 135        [12] = GFS2_DIF_EXHASH,
 136        [14] = GFS2_DIF_INHERIT_JDATA,
 137};
 138
 139static const u32 gfs2_to_fsflags[32] = {
 140        [gfs2fl_Sync] = FS_SYNC_FL,
 141        [gfs2fl_Immutable] = FS_IMMUTABLE_FL,
 142        [gfs2fl_AppendOnly] = FS_APPEND_FL,
 143        [gfs2fl_NoAtime] = FS_NOATIME_FL,
 144        [gfs2fl_ExHash] = FS_INDEX_FL,
 145        [gfs2fl_InheritJdata] = FS_JOURNAL_DATA_FL,
 146};
 147
 148static int gfs2_get_flags(struct file *filp, u32 __user *ptr)
 149{
 150        struct inode *inode = filp->f_path.dentry->d_inode;
 151        struct gfs2_inode *ip = GFS2_I(inode);
 152        struct gfs2_holder gh;
 153        int error;
 154        u32 fsflags;
 155
 156        gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
 157        error = gfs2_glock_nq(&gh);
 158        if (error)
 159                return error;
 160
 161        fsflags = fsflags_cvt(gfs2_to_fsflags, ip->i_diskflags);
 162        if (!S_ISDIR(inode->i_mode) && ip->i_diskflags & GFS2_DIF_JDATA)
 163                fsflags |= FS_JOURNAL_DATA_FL;
 164        if (put_user(fsflags, ptr))
 165                error = -EFAULT;
 166
 167        gfs2_glock_dq(&gh);
 168        gfs2_holder_uninit(&gh);
 169        return error;
 170}
 171
 172void gfs2_set_inode_flags(struct inode *inode)
 173{
 174        struct gfs2_inode *ip = GFS2_I(inode);
 175        unsigned int flags = inode->i_flags;
 176
 177        flags &= ~(S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC);
 178        if (ip->i_diskflags & GFS2_DIF_IMMUTABLE)
 179                flags |= S_IMMUTABLE;
 180        if (ip->i_diskflags & GFS2_DIF_APPENDONLY)
 181                flags |= S_APPEND;
 182        if (ip->i_diskflags & GFS2_DIF_NOATIME)
 183                flags |= S_NOATIME;
 184        if (ip->i_diskflags & GFS2_DIF_SYNC)
 185                flags |= S_SYNC;
 186        inode->i_flags = flags;
 187}
 188
 189/* Flags that can be set by user space */
 190#define GFS2_FLAGS_USER_SET (GFS2_DIF_JDATA|                    \
 191                             GFS2_DIF_IMMUTABLE|                \
 192                             GFS2_DIF_APPENDONLY|               \
 193                             GFS2_DIF_NOATIME|                  \
 194                             GFS2_DIF_SYNC|                     \
 195                             GFS2_DIF_SYSTEM|                   \
 196                             GFS2_DIF_INHERIT_JDATA)
 197
 198/**
 199 * gfs2_set_flags - set flags on an inode
 200 * @inode: The inode
 201 * @flags: The flags to set
 202 * @mask: Indicates which flags are valid
 203 *
 204 */
 205static int do_gfs2_set_flags(struct file *filp, u32 reqflags, u32 mask)
 206{
 207        struct inode *inode = filp->f_path.dentry->d_inode;
 208        struct gfs2_inode *ip = GFS2_I(inode);
 209        struct gfs2_sbd *sdp = GFS2_SB(inode);
 210        struct buffer_head *bh;
 211        struct gfs2_holder gh;
 212        int error;
 213        u32 new_flags, flags;
 214
 215        error = mnt_want_write(filp->f_path.mnt);
 216        if (error)
 217                return error;
 218
 219        error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
 220        if (error)
 221                goto out_drop_write;
 222
 223        error = -EACCES;
 224        if (!is_owner_or_cap(inode))
 225                goto out;
 226
 227        error = 0;
 228        flags = ip->i_diskflags;
 229        new_flags = (flags & ~mask) | (reqflags & mask);
 230        if ((new_flags ^ flags) == 0)
 231                goto out;
 232
 233        error = -EINVAL;
 234        if ((new_flags ^ flags) & ~GFS2_FLAGS_USER_SET)
 235                goto out;
 236
 237        error = -EPERM;
 238        if (IS_IMMUTABLE(inode) && (new_flags & GFS2_DIF_IMMUTABLE))
 239                goto out;
 240        if (IS_APPEND(inode) && (new_flags & GFS2_DIF_APPENDONLY))
 241                goto out;
 242        if (((new_flags ^ flags) & GFS2_DIF_IMMUTABLE) &&
 243            !capable(CAP_LINUX_IMMUTABLE))
 244                goto out;
 245        if (!IS_IMMUTABLE(inode)) {
 246                error = gfs2_permission(inode, MAY_WRITE, 0);
 247                if (error)
 248                        goto out;
 249        }
 250        if ((flags ^ new_flags) & GFS2_DIF_JDATA) {
 251                if (flags & GFS2_DIF_JDATA)
 252                        gfs2_log_flush(sdp, ip->i_gl);
 253                error = filemap_fdatawrite(inode->i_mapping);
 254                if (error)
 255                        goto out;
 256                error = filemap_fdatawait(inode->i_mapping);
 257                if (error)
 258                        goto out;
 259        }
 260        error = gfs2_trans_begin(sdp, RES_DINODE, 0);
 261        if (error)
 262                goto out;
 263        error = gfs2_meta_inode_buffer(ip, &bh);
 264        if (error)
 265                goto out_trans_end;
 266        gfs2_trans_add_bh(ip->i_gl, bh, 1);
 267        ip->i_diskflags = new_flags;
 268        gfs2_dinode_out(ip, bh->b_data);
 269        brelse(bh);
 270        gfs2_set_inode_flags(inode);
 271        gfs2_set_aops(inode);
 272out_trans_end:
 273        gfs2_trans_end(sdp);
 274out:
 275        gfs2_glock_dq_uninit(&gh);
 276out_drop_write:
 277        mnt_drop_write(filp->f_path.mnt);
 278        return error;
 279}
 280
 281static int gfs2_set_flags(struct file *filp, u32 __user *ptr)
 282{
 283        struct inode *inode = filp->f_path.dentry->d_inode;
 284        u32 fsflags, gfsflags;
 285
 286        if (get_user(fsflags, ptr))
 287                return -EFAULT;
 288
 289        gfsflags = fsflags_cvt(fsflags_to_gfs2, fsflags);
 290        if (!S_ISDIR(inode->i_mode)) {
 291                if (gfsflags & GFS2_DIF_INHERIT_JDATA)
 292                        gfsflags ^= (GFS2_DIF_JDATA | GFS2_DIF_INHERIT_JDATA);
 293                return do_gfs2_set_flags(filp, gfsflags, ~0);
 294        }
 295        return do_gfs2_set_flags(filp, gfsflags, ~GFS2_DIF_JDATA);
 296}
 297
 298static long gfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 299{
 300        switch(cmd) {
 301        case FS_IOC_GETFLAGS:
 302                return gfs2_get_flags(filp, (u32 __user *)arg);
 303        case FS_IOC_SETFLAGS:
 304                return gfs2_set_flags(filp, (u32 __user *)arg);
 305        }
 306        return -ENOTTY;
 307}
 308
 309/**
 310 * gfs2_allocate_page_backing - Use bmap to allocate blocks
 311 * @page: The (locked) page to allocate backing for
 312 *
 313 * We try to allocate all the blocks required for the page in
 314 * one go. This might fail for various reasons, so we keep
 315 * trying until all the blocks to back this page are allocated.
 316 * If some of the blocks are already allocated, thats ok too.
 317 */
 318
 319static int gfs2_allocate_page_backing(struct page *page)
 320{
 321        struct inode *inode = page->mapping->host;
 322        struct buffer_head bh;
 323        unsigned long size = PAGE_CACHE_SIZE;
 324        u64 lblock = page->index << (PAGE_CACHE_SHIFT - inode->i_blkbits);
 325
 326        do {
 327                bh.b_state = 0;
 328                bh.b_size = size;
 329                gfs2_block_map(inode, lblock, &bh, 1);
 330                if (!buffer_mapped(&bh))
 331                        return -EIO;
 332                size -= bh.b_size;
 333                lblock += (bh.b_size >> inode->i_blkbits);
 334        } while(size > 0);
 335        return 0;
 336}
 337
 338/**
 339 * gfs2_page_mkwrite - Make a shared, mmap()ed, page writable
 340 * @vma: The virtual memory area
 341 * @page: The page which is about to become writable
 342 *
 343 * When the page becomes writable, we need to ensure that we have
 344 * blocks allocated on disk to back that page.
 345 */
 346
 347static int gfs2_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
 348{
 349        struct page *page = vmf->page;
 350        struct inode *inode = vma->vm_file->f_path.dentry->d_inode;
 351        struct gfs2_inode *ip = GFS2_I(inode);
 352        struct gfs2_sbd *sdp = GFS2_SB(inode);
 353        unsigned long last_index;
 354        u64 pos = page->index << PAGE_CACHE_SHIFT;
 355        unsigned int data_blocks, ind_blocks, rblocks;
 356        struct gfs2_holder gh;
 357        struct gfs2_alloc *al;
 358        int ret;
 359
 360        gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
 361        ret = gfs2_glock_nq(&gh);
 362        if (ret)
 363                goto out;
 364
 365        set_bit(GLF_DIRTY, &ip->i_gl->gl_flags);
 366        set_bit(GIF_SW_PAGED, &ip->i_flags);
 367
 368        if (!gfs2_write_alloc_required(ip, pos, PAGE_CACHE_SIZE))
 369                goto out_unlock;
 370        ret = -ENOMEM;
 371        al = gfs2_alloc_get(ip);
 372        if (al == NULL)
 373                goto out_unlock;
 374
 375        ret = gfs2_quota_lock_check(ip);
 376        if (ret)
 377                goto out_alloc_put;
 378        gfs2_write_calc_reserv(ip, PAGE_CACHE_SIZE, &data_blocks, &ind_blocks);
 379        al->al_requested = data_blocks + ind_blocks;
 380        ret = gfs2_inplace_reserve(ip);
 381        if (ret)
 382                goto out_quota_unlock;
 383
 384        rblocks = RES_DINODE + ind_blocks;
 385        if (gfs2_is_jdata(ip))
 386                rblocks += data_blocks ? data_blocks : 1;
 387        if (ind_blocks || data_blocks) {
 388                rblocks += RES_STATFS + RES_QUOTA;
 389                rblocks += gfs2_rg_blocks(al);
 390        }
 391        ret = gfs2_trans_begin(sdp, rblocks, 0);
 392        if (ret)
 393                goto out_trans_fail;
 394
 395        lock_page(page);
 396        ret = -EINVAL;
 397        last_index = ip->i_inode.i_size >> PAGE_CACHE_SHIFT;
 398        if (page->index > last_index)
 399                goto out_unlock_page;
 400        ret = 0;
 401        if (!PageUptodate(page) || page->mapping != ip->i_inode.i_mapping)
 402                goto out_unlock_page;
 403        if (gfs2_is_stuffed(ip)) {
 404                ret = gfs2_unstuff_dinode(ip, page);
 405                if (ret)
 406                        goto out_unlock_page;
 407        }
 408        ret = gfs2_allocate_page_backing(page);
 409
 410out_unlock_page:
 411        unlock_page(page);
 412        gfs2_trans_end(sdp);
 413out_trans_fail:
 414        gfs2_inplace_release(ip);
 415out_quota_unlock:
 416        gfs2_quota_unlock(ip);
 417out_alloc_put:
 418        gfs2_alloc_put(ip);
 419out_unlock:
 420        gfs2_glock_dq(&gh);
 421out:
 422        gfs2_holder_uninit(&gh);
 423        if (ret == -ENOMEM)
 424                ret = VM_FAULT_OOM;
 425        else if (ret)
 426                ret = VM_FAULT_SIGBUS;
 427        return ret;
 428}
 429
 430static const struct vm_operations_struct gfs2_vm_ops = {
 431        .fault = filemap_fault,
 432        .page_mkwrite = gfs2_page_mkwrite,
 433};
 434
 435/**
 436 * gfs2_mmap -
 437 * @file: The file to map
 438 * @vma: The VMA which described the mapping
 439 *
 440 * There is no need to get a lock here unless we should be updating
 441 * atime. We ignore any locking errors since the only consequence is
 442 * a missed atime update (which will just be deferred until later).
 443 *
 444 * Returns: 0
 445 */
 446
 447static int gfs2_mmap(struct file *file, struct vm_area_struct *vma)
 448{
 449        struct gfs2_inode *ip = GFS2_I(file->f_mapping->host);
 450
 451        if (!(file->f_flags & O_NOATIME)) {
 452                struct gfs2_holder i_gh;
 453                int error;
 454
 455                gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &i_gh);
 456                error = gfs2_glock_nq(&i_gh);
 457                file_accessed(file);
 458                if (error == 0)
 459                        gfs2_glock_dq_uninit(&i_gh);
 460        }
 461        vma->vm_ops = &gfs2_vm_ops;
 462        vma->vm_flags |= VM_CAN_NONLINEAR;
 463
 464        return 0;
 465}
 466
 467/**
 468 * gfs2_open - open a file
 469 * @inode: the inode to open
 470 * @file: the struct file for this opening
 471 *
 472 * Returns: errno
 473 */
 474
 475static int gfs2_open(struct inode *inode, struct file *file)
 476{
 477        struct gfs2_inode *ip = GFS2_I(inode);
 478        struct gfs2_holder i_gh;
 479        struct gfs2_file *fp;
 480        int error;
 481
 482        fp = kzalloc(sizeof(struct gfs2_file), GFP_KERNEL);
 483        if (!fp)
 484                return -ENOMEM;
 485
 486        mutex_init(&fp->f_fl_mutex);
 487
 488        gfs2_assert_warn(GFS2_SB(inode), !file->private_data);
 489        file->private_data = fp;
 490
 491        if (S_ISREG(ip->i_inode.i_mode)) {
 492                error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY,
 493                                           &i_gh);
 494                if (error)
 495                        goto fail;
 496
 497                if (!(file->f_flags & O_LARGEFILE) &&
 498                    i_size_read(inode) > MAX_NON_LFS) {
 499                        error = -EOVERFLOW;
 500                        goto fail_gunlock;
 501                }
 502
 503                gfs2_glock_dq_uninit(&i_gh);
 504        }
 505
 506        return 0;
 507
 508fail_gunlock:
 509        gfs2_glock_dq_uninit(&i_gh);
 510fail:
 511        file->private_data = NULL;
 512        kfree(fp);
 513        return error;
 514}
 515
 516/**
 517 * gfs2_close - called to close a struct file
 518 * @inode: the inode the struct file belongs to
 519 * @file: the struct file being closed
 520 *
 521 * Returns: errno
 522 */
 523
 524static int gfs2_close(struct inode *inode, struct file *file)
 525{
 526        struct gfs2_sbd *sdp = inode->i_sb->s_fs_info;
 527        struct gfs2_file *fp;
 528
 529        fp = file->private_data;
 530        file->private_data = NULL;
 531
 532        if (gfs2_assert_warn(sdp, fp))
 533                return -EIO;
 534
 535        kfree(fp);
 536
 537        return 0;
 538}
 539
 540/**
 541 * gfs2_fsync - sync the dirty data for a file (across the cluster)
 542 * @file: the file that points to the dentry (we ignore this)
 543 * @dentry: the dentry that points to the inode to sync
 544 *
 545 * The VFS will flush "normal" data for us. We only need to worry
 546 * about metadata here. For journaled data, we just do a log flush
 547 * as we can't avoid it. Otherwise we can just bale out if datasync
 548 * is set. For stuffed inodes we must flush the log in order to
 549 * ensure that all data is on disk.
 550 *
 551 * The call to write_inode_now() is there to write back metadata and
 552 * the inode itself. It does also try and write the data, but thats
 553 * (hopefully) a no-op due to the VFS having already called filemap_fdatawrite()
 554 * for us.
 555 *
 556 * Returns: errno
 557 */
 558
 559static int gfs2_fsync(struct file *file, int datasync)
 560{
 561        struct inode *inode = file->f_mapping->host;
 562        int sync_state = inode->i_state & (I_DIRTY_SYNC|I_DIRTY_DATASYNC);
 563        int ret = 0;
 564
 565        if (gfs2_is_jdata(GFS2_I(inode))) {
 566                gfs2_log_flush(GFS2_SB(inode), GFS2_I(inode)->i_gl);
 567                return 0;
 568        }
 569
 570        if (sync_state != 0) {
 571                if (!datasync)
 572                        ret = write_inode_now(inode, 0);
 573
 574                if (gfs2_is_stuffed(GFS2_I(inode)))
 575                        gfs2_log_flush(GFS2_SB(inode), GFS2_I(inode)->i_gl);
 576        }
 577
 578        return ret;
 579}
 580
 581/**
 582 * gfs2_file_aio_write - Perform a write to a file
 583 * @iocb: The io context
 584 * @iov: The data to write
 585 * @nr_segs: Number of @iov segments
 586 * @pos: The file position
 587 *
 588 * We have to do a lock/unlock here to refresh the inode size for
 589 * O_APPEND writes, otherwise we can land up writing at the wrong
 590 * offset. There is still a race, but provided the app is using its
 591 * own file locking, this will make O_APPEND work as expected.
 592 *
 593 */
 594
 595static ssize_t gfs2_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
 596                                   unsigned long nr_segs, loff_t pos)
 597{
 598        struct file *file = iocb->ki_filp;
 599
 600        if (file->f_flags & O_APPEND) {
 601                struct dentry *dentry = file->f_dentry;
 602                struct gfs2_inode *ip = GFS2_I(dentry->d_inode);
 603                struct gfs2_holder gh;
 604                int ret;
 605
 606                ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
 607                if (ret)
 608                        return ret;
 609                gfs2_glock_dq_uninit(&gh);
 610        }
 611
 612        return generic_file_aio_write(iocb, iov, nr_segs, pos);
 613}
 614
 615static void empty_write_end(struct page *page, unsigned from,
 616                           unsigned to)
 617{
 618        struct gfs2_inode *ip = GFS2_I(page->mapping->host);
 619
 620        page_zero_new_buffers(page, from, to);
 621        flush_dcache_page(page);
 622        mark_page_accessed(page);
 623
 624        if (!gfs2_is_writeback(ip))
 625                gfs2_page_add_databufs(ip, page, from, to);
 626
 627        block_commit_write(page, from, to);
 628}
 629
 630static int write_empty_blocks(struct page *page, unsigned from, unsigned to)
 631{
 632        unsigned start, end, next;
 633        struct buffer_head *bh, *head;
 634        int error;
 635
 636        if (!page_has_buffers(page)) {
 637                error = __block_write_begin(page, from, to - from, gfs2_block_map);
 638                if (unlikely(error))
 639                        return error;
 640
 641                empty_write_end(page, from, to);
 642                return 0;
 643        }
 644
 645        bh = head = page_buffers(page);
 646        next = end = 0;
 647        while (next < from) {
 648                next += bh->b_size;
 649                bh = bh->b_this_page;
 650        }
 651        start = next;
 652        do {
 653                next += bh->b_size;
 654                if (buffer_mapped(bh)) {
 655                        if (end) {
 656                                error = __block_write_begin(page, start, end - start,
 657                                                            gfs2_block_map);
 658                                if (unlikely(error))
 659                                        return error;
 660                                empty_write_end(page, start, end);
 661                                end = 0;
 662                        }
 663                        start = next;
 664                }
 665                else
 666                        end = next;
 667                bh = bh->b_this_page;
 668        } while (next < to);
 669
 670        if (end) {
 671                error = __block_write_begin(page, start, end - start, gfs2_block_map);
 672                if (unlikely(error))
 673                        return error;
 674                empty_write_end(page, start, end);
 675        }
 676
 677        return 0;
 678}
 679
 680static int fallocate_chunk(struct inode *inode, loff_t offset, loff_t len,
 681                           int mode)
 682{
 683        struct gfs2_inode *ip = GFS2_I(inode);
 684        struct buffer_head *dibh;
 685        int error;
 686        u64 start = offset >> PAGE_CACHE_SHIFT;
 687        unsigned int start_offset = offset & ~PAGE_CACHE_MASK;
 688        u64 end = (offset + len - 1) >> PAGE_CACHE_SHIFT;
 689        pgoff_t curr;
 690        struct page *page;
 691        unsigned int end_offset = (offset + len) & ~PAGE_CACHE_MASK;
 692        unsigned int from, to;
 693
 694        if (!end_offset)
 695                end_offset = PAGE_CACHE_SIZE;
 696
 697        error = gfs2_meta_inode_buffer(ip, &dibh);
 698        if (unlikely(error))
 699                goto out;
 700
 701        gfs2_trans_add_bh(ip->i_gl, dibh, 1);
 702
 703        if (gfs2_is_stuffed(ip)) {
 704                error = gfs2_unstuff_dinode(ip, NULL);
 705                if (unlikely(error))
 706                        goto out;
 707        }
 708
 709        curr = start;
 710        offset = start << PAGE_CACHE_SHIFT;
 711        from = start_offset;
 712        to = PAGE_CACHE_SIZE;
 713        while (curr <= end) {
 714                page = grab_cache_page_write_begin(inode->i_mapping, curr,
 715                                                   AOP_FLAG_NOFS);
 716                if (unlikely(!page)) {
 717                        error = -ENOMEM;
 718                        goto out;
 719                }
 720
 721                if (curr == end)
 722                        to = end_offset;
 723                error = write_empty_blocks(page, from, to);
 724                if (!error && offset + to > inode->i_size &&
 725                    !(mode & FALLOC_FL_KEEP_SIZE)) {
 726                        i_size_write(inode, offset + to);
 727                }
 728                unlock_page(page);
 729                page_cache_release(page);
 730                if (error)
 731                        goto out;
 732                curr++;
 733                offset += PAGE_CACHE_SIZE;
 734                from = 0;
 735        }
 736
 737        gfs2_dinode_out(ip, dibh->b_data);
 738        mark_inode_dirty(inode);
 739
 740        brelse(dibh);
 741
 742out:
 743        return error;
 744}
 745
 746static void calc_max_reserv(struct gfs2_inode *ip, loff_t max, loff_t *len,
 747                            unsigned int *data_blocks, unsigned int *ind_blocks)
 748{
 749        const struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
 750        unsigned int max_blocks = ip->i_alloc->al_rgd->rd_free_clone;
 751        unsigned int tmp, max_data = max_blocks - 3 * (sdp->sd_max_height - 1);
 752
 753        for (tmp = max_data; tmp > sdp->sd_diptrs;) {
 754                tmp = DIV_ROUND_UP(tmp, sdp->sd_inptrs);
 755                max_data -= tmp;
 756        }
 757        /* This calculation isn't the exact reverse of gfs2_write_calc_reserve,
 758           so it might end up with fewer data blocks */
 759        if (max_data <= *data_blocks)
 760                return;
 761        *data_blocks = max_data;
 762        *ind_blocks = max_blocks - max_data;
 763        *len = ((loff_t)max_data - 3) << sdp->sd_sb.sb_bsize_shift;
 764        if (*len > max) {
 765                *len = max;
 766                gfs2_write_calc_reserv(ip, max, data_blocks, ind_blocks);
 767        }
 768}
 769
 770static long gfs2_fallocate(struct file *file, int mode, loff_t offset,
 771                           loff_t len)
 772{
 773        struct inode *inode = file->f_path.dentry->d_inode;
 774        struct gfs2_sbd *sdp = GFS2_SB(inode);
 775        struct gfs2_inode *ip = GFS2_I(inode);
 776        unsigned int data_blocks = 0, ind_blocks = 0, rblocks;
 777        loff_t bytes, max_bytes;
 778        struct gfs2_alloc *al;
 779        int error;
 780        loff_t next = (offset + len - 1) >> sdp->sd_sb.sb_bsize_shift;
 781        next = (next + 1) << sdp->sd_sb.sb_bsize_shift;
 782
 783        /* We only support the FALLOC_FL_KEEP_SIZE mode */
 784        if (mode & ~FALLOC_FL_KEEP_SIZE)
 785                return -EOPNOTSUPP;
 786
 787        offset = (offset >> sdp->sd_sb.sb_bsize_shift) <<
 788                 sdp->sd_sb.sb_bsize_shift;
 789
 790        len = next - offset;
 791        bytes = sdp->sd_max_rg_data * sdp->sd_sb.sb_bsize / 2;
 792        if (!bytes)
 793                bytes = UINT_MAX;
 794
 795        gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &ip->i_gh);
 796        error = gfs2_glock_nq(&ip->i_gh);
 797        if (unlikely(error))
 798                goto out_uninit;
 799
 800        if (!gfs2_write_alloc_required(ip, offset, len))
 801                goto out_unlock;
 802
 803        while (len > 0) {
 804                if (len < bytes)
 805                        bytes = len;
 806                al = gfs2_alloc_get(ip);
 807                if (!al) {
 808                        error = -ENOMEM;
 809                        goto out_unlock;
 810                }
 811
 812                error = gfs2_quota_lock_check(ip);
 813                if (error)
 814                        goto out_alloc_put;
 815
 816retry:
 817                gfs2_write_calc_reserv(ip, bytes, &data_blocks, &ind_blocks);
 818
 819                al->al_requested = data_blocks + ind_blocks;
 820                error = gfs2_inplace_reserve(ip);
 821                if (error) {
 822                        if (error == -ENOSPC && bytes > sdp->sd_sb.sb_bsize) {
 823                                bytes >>= 1;
 824                                goto retry;
 825                        }
 826                        goto out_qunlock;
 827                }
 828                max_bytes = bytes;
 829                calc_max_reserv(ip, len, &max_bytes, &data_blocks, &ind_blocks);
 830                al->al_requested = data_blocks + ind_blocks;
 831
 832                rblocks = RES_DINODE + ind_blocks + RES_STATFS + RES_QUOTA +
 833                          RES_RG_HDR + gfs2_rg_blocks(al);
 834                if (gfs2_is_jdata(ip))
 835                        rblocks += data_blocks ? data_blocks : 1;
 836
 837                error = gfs2_trans_begin(sdp, rblocks,
 838                                         PAGE_CACHE_SIZE/sdp->sd_sb.sb_bsize);
 839                if (error)
 840                        goto out_trans_fail;
 841
 842                error = fallocate_chunk(inode, offset, max_bytes, mode);
 843                gfs2_trans_end(sdp);
 844
 845                if (error)
 846                        goto out_trans_fail;
 847
 848                len -= max_bytes;
 849                offset += max_bytes;
 850                gfs2_inplace_release(ip);
 851                gfs2_quota_unlock(ip);
 852                gfs2_alloc_put(ip);
 853        }
 854        goto out_unlock;
 855
 856out_trans_fail:
 857        gfs2_inplace_release(ip);
 858out_qunlock:
 859        gfs2_quota_unlock(ip);
 860out_alloc_put:
 861        gfs2_alloc_put(ip);
 862out_unlock:
 863        gfs2_glock_dq(&ip->i_gh);
 864out_uninit:
 865        gfs2_holder_uninit(&ip->i_gh);
 866        return error;
 867}
 868
 869#ifdef CONFIG_GFS2_FS_LOCKING_DLM
 870
 871/**
 872 * gfs2_setlease - acquire/release a file lease
 873 * @file: the file pointer
 874 * @arg: lease type
 875 * @fl: file lock
 876 *
 877 * We don't currently have a way to enforce a lease across the whole
 878 * cluster; until we do, disable leases (by just returning -EINVAL),
 879 * unless the administrator has requested purely local locking.
 880 *
 881 * Locking: called under lock_flocks
 882 *
 883 * Returns: errno
 884 */
 885
 886static int gfs2_setlease(struct file *file, long arg, struct file_lock **fl)
 887{
 888        return -EINVAL;
 889}
 890
 891/**
 892 * gfs2_lock - acquire/release a posix lock on a file
 893 * @file: the file pointer
 894 * @cmd: either modify or retrieve lock state, possibly wait
 895 * @fl: type and range of lock
 896 *
 897 * Returns: errno
 898 */
 899
 900static int gfs2_lock(struct file *file, int cmd, struct file_lock *fl)
 901{
 902        struct gfs2_inode *ip = GFS2_I(file->f_mapping->host);
 903        struct gfs2_sbd *sdp = GFS2_SB(file->f_mapping->host);
 904        struct lm_lockstruct *ls = &sdp->sd_lockstruct;
 905
 906        if (!(fl->fl_flags & FL_POSIX))
 907                return -ENOLCK;
 908        if (__mandatory_lock(&ip->i_inode) && fl->fl_type != F_UNLCK)
 909                return -ENOLCK;
 910
 911        if (cmd == F_CANCELLK) {
 912                /* Hack: */
 913                cmd = F_SETLK;
 914                fl->fl_type = F_UNLCK;
 915        }
 916        if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags)))
 917                return -EIO;
 918        if (IS_GETLK(cmd))
 919                return dlm_posix_get(ls->ls_dlm, ip->i_no_addr, file, fl);
 920        else if (fl->fl_type == F_UNLCK)
 921                return dlm_posix_unlock(ls->ls_dlm, ip->i_no_addr, file, fl);
 922        else
 923                return dlm_posix_lock(ls->ls_dlm, ip->i_no_addr, file, cmd, fl);
 924}
 925
 926static int do_flock(struct file *file, int cmd, struct file_lock *fl)
 927{
 928        struct gfs2_file *fp = file->private_data;
 929        struct gfs2_holder *fl_gh = &fp->f_fl_gh;
 930        struct gfs2_inode *ip = GFS2_I(file->f_path.dentry->d_inode);
 931        struct gfs2_glock *gl;
 932        unsigned int state;
 933        int flags;
 934        int error = 0;
 935
 936        state = (fl->fl_type == F_WRLCK) ? LM_ST_EXCLUSIVE : LM_ST_SHARED;
 937        flags = (IS_SETLKW(cmd) ? 0 : LM_FLAG_TRY) | GL_EXACT | GL_NOCACHE;
 938
 939        mutex_lock(&fp->f_fl_mutex);
 940
 941        gl = fl_gh->gh_gl;
 942        if (gl) {
 943                if (fl_gh->gh_state == state)
 944                        goto out;
 945                flock_lock_file_wait(file,
 946                                     &(struct file_lock){.fl_type = F_UNLCK});
 947                gfs2_glock_dq_wait(fl_gh);
 948                gfs2_holder_reinit(state, flags, fl_gh);
 949        } else {
 950                error = gfs2_glock_get(GFS2_SB(&ip->i_inode), ip->i_no_addr,
 951                                       &gfs2_flock_glops, CREATE, &gl);
 952                if (error)
 953                        goto out;
 954                gfs2_holder_init(gl, state, flags, fl_gh);
 955                gfs2_glock_put(gl);
 956        }
 957        error = gfs2_glock_nq(fl_gh);
 958        if (error) {
 959                gfs2_holder_uninit(fl_gh);
 960                if (error == GLR_TRYFAILED)
 961                        error = -EAGAIN;
 962        } else {
 963                error = flock_lock_file_wait(file, fl);
 964                gfs2_assert_warn(GFS2_SB(&ip->i_inode), !error);
 965        }
 966
 967out:
 968        mutex_unlock(&fp->f_fl_mutex);
 969        return error;
 970}
 971
 972static void do_unflock(struct file *file, struct file_lock *fl)
 973{
 974        struct gfs2_file *fp = file->private_data;
 975        struct gfs2_holder *fl_gh = &fp->f_fl_gh;
 976
 977        mutex_lock(&fp->f_fl_mutex);
 978        flock_lock_file_wait(file, fl);
 979        if (fl_gh->gh_gl)
 980                gfs2_glock_dq_uninit(fl_gh);
 981        mutex_unlock(&fp->f_fl_mutex);
 982}
 983
 984/**
 985 * gfs2_flock - acquire/release a flock lock on a file
 986 * @file: the file pointer
 987 * @cmd: either modify or retrieve lock state, possibly wait
 988 * @fl: type and range of lock
 989 *
 990 * Returns: errno
 991 */
 992
 993static int gfs2_flock(struct file *file, int cmd, struct file_lock *fl)
 994{
 995        if (!(fl->fl_flags & FL_FLOCK))
 996                return -ENOLCK;
 997        if (fl->fl_type & LOCK_MAND)
 998                return -EOPNOTSUPP;
 999
1000        if (fl->fl_type == F_UNLCK) {
1001                do_unflock(file, fl);
1002                return 0;
1003        } else {
1004                return do_flock(file, cmd, fl);
1005        }
1006}
1007
1008const struct file_operations gfs2_file_fops = {
1009        .llseek         = gfs2_llseek,
1010        .read           = do_sync_read,
1011        .aio_read       = generic_file_aio_read,
1012        .write          = do_sync_write,
1013        .aio_write      = gfs2_file_aio_write,
1014        .unlocked_ioctl = gfs2_ioctl,
1015        .mmap           = gfs2_mmap,
1016        .open           = gfs2_open,
1017        .release        = gfs2_close,
1018        .fsync          = gfs2_fsync,
1019        .lock           = gfs2_lock,
1020        .flock          = gfs2_flock,
1021        .splice_read    = generic_file_splice_read,
1022        .splice_write   = generic_file_splice_write,
1023        .setlease       = gfs2_setlease,
1024        .fallocate      = gfs2_fallocate,
1025};
1026
1027const struct file_operations gfs2_dir_fops = {
1028        .readdir        = gfs2_readdir,
1029        .unlocked_ioctl = gfs2_ioctl,
1030        .open           = gfs2_open,
1031        .release        = gfs2_close,
1032        .fsync          = gfs2_fsync,
1033        .lock           = gfs2_lock,
1034        .flock          = gfs2_flock,
1035        .llseek         = default_llseek,
1036};
1037
1038#endif /* CONFIG_GFS2_FS_LOCKING_DLM */
1039
1040const struct file_operations gfs2_file_fops_nolock = {
1041        .llseek         = gfs2_llseek,
1042        .read           = do_sync_read,
1043        .aio_read       = generic_file_aio_read,
1044        .write          = do_sync_write,
1045        .aio_write      = gfs2_file_aio_write,
1046        .unlocked_ioctl = gfs2_ioctl,
1047        .mmap           = gfs2_mmap,
1048        .open           = gfs2_open,
1049        .release        = gfs2_close,
1050        .fsync          = gfs2_fsync,
1051        .splice_read    = generic_file_splice_read,
1052        .splice_write   = generic_file_splice_write,
1053        .setlease       = generic_setlease,
1054        .fallocate      = gfs2_fallocate,
1055};
1056
1057const struct file_operations gfs2_dir_fops_nolock = {
1058        .readdir        = gfs2_readdir,
1059        .unlocked_ioctl = gfs2_ioctl,
1060        .open           = gfs2_open,
1061        .release        = gfs2_close,
1062        .fsync          = gfs2_fsync,
1063        .llseek         = default_llseek,
1064};
1065
1066