X-Git-Url: http://pilppa.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=fs%2Fudf%2Fsymlink.c;h=c3265e1385d43c5c6ed0e2960cf9d83a72493e4a;hb=17b820606e7bdd3be31b001265d0177423fea5eb;hp=c4b82a920082655964012b897c71bc61828cf9e4;hpb=40b42f1ebf653cd72c32eb1a1a0b9fea2dfbfd7d;p=linux-2.6-omap-h63xx.git diff --git a/fs/udf/symlink.c b/fs/udf/symlink.c index c4b82a92008..c3265e1385d 100644 --- a/fs/udf/symlink.c +++ b/fs/udf/symlink.c @@ -11,7 +11,7 @@ * Each contributing author retains all rights to their own work. * * (C) 1998-2001 Ben Fennema - * (C) 1999 Stelias Computing Inc + * (C) 1999 Stelias Computing Inc * * HISTORY * @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include @@ -79,11 +78,13 @@ static int udf_symlink_filler(struct file *file, struct page *page) char *symlink; int err = -EIO; char *p = kmap(page); + struct udf_inode_info *iinfo; lock_kernel(); - if (UDF_I_ALLOCTYPE(inode) == ICBTAG_FLAG_AD_IN_ICB) - symlink = UDF_I_DATA(inode) + UDF_I_LENEATTR(inode); - else { + iinfo = UDF_I(inode); + if (iinfo->i_alloc_type == ICBTAG_FLAG_AD_IN_ICB) { + symlink = iinfo->i_ext.i_data + iinfo->i_lenEAttr; + } else { bh = sb_bread(inode->i_sb, udf_block_map(inode, 0)); if (!bh) @@ -100,7 +101,8 @@ static int udf_symlink_filler(struct file *file, struct page *page) kunmap(page); unlock_page(page); return 0; - out: + +out: unlock_kernel(); SetPageError(page); kunmap(page); @@ -112,5 +114,5 @@ static int udf_symlink_filler(struct file *file, struct page *page) * symlinks can't do much... */ const struct address_space_operations udf_symlink_aops = { - .readpage = udf_symlink_filler, + .readpage = udf_symlink_filler, };