]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/block/loop.c
block: unify flags for struct bio and struct request
[net-next-2.6.git] / drivers / block / loop.c
index 8546d123b9a745492cbbe0aace5b5ce6a2324298..fedfdb7d3cdfae59bcfda37d09e08ea91bae1ecf 100644 (file)
@@ -476,7 +476,7 @@ static int do_bio_filebacked(struct loop_device *lo, struct bio *bio)
        pos = ((loff_t) bio->bi_sector << 9) + lo->lo_offset;
 
        if (bio_rw(bio) == WRITE) {
-               bool barrier = bio_rw_flagged(bio, BIO_RW_BARRIER);
+               bool barrier = (bio->bi_rw & REQ_HARDBARRIER);
                struct file *file = lo->lo_backing_file;
 
                if (barrier) {
@@ -485,7 +485,7 @@ static int do_bio_filebacked(struct loop_device *lo, struct bio *bio)
                                goto out;
                        }
 
-                       ret = vfs_fsync(file, file->f_path.dentry, 0);
+                       ret = vfs_fsync(file, 0);
                        if (unlikely(ret)) {
                                ret = -EIO;
                                goto out;
@@ -495,7 +495,7 @@ static int do_bio_filebacked(struct loop_device *lo, struct bio *bio)
                ret = lo_send(lo, bio, pos);
 
                if (barrier && !ret) {
-                       ret = vfs_fsync(file, file->f_path.dentry, 0);
+                       ret = vfs_fsync(file, 0);
                        if (unlikely(ret))
                                ret = -EIO;
                }
@@ -835,6 +835,8 @@ static int loop_set_fd(struct loop_device *lo, fmode_t mode,
 
        set_capacity(lo->lo_disk, size);
        bd_set_size(bdev, size << 9);
+       /* let user-space know about the new size */
+       kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
 
        set_blocksize(bdev, lo_blocksize);
 
@@ -858,6 +860,7 @@ out_clr:
        set_capacity(lo->lo_disk, 0);
        invalidate_bdev(bdev);
        bd_set_size(bdev, 0);
+       kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
        mapping_set_gfp_mask(mapping, lo->old_gfp_mask);
        lo->lo_state = Lo_unbound;
  out_putf:
@@ -944,8 +947,11 @@ static int loop_clr_fd(struct loop_device *lo, struct block_device *bdev)
        if (bdev)
                invalidate_bdev(bdev);
        set_capacity(lo->lo_disk, 0);
-       if (bdev)
+       if (bdev) {
                bd_set_size(bdev, 0);
+               /* let user-space know about this change */
+               kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
+       }
        mapping_set_gfp_mask(filp->f_mapping, gfp);
        lo->lo_state = Lo_unbound;
        /* This is safe: open() is still holding a reference. */
@@ -1189,6 +1195,8 @@ static int loop_set_capacity(struct loop_device *lo, struct block_device *bdev)
        sz <<= 9;
        mutex_lock(&bdev->bd_mutex);
        bd_set_size(bdev, sz);
+       /* let user-space know about the new size */
+       kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
        mutex_unlock(&bdev->bd_mutex);
 
  out: