Skip to contentSkip to conversation

TAKE 970240 - kill BMAPI_DEVICE

DISCUSSION [email protected] 3 participants 3 messages Sep 13, 2007

lore
Share & tools
lore
#0 lore raw

kill BMAPI_DEVICE

There is no reason to go into the iomap machinery just to get the right block device for an inode. Instead look at the realtime flag in the inode and grab the right device from the mount structure.

I created a new helper, xfs_find_bdev_for_inode instead of opencoding it because I plan to use it in other places in the future.

Date:  Thu Sep 13 14:33:42 AEST 2007
Workarea:  linuxbuild.melbourne.sgi.com:/home/donaldd/isms/2.6.x-xfs
Inspected by:  [email protected]

The following file(s) were checked into:
longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb

Modid: xfs-linux-melb:xfs-kern:29680a
fs/xfs/xfs_iomap.h - 1.11 - changed
http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_iomap.h.diff?r1=text&tr1=1.11&r2=text&tr2=1.10&f=h
- kill BMAPI_DEVICE

fs/xfs/xfs_iomap.c - 1.55 - changed
http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_iomap.c.diff?r1=text&tr1=1.55&r2=text&tr2=1.54&f=h
- kill BMAPI_DEVICE

fs/xfs/linux-2.6/xfs_aops.c - 1.154 - changed
http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_aops.c.diff?r1=text&tr1=1.154&r2=text&tr2=1.153&f=h
- kill BMAPI_DEVICE

#1 lore raw

Can one of you let me know the process of submitting changes?

Problem: Real time flag set on a regular file can race with directio which can lead to
incorrect real time device for iomap in xfs_vm_direct_IO. This
can happen
only on the first I/O to the file as we don't set real time
flag if any of
the extents or delayed blocks present.

Fix:

  xfs_setattr() {
          ...
          if (!(mask & XFS_AT_SIZE)) {
                 if (need_io_lock && vap->va_xflags & XFS_XFLAG_REALTIME)
                        lock_flags |= XFS_IOLOCK_EXCL;
                 .....
          }
         ...

}

-Thanks,
Saradhi.

Quoted 17 lines · On 9/13/07, [email protected] <[email protected]> wrote:

kill BMAPI_DEVICE

There is no reason to go into the iomap machinery just to get the right block device for an inode. Instead look at the realtime flag in the inode and grab the right device from the mount structure.

I created a new helper, xfs_find_bdev_for_inode instead of opencoding it because I plan to use it in other places in the future.

Date:  Thu Sep 13 14:33:42 AEST 2007
Workarea:  linuxbuild.melbourne.sgi.com:/home/donaldd/isms/2.6.x-xfs
Inspected by:  [email protected]
Quoted 6 lines

The following file(s) were checked into:
longdrop.melbourne.sgi.com:/isms/linux/2.6.x-xfs-melb

Modid: xfs-linux-melb:xfs-kern:29680a
fs/xfs/xfs_iomap.h - 1.11 - changed

http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/> xfs_iomap.h.diff?r1=text&tr1=1.11&r2=text&tr2=1.10&f=h

Quoted 5 lines

http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_iomap.h.diff?r1=text&tr1=1.11&r2=text&tr2=1.10&f=h
- kill BMAPI_DEVICE

fs/xfs/xfs_iomap.c - 1.55 - changed

http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/> xfs_iomap.c.diff?r1=text&tr1=1.55&r2=text&tr2=1.54&f=h

Quoted 5 lines

http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/xfs_iomap.c.diff?r1=text&tr1=1.55&r2=text&tr2=1.54&f=h
- kill BMAPI_DEVICE

fs/xfs/linux-2.6/xfs_aops.c - 1.154 - changed

http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/> linux-2.6/xfs_aops.c.diff?r1=text&tr1=1.154&r2=text&tr2=1.153&f=h

Quoted 7 lines

http://oss.sgi.com/cgi-bin/cvsweb.cgi/xfs-linux/linux-2.6/xfs_aops.c.diff?r1=text&tr1=1.154&r2=text&tr2=1.153&f=h
- kill BMAPI_DEVICE

[[HTML alternate version deleted]]

#2 lore raw
Quoted 1 line · Bhagi rathi

Can one of you let me know the process of submitting changes?

Just send a unified diff (using diff -u) to the list.

Quoted 11 lines

Problem: Real time flag set on a regular file can race with directio which can lead to
incorrect real time device for iomap in xfs_vm_direct_IO. This
can happen
only on the first I/O to the file as we don't set real time
flag if any of
the extents or delayed blocks present.

Fix:

Quoted 7 lines
  xfs_setattr() {
          ...
          if (!(mask & XFS_AT_SIZE)) {
                 if (need_io_lock && vap->va_xflags & XFS_XFLAG_REALTIME)
                        lock_flags |= XFS_IOLOCK_EXCL;
                 .....
          }

I have a patch queued up aswell, although it's after a reorganization of the code to not clutter xfs_setattr even more. If you want to send out the fix now please go ahead.